最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python飛機大戰(zhàn)pygame游戲之?dāng)硻C出場實現(xiàn)方法詳解

 更新時間:2019年12月17日 10:35:59   作者:小飛俠v科比  
這篇文章主要介紹了python飛機大戰(zhàn)pygame游戲之?dāng)硻C出場實現(xiàn)方法,結(jié)合實例形式詳細分析了Python使用pygame模塊實現(xiàn)飛機大戰(zhàn)游戲中敵機出場相關(guān)實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了python飛機大戰(zhàn)pygame游戲之?dāng)硻C出場實現(xiàn)方法。分享給大家供大家參考,具體如下:

目標(biāo)

使用 定時器 添加敵機

  • 設(shè)計 Enemy 類

01. 使用定時器添加敵機

運行 備課代碼,觀察 敵機的 出現(xiàn)規(guī)律:

  1. 游戲啟動后,每隔 1 秒 會 出現(xiàn)一架敵機
  2. 每架敵機 向屏幕下方飛行,飛行 速度各不相同
  3. 每架敵機出現(xiàn)的 水平位置 也不盡相同
  4. 當(dāng)敵機 從屏幕下方飛出,不會再飛回到屏幕中

1.1 定時器

  • 在 pygame 中可以使用 pygame.time.set_timer() 來添加 定時器
  • 所謂 定時器,就是 每隔一段時間,去 執(zhí)行一些動作
set_timer(eventid, milliseconds) -> None
  • set_timer 可以創(chuàng)建一個 事件
  • 可以在 游戲循環(huán) 的 事件監(jiān)聽 方法中捕獲到該事件
  • 第 1 個參數(shù) 事件代號 需要基于常量 pygame.USEREVENT 來指定
    • USEREVENT 是一個整數(shù),再增加的事件可以使用 USEREVENT + 1 指定,依次類推…
  • 第 2 個參數(shù)是 事件觸發(fā) 間隔的 毫秒值

定時器事件的監(jiān)聽

  • 通過 pygame.event.get() 可以獲取當(dāng)前時刻所有的 事件列表
  • 遍歷列表 并且判斷 event.type 是否等于 eventid,如果相等,表示 定時器事件 發(fā)生

1.2 定義并監(jiān)聽創(chuàng)建敵機的定時器事件

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

  1. 定義 定時器常量 —— eventid
  2. 在 初始化方法 中,調(diào)用 set_timer 方法 設(shè)置定時器事件
  3. 在 游戲循環(huán) 中,監(jiān)聽定時器事件

1) 定義事件

  • 在 plane_sprites.py 的頂部定義 事件常量
# 敵機的定時器事件常量
CREATE_ENEMY_EVENT = pygame.USEREVENT

在 PlaneGame 的 初始化方法 中 創(chuàng)建用戶事件

# 4. 設(shè)置定時器事件 - 每秒創(chuàng)建一架敵機
pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)

2) 監(jiān)聽定時器事件

  • 在 __event_handler 方法中增加以下代碼:
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("敵機出場...")

02. 設(shè)計 Enemy 類

  1. 游戲啟動后,每隔 1 秒 會 出現(xiàn)一架敵機
  2. 每架敵機 向屏幕下方飛行,飛行 速度各不相同
  3. 每架敵機出現(xiàn)的 水平位置 也不盡相同
  4. 當(dāng)敵機 從屏幕下方飛出,不會再飛回到屏幕中
    在這里插入圖片描述
  • 初始化方法
    • 指定 敵機圖片
    • 隨機 敵機的 初始位置 和 初始速度
  • 重寫 update() 方法
    • 判斷 是否飛出屏幕,如果是,從 精靈組 刪除

2.1 敵機類的準(zhǔn)備

  • 在 plane_sprites 新建 Enemy 繼承自 GameSprite
  • 重寫 初始化方法,直接指定 圖片名稱
  • 暫時 不實現(xiàn) 隨機速度 和 隨機位置 的指定
  • 重寫 update 方法,判斷是否飛出屏幕
class Enemy(GameSprite):
  """敵機精靈"""
  
  def __init__(self):
    
    # 1. 調(diào)用父類方法,創(chuàng)建敵機精靈,并且指定敵機的圖像
    super().__init__("./images/enemy1.png")

    # 2. 設(shè)置敵機的隨機初始速度

    # 3. 設(shè)置敵機的隨機初始位置
  
  def update(self):
    
    # 1. 調(diào)用父類方法,讓敵機在垂直方向運動
    super().update()
    
    # 2. 判斷是否飛出屏幕,如果是,需要將敵機從精靈組刪除
    if self.rect.y >= SCREEN_RECT.height:
      print("敵機飛出屏幕...")  

2.2 創(chuàng)建敵機

演練步驟

  1. 在 __create_sprites,添加 敵機精靈組
    • 敵機是 定時被創(chuàng)建的,因此在初始化方法中,不需要創(chuàng)建敵機
  2. 在 __event_handler,創(chuàng)建敵機,并且 添加到精靈組
    • 調(diào)用 精靈組 的 add 方法可以 向精靈組添加精靈
  3. 在 __update_sprites,讓 敵機精靈組 調(diào)用 update 和 draw 方法
    在這里插入圖片描述
    演練代碼
  • 修改 plane_main 的 __create_sprites 方法
# 敵機組
self.enemy_group = pygame.sprite.Group()

修改 plane_main 的 __update_sprites 方法

self.enemy_group.update()
self.enemy_group.draw(self.screen)

定時出現(xiàn)敵機

elif event.type == CREATE_ENEMY_EVENT:
  self.enemy_group.add(Enemy())

2.3 隨機敵機位置和速度

  1. 導(dǎo)入模塊
  • 在導(dǎo)入模塊時,建議 按照以下順序?qū)?/li>
1. 官方標(biāo)準(zhǔn)模塊導(dǎo)入
2. 第三方模塊導(dǎo)入
3. 應(yīng)用程序模塊導(dǎo)入

修改 plane_sprites.py 增加 random 的導(dǎo)入

import random
  1. 隨機位置
    在這里插入圖片描述
    使用 pygame.Rect 提供的 bottom 屬性,在指定敵機初始位置時,會比較方便
  • bottom = y + height
  • y = bottom - height
  1. 代碼實現(xiàn)
  • 修改 初始化方法,隨機敵機出現(xiàn) 速度 和 位置
def __init__(self):

  # 1. 調(diào)用父類方法,創(chuàng)建敵機精靈,并且指定敵機的圖像
  super().__init__("./images/enemy1.png")

  # 2. 設(shè)置敵機的隨機初始速度 1 ~ 3
  self.speed = random.randint(1, 3)

  # 3. 設(shè)置敵機的隨機初始位置
  self.rect.bottom = 0
  
  max_x = SCREEN_RECT.width - self.rect.width
  self.rect.x = random.randint(0, max_x)

2.4 移出屏幕銷毀敵機

  • 敵機移出屏幕之后,如果 沒有撞到英雄,敵機的歷史使命已經(jīng)終結(jié)
  • 需要從 敵機組 刪除,否則會造成 內(nèi)存浪費

檢測敵機被銷毀

  • del 內(nèi)置方法會在對象被銷毀前調(diào)用,在開發(fā)中,可以用于 判斷對象是否被銷毀
def __del__(self):
  print("敵機掛了 %s" % self.rect)

代碼實現(xiàn)
在這里插入圖片描述
判斷敵機是否飛出屏幕,如果是,調(diào)用 kill() 方法從所有組中刪除

def update(self):
  super().update()
  
  # 判斷敵機是否移出屏幕
  if self.rect.y >= SCREEN_RECT.height:
    # 將精靈從所有組中刪除
    self.kill()

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python游戲開發(fā)技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • 淺談python requests 的put, post 請求參數(shù)的問題

    淺談python requests 的put, post 請求參數(shù)的問題

    今天小編就為大家分享一篇淺談python requests 的put, post 請求參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python報錯:TypeError:?‘xxx‘?object?is?not?subscriptable解決辦法

    Python報錯:TypeError:?‘xxx‘?object?is?not?subscriptable解決

    這篇文章主要給大家介紹了關(guān)于Python報錯:TypeError:?‘xxx‘?object?is?not?subscriptable的解決辦法,TypeError是Python中的一種錯誤,表示操作或函數(shù)應(yīng)用于不合適類型的對象時發(fā)生,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • Python利用docx模塊實現(xiàn)快速操作word文件

    Python利用docx模塊實現(xiàn)快速操作word文件

    這篇文章主要為大家詳細介紹了Python如何利用docx模塊實現(xiàn)快速操作word文件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • 詳解python之異步編程

    詳解python之異步編程

    這篇文章主要為大家介紹了python之異步編程,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • Python內(nèi)存管理方式和垃圾回收算法解析

    Python內(nèi)存管理方式和垃圾回收算法解析

    這篇文章主要介紹了Python內(nèi)存管理方式和垃圾回收算法解析,介紹了傳統(tǒng)的垃圾回收機制,其工作方法,finalizer的問題等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • python pygame實現(xiàn)方向鍵控制小球

    python pygame實現(xiàn)方向鍵控制小球

    這篇文章主要為大家詳細介紹了python pygame實現(xiàn)方向鍵控制小球,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • python刪除指定目錄下的文件和文件夾的實現(xiàn)

    python刪除指定目錄下的文件和文件夾的實現(xiàn)

    在日常的辦公中,我們可以利用Python批量刪除文件和文件夾,本文就來介紹一下python刪除指定目錄下的文件和文件夾的實現(xiàn),感興趣的可以了解一下
    2024-01-01
  • 用Python的pandas框架操作Excel文件中的數(shù)據(jù)教程

    用Python的pandas框架操作Excel文件中的數(shù)據(jù)教程

    這篇文章主要介紹了用Python的pandas框架操作Excel文件中的數(shù)據(jù)教程,包括單位格式轉(zhuǎn)換、分類匯總等基本操作,需要的朋友可以參考下
    2015-03-03
  • python調(diào)用chrome實現(xiàn)網(wǎng)頁自動操作過程

    python調(diào)用chrome實現(xiàn)網(wǎng)頁自動操作過程

    這篇文章主要介紹了python調(diào)用chrome實現(xiàn)網(wǎng)頁自動操作,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • 使用OpenCV實現(xiàn)人臉圖像卡通化的示例代碼

    使用OpenCV實現(xiàn)人臉圖像卡通化的示例代碼

    這篇文章主要介紹了使用OpenCV實現(xiàn)人臉圖像卡通化的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論

伊宁县| 左云县| 方山县| 江门市| 穆棱市| 社旗县| 辽宁省| 神农架林区| 金乡县| 彰化市| 洞口县| 双江| 慈利县| 惠来县| 肇庆市| 陆河县| 南康市| 灯塔市| 永昌县| 昭苏县| 咸宁市| 乐昌市| 平遥县| 河西区| 南岸区| 金昌市| 洪洞县| 贵阳市| 漾濞| 玉树县| 波密县| 土默特右旗| 哈尔滨市| 改则县| 荣成市| 云南省| 烟台市| 旬阳县| 南陵县| 澄迈县| 建水县|