Pygame框架如何制作飛機大戰(zhàn)?這個問題可能是我們日常學習或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純热荩屛覀円黄饋砜纯窗桑?/p>
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供雙塔網(wǎng)站建設、雙塔做網(wǎng)站、雙塔網(wǎng)站設計、雙塔網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、雙塔企業(yè)網(wǎng)站模板建站服務,10余年雙塔做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。具體內容如下
飛機大戰(zhàn)主游戲類
""" 項目名稱:簡單飛機大戰(zhàn)游戲 基于框架:Pygame 開發(fā)日期:2020.07 開發(fā)人員:Y 版本:**** """ import sys # 導入內置模塊sys 調用sys.exit() import pygame # 導入第三方模塊pygame from plane_sprites import * # 導入自定義模塊內所有工具 class PlayGame(object): # 定義開始游戲主類 繼承object基類 def __init__(self): # 定義初始化方法 self.srceen = pygame.display.set_mode(SRCEEN_SIZE.size) # 設置游戲主窗口 self.clock = pygame.time.Clock() # 設置游戲時鐘 用于刷新屏幕幀率 self.__creat_sprites() # 調用私有方法實現(xiàn)添加精靈類內容 pygame.display.set_caption('飛機大戰(zhàn)') # 設置窗口標題 pygame.time.set_timer(CREAT_ENEMY_EVENT, 1000) # 設置事件定時器 用于每隔一段時間執(zhí)行一次事件 pygame.time.set_timer(FIRE_BULLTE, 300) # 設置事件定時器 用于每隔一段時間執(zhí)行一次事件 def start_game(self): # 定義開始游戲方法 while True: # 游戲循環(huán) self.clock.tick(CLOCK_TICK) # 利用時鐘設置刷新幀率 self.__event_hander() # 調用私有方法實現(xiàn)監(jiān)聽事件 self.__check_collide() # 調用私有方法檢測碰撞 self.__update_sprites() # 調用私有方法更新和繪制精靈組 pygame.display.flip() # 更新窗口顯示 # pygame.display.update() # 更新窗口顯示 def __creat_sprites(self): # 定義添加精靈組方法 bj1 = Background() # 利用背景類創(chuàng)建背景對象1 默認參數(shù)Flase 表示第一張圖像,需要與屏幕重合 bj2 = Background(True) # 利用背景類創(chuàng)建背景對象2 參數(shù)True 表示另一張圖像, 在屏幕的正上方 self.bj_group = pygame.sprite.Group(bj1, bj2) # 設置背景精靈組 self.emeny_group = pygame.sprite.Group() # 提前設置敵機精靈組 但并不設置敵機對象 # 敵機類對象是定時被創(chuàng)建的,因此在初始化方法中,不需要創(chuàng)建敵機對象 self.hero = Hero() # 利用英雄類創(chuàng)建英雄對象 注意:后續(xù)對英雄做碰撞檢測及發(fā)射操作,所有需要單獨設置為屬性 self.hero_group = pygame.sprite.Group(self.hero) # 設置英雄精靈組 def __event_hander(self): # 定義監(jiān)聽事件方法 for event in pygame.event.get(): # 循環(huán)監(jiān)聽所有事件 if event.type == pygame.QUIT: # 如果是單擊退出按鈕事件 PlayGame.__game_over() # 調用私有方法實現(xiàn)結束游戲 elif event.type == CREAT_ENEMY_EVENT: # 如果是執(zhí)行自定義事件創(chuàng)建敵機 emeny1 = Enemy("./images/enemy1.png") # 利用敵機類創(chuàng)建敵機1 emeny2 = Enemy("./images/enemy2.png") # 利用敵機類創(chuàng)建敵機2 emeny3 = Enemy("./images/enemy3_n1.png") self.emeny_group.add(emeny1, emeny2, emeny3) # 對之前設置好的敵機精靈組進行添加精靈對象 elif event.type == FIRE_BULLTE: # 如果是執(zhí)行自定義事件發(fā)射子彈 self.hero.fire() # 調用英雄對象的發(fā)射子彈方法 key_tuple = pygame.key.get_pressed() # 捕獲鍵盤按鍵返回值為元組 if key_tuple[pygame.K_RIGHT]: # 判斷捕獲鍵盤按鍵為右鍵 self.hero.speed = 4 # 設置英雄類對象的速度為4 向右移動 elif key_tuple[pygame.K_LEFT]: # 判斷捕獲鍵盤按鍵為左鍵 self.hero.speed = -4 # 設置英雄類對象的速度為-4 向左移動 else: # 否則 self.hero.speed = 0 # 捕獲其余任何按鍵英雄類對象速度不變 不移動 def __check_collide(self): # 定義檢測碰撞方法 pygame.sprite.groupcollide(self.hero.bullet_group, self.emeny_group, True, True) # 兩個精靈組中所有的精靈的碰撞檢測 屬性True, 則發(fā)生碰撞的精靈將被自動移除 enemies = pygame.sprite.spritecollide(self.hero, self.emeny_group, True) # 判斷某個精靈和指定精靈組中的精靈的碰撞 屬性True,則指定精靈組中發(fā)生碰撞的精靈將被自動移除 # 返回精靈組中跟精靈發(fā)生碰撞的精靈列表 if len(enemies) > 0: # 判斷敵機精靈組內精靈是否存在 若存在 self.hero.kill() # 碰撞導致英雄銷毀 PlayGame.game_over() # 調用類中結束游戲方法 退出游戲 def __update_sprites(self): # 定義精靈組更新和繪制方法 self.bj_group.update() # 更新背景類精靈 self.bj_group.draw(self.srceen) # 繪制背景類精靈 self.emeny_group.update() # 更新敵機類精靈 self.emeny_group.draw(self.srceen) # 繪制敵機類精靈 self.hero_group.update() # 更新英雄類精靈 self.hero_group.draw(self.srceen) # 繪制英雄類精靈 self.hero.bullet_group.update() # 更新英雄子彈類精靈 self.hero.bullet_group.draw(self.srceen) # 繪制英雄子彈類精靈 @staticmethod # 聲明定義靜態(tài)方法 def __game_over(): # 定義靜態(tài)方法 print("游戲結束") # 控制臺打印游戲結束 pygame.quit() # 卸載所有pygame模塊工具 sys.exit() # 退出程序 if __name__ == '__main__': # 判斷當前執(zhí)行 playgame = PlayGame() # 創(chuàng)建開始游戲對象 playgame.start_game() # 調用開始游戲對象的開始方法