python飛機大戰 敵機出場

2021-09-26 06:43:20 字數 3237 閱讀 7747

使用 定時器 新增敵機

執行 備課**,觀察 敵機的 出現規律:

遊戲啟動後,每隔 1 秒 會 出現一架敵機

每架敵機 向螢幕下方飛行,飛行 速度各不相同

每架敵機出現的 水平位置 也不盡相同

當敵機 從螢幕下方飛出,不會再飛回到螢幕中

set_timer(eventid, milliseconds) -> none
第 2 個引數是 事件觸發 間隔的 毫秒值

定時器事件的監聽

pygame 的 定時器 使用套路非常固定:

定義 定時器常量 —— eventid

在 初始化方法 中,呼叫 set_timer 方法 設定定時器事件

在 遊戲迴圈 中,監聽定時器事件

1) 定義事件

# 敵機的定時器事件常量

create_enemy_event = pygame.userevent

在 planegame 的 初始化方法 中 建立使用者事件

# 4. 設定定時器事件 - 每秒建立一架敵機

pygame.time.set_timer(create_enemy_event, 1000)

2) 監聽定時器事件

def __event_handler(self):

for event in pygame.event.get():

# 判斷是否退出遊戲

if event.type == pygame.quit:

planegame.__game_over()

elif event.type == create_enemy_event:

print("敵機出場...")

遊戲啟動後,每隔 1 秒 會 出現一架敵機

每架敵機 向螢幕下方飛行,飛行 速度各不相同

每架敵機出現的 水平位置 也不盡相同

當敵機 從螢幕下方飛出,不會再飛回到螢幕中

重寫 update() 方法

class enemy(gamesprite):

"""敵機精靈"""

def __init__(self):

# 1. 呼叫父類方法,建立敵機精靈,並且指定敵機的影象

super().__init__("./images/enemy1.png")

# 2. 設定敵機的隨機初始速度

# 3. 設定敵機的隨機初始位置

def update(self):

# 1. 呼叫父類方法,讓敵機在垂直方向運動

super().update()

# 2. 判斷是否飛出螢幕,如果是,需要將敵機從精靈組刪除

if self.rect.y >= screen_rect.height:

print("敵機飛出螢幕...")

演練步驟

在 __create_sprites,新增 敵機精靈組

在 __event_handler,建立敵機,並且 新增到精靈組

在 __update_sprites,讓 敵機精靈組 呼叫 update 和 draw 方法

演練**

# 敵機組

self.enemy_group = pygame.sprite.group()

修改 plane_main 的 __update_sprites 方法

self.enemy_group.update()

self.enemy_group.draw(self.screen)

定時出現敵機

elif event.type == create_enemy_event:

self.enemy_group.add(enemy())

匯入模組

1. 官方標準模組匯入

2. 第三方模組匯入

3. 應用程式模組匯入

修改 plane_sprites.py 增加 random 的匯入

import random
隨機位置

使用 pygame.rect 提供的 bottom 屬性,在指定敵機初始位置時,會比較方便

**實現

def __init__(self):

# 1. 呼叫父類方法,建立敵機精靈,並且指定敵機的影象

super().__init__("./images/enemy1.png")

# 2. 設定敵機的隨機初始速度 1 ~ 3

self.speed = random.randint(1, 3)

# 3. 設定敵機的隨機初始位置

self.rect.bottom = 0

max_x = screen_rect.width - self.rect.width

self.rect.x = random.randint(0, max_x)

檢測敵機被銷毀

def __del__(self):

print("敵機掛了 %s" % self.rect)

**實現

判斷敵機是否飛出螢幕,如果是,呼叫 kill() 方法從所有組中刪除

def update(self):

super().update()

# 判斷敵機是否移出螢幕

if self.rect.y >= screen_rect.height:

# 將精靈從所有組中刪除

self.kill()

Python飛機大戰

玩家飛機可以移動,可以發射子彈,敵機隨機產生,自由墜落。未新增擊落敵機的功能。主要用來練習類的封裝與繼承。coding utf 8 import pygame,random from pygame.locals import class base object def init self,x,y,s...

Python 飛機大戰

新建專案 在選中主韙專案的情況下,tab鍵,會自動的出來乙個下級分支 在選中當前分支的情況五,點enter,會出來乙個同級的分支 第一次背景精靈組,呼叫 update方法。結果就是,背景精靈組中的所有背景物件,呼叫自身的update方法 初始化的時候,生成了 兩個背景物件 並且,建立了乙個背景圖精靈...

Java學習之路 簡單的飛機大戰遊戲(敵機下落篇)

在實現這個遊戲之前,我們首先需要知道專案可能要用到哪些知識點 重繪,執行緒,雙緩衝,資料結構的應用 差不多是這大概有這些,如果不夠的話我們再加。首先,我們應該實現敵機下落,在這裡大概思路和利用執行緒使小球下落差不多。不同的是,我在這裡用到了三種敵機,分別為小 大 boss機三種。然後給予這三種敵機不...