1. 程式人生 > >從完全零基礎教你用Python開飯一款打飛機的遊戲!是個人就能學會

從完全零基礎教你用Python開飯一款打飛機的遊戲!是個人就能學會

實現 裁剪 -i ext 想象 一點 換圖 結束 離開

技術分享圖片

技術分享圖片

默認圖片左上角為原點 (0,0)。

進群:125240963 即可獲取數十套PDF!要源碼也可以私信哦!

顯示窗口

如果我們這樣設定,當我們運行的時候,窗口會一閃而過,並不會出現我們想象的畫面。因為窗口只是運行一下就會關閉,所以我們要寫一個循環,使窗口一直保持出現。當然如果我們簡單的寫一個 while True那麽我們的程序就出現了死循環,卡死。

技術分享圖片

同時我們的資源文件裏還有一個叫做 shoot.pack 的文件,裏面記錄了每個圖片所在的位置。

我們通過下面的代碼加載資源圖片,並且獲得我們需要的主角飛機。

技術分享圖片

技術分享圖片

下一步就是完善這四個方法。

簡單的說就是按下方向鍵的時候(w,a,s,d)飛機向四周移動,但是不能移動離開屏幕。

此時我們就應該把我們的飛機形成一個類,類裏面有控制飛機的方法。

這裏寫類比較麻煩一點

技術分享圖片

player的控制

當飛機出現了,我們就應該實現我們在循環裏寫的方法。我們首先要判斷它還在不在屏幕內,不能讓飛機飛出屏幕。可以通過 rect.top,rect.bottom,rect.left,rect.right四個方法獲取飛機圖片的上下左右四個邊界值。

這樣我們就能對飛機進行判斷

技術分享圖片

讓子彈飛

子彈要沿著發射方向射出去。可以在屏幕上一直移動,直到移出屏幕。

我們只要有定義一個子彈對象,讓這個對象顯示在屏幕上就可以。

先定義飛機子彈類,基本和定義 player 一樣,獲得圖片,裁剪圖片,設置圖片初始位置,在屏幕上顯示圖片

技術分享圖片

下一步就是讓飛機的子彈跟隨飛機。

我們需要在 Player 類裏面添加方法。

首先我們規定,按下空格發射子彈。

技術分享圖片

下一步就是讓子彈在屏幕上移動。

創建移動的方法。

技術分享圖片

player 的飛機就算基本繪制好了

繪制敵機

下一步就是繪制敵機。敵機是從屏幕上方移動到屏幕下方。我們任就需要一個類來設置敵機。設置類任就和我們前面的差不多,加載資源,設置 rect,設置位置。

技術分享圖片

現在我們就應該想想敵機的特點了,其實他和子彈的特點基本一直,只不過方向不一樣而已。還有一點是敵機是隨機生成的。

技術分享圖片

移動實現

技術分享圖片

碰撞檢測

飛機和敵機還有子彈都有了,我們現在需要進行完成碰撞檢測。有下面幾種場景。

  1. 敵機和玩家碰撞在一起
  2. 子彈和敵機碰撞在一起

無論是那種情況的碰撞,其實就是兩張圖片有了交集。

如圖

技術分享圖片

在 Player 類裏面添加是否擊中屬性。

self.is_hit = False

修改循環

技術分享圖片

做到這裏基本算是實現了飛機大戰.但是還有很多細節處理。

細節處理

精細的碰撞檢測

從圖上看,當敵機看似還沒有和我們接觸時,但是已經 GameOver 了。

實際情況是這樣的,所有的圖片都是矩形,當兩張圖片的矩形邊框線碰撞的時候,就算兩個對象碰撞,所以我們要更加精細的使用碰撞檢測。

技術分享圖片

動畫

做了怎麽就,感覺它沒有一點動效,感覺死氣沈沈的。無論是飛機飛行,還是飛機被擊中,都沒有一個明確的反饋。

對於2d遊戲,動畫其實就是一張一張的圖片不停的變化。就和電影的原理類似。要想讓我們的飛機動起來,我們需要定義一個列表來存放這些圖片,然後寫個循環,讓他一直不停的更換圖片就好。

首先我們更改我們的主角 Player

任就是老套路,加載圖片。把加載的圖片放到list 裏。

技術分享圖片

飛機正常飛行的圖片只有兩張。所以我們要循環變化這兩張圖片。所以每發射一個子彈,圖片變化兩張。

技術分享圖片

技術分享圖片

加載圖片enemies_shoot_img = [plane_img.subsurface(pygame.Rect(267, 347, 57, 43)),

plane_img.subsurface(pygame.Rect(873, 697, 57, 43)),

plane_img.subsurface(pygame.Rect(267, 296, 57, 43)),

plane_img.subsurface(pygame.Rect(930, 697, 57, 43))]

技術分享圖片

這樣的話基本完成了動畫效果。

音樂

有了動畫還的有音樂。

音樂的處理只要在特定的地方播放音樂就好,比如子彈發射的時候,背景音樂,被擊中的時候,遊戲結束的時候,等等。他們的處理邏輯都一樣。先加載資源,然後在播放。

背景音樂的播放。

pygame 在處理背景音樂的時候都在 pygame.mixer 方法中。其中播放音樂的play中的參數,第一個為播放幾次,-1 為循環播放,後面的浮點表示 從第幾秒開始播放。

技術分享圖片

分數&等級

分數

首先繪制得分情況,在屏幕上顯示多少分。

繪制字體基本和繪制精靈是差不多的。首先要生成字體

兩個參數分別是字體和字號

技術分享圖片

我們還需要在文本的地方強制轉換為 str 。

score_text = score_font.render(str(score), True, (128, 128, 128))

等級

有了分數,那麽再加點等級會使遊戲更加有趣味性。

同樣的先繪制等級。

技術分享圖片

需要源碼記得私信小編哦!

從完全零基礎教你用Python開飯一款打飛機的遊戲!是個人就能學會