二、更加合理地移動
三、小結
在之前的博文中,實現了在螢幕上繪製一大群外星人,現在我們想讓這群外星人動起來,它們的移動遵循著一定的規律。
我們首先要實現的是,如何讓一群外星人一起向螢幕右側移動。
遊戲引數性質的變數統一存放在 設定模組中的設定類中
# 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 規劃專案 在外星人入侵中,我們要實現的功能有 飛船可以左右移動,並用空格鍵射擊 外星人群從左移動到螢幕右端然後下移一定距離,接著往反方向移動 飛船射殺外星人,也就是子彈與外星人碰撞時,子彈與...