Pygame 外星人入侵(7)外星人壓境

2021-10-08 21:44:47 字數 3015 閱讀 5590

二、更加合理地移動

三、小結

在之前的博文中,實現了在螢幕上繪製一大群外星人,現在我們想讓這群外星人動起來,它們的移動遵循著一定的規律。

我們首先要實現的是,如何讓一群外星人一起向螢幕右側移動。

遊戲引數性質的變數統一存放在 設定模組中的設定類中

# 6、外星人的屬性

# 6。1 外星人移動的速度

self.alien_speed =

1

在 alien 類中定義修改外星人位置的方法

# 更新外星人位置的方法

defupdate

(self)

: self.x += self.settings.alien_speed * self.settings.fleet_direction

self.rect.x = self.x

之前我們是通過 update_aliens() 方法來繪製外星人群到螢幕上的,現在我們不僅要在這個方法中繪製初始外星人,還要移動它們的位置,因此,需要呼叫剛才定義的修改位置的方法

# 更新外星人位置的方法

defupdate_aliens

(aliens, settings)

: aliens.update(

)

此時,我們就實現了整群的外星人向螢幕外移動,它們會逐漸飛離螢幕,直到看不見為止。

像剛才那樣單向移動直到飛出螢幕外的移動方式顯然需要改進,我們嘗試定義外星人移動的規則:

1、初始時,向右移動,直到螢幕邊緣

2、當外星人到達螢幕邊緣時,向下移動一段距離,然後向左移動

3、與1、2同理,但方向相反

這樣就可以實現讓外星人群不斷左右來回移動,且慢慢逼近飛船的效果。

這個規則中很重要的一點就是,需要檢測外星人和螢幕之間的碰撞,因此單獨定義乙個方法來檢測外星人和螢幕是否發生碰撞

class

alien

(self):.

..# 檢查外星人是否達到螢幕邊界的方法

defcheck_edges

(self)

: screen_rect = self.screen.get_rect(

)if self.rect.x >= screen_rect.width:

return

true

elif self.rect.x <=0:

return

true

當飛船的橫座標超過螢幕右邊界或者超過左邊界時,視為碰撞到了。

當外星人碰撞到邊界後,需要的事有:

1、馬上向下移動一段距離

2、改變原來的移動方向

這裡我們可以設定下移的速度,並且將移動方向作為設定儲存起來

# 6.2 外星人下移的速度

self.alien_drop_speed =

10# 6.3 外星人移動方向的標誌 1為右移 -1為左移

self.fleet_direction =

1

有了這些設定,就可以定義碰撞後的業務了

# 當外星人群觸碰到邊界時,向下移動外星人群並改變移動方向的方法

defchange_direction

(aliens, settings)

:for alien in aliens.sprites():

alien.rect.y += settings.alien_drop_speed

settings.fleet_direction *=

-1

下移:遍歷外星人,將其縱座標加上下移的速度

轉向:讓設定的方向標誌取相反數

同時,根據方向標誌我們可以實現外星人的左移或右移,需要修改alien類中的 update() 方法

# 更新外星人位置的方法

defupdate

(self)

: self.x += self.settings.alien_speed * self.settings.fleet_direction

self.rect.x = self.x

現在,我們可以對單個外星人進行碰撞檢測,並且實現了碰撞後的業務

那麼接下來就是實現對整群外星人進行碰撞檢測了

我們遍歷整組外星人群,如果有任何乙個到達了邊界,那麼整組外星人都要下移並轉向

# 判斷外星人群是否碰到邊界,如果碰到了,則改變移動方向

defcheck_fleet_edges

(aliens, settings)

:for alien in aliens:

if alien.check_edges():

change_direction(aliens, settings)

# 只要有乙個外星人到達邊界,就不用再判斷後續的外星人了

break

鑑於我們之前修改外星人位置都是在 update_aliens() 方法中實現的,所以此時我們也要修改這個方法,用於檢測整組外星人,並作出相應的動作

# 更新外星人位置的方法

defupdate_aliens

(aliens, settings)

: check_fleet_edges(aliens, settings)

aliens.update(

)

此時,我們執行遊戲,就可以看到外星人群在不斷左右來回移動,並在每次撞到邊界後都向下移動的場景了,這裡模擬了遊戲裡外星人入侵的功能。

由於編寫**時,就已經拆分了每個函式將要實現的功能,因此這裡不太需要回頭重構**。

Pygame 外星人入侵(2)

二 顯示飛船到螢幕上 三 小結 我們現在有了一塊 pygame 遊戲螢幕,現在要往螢幕上加元素,比如我們將要操控的飛船。首先我們要在螢幕上顯示飛船,顯示的飛船影象是由一張來提供的。因此,我們需要先找到一張合適的來代表飛船。在 python程式設計 從入門到精通 這本書中對於適合作為素材的做了大致的描...

外星人入侵

今天是乙個週末,宿舍的人全部都出去玩了,而我因為太懶乙個人留在了宿舍,連床都不起,吃飯靠的是點外賣。不過,為了好玩,我跟著書本學習打了乙個2d小遊戲,並加入了一點自己的東西。一 遊戲頁面 剛開始我把所有的遊戲螢幕設定都放在了下面 裡,這使得 看起來非常長,和雜亂,所以為了使遊戲方便擴充套件和整個 邏...

python實踐 pygame外星人入侵

python學習練手遊戲 規劃專案 安裝pygame 飛船與外星人的建立 外星人與飛船的戰爭 新增記分牌 1 規劃專案 在外星人入侵中,我們要實現的功能有 飛船可以左右移動,並用空格鍵射擊 外星人群從左移動到螢幕右端然後下移一定距離,接著往反方向移動 飛船射殺外星人,也就是子彈與外星人碰撞時,子彈與...