簡介
使用python實現pygame版的飛機大戰游戲;
環境:Windows系統+python3.8.0
游戲規則:
1.點擊“PLAY”或者按鍵“P”開始游戲;
2.敵機根據設置頻率從頂部隨機位置生成,生成后向下移動;
3.飛船在底部中間生成,玩家使用上下左右鍵控制飛船移動,敲擊空格鍵發射子彈;
4.子彈打到敵機,該敵機產生爆炸效果并累計分數到右上角;
5.消滅10只飛機后,等級升高,敵機生成頻率變快,下落速度也變快;
6.當三條命都消失了,游戲結束。
游戲運行效果如下:
實現過程
1.新建文件“file.py”,用來存儲信息到文件和讀取文件的信息,本例用來存儲和讀取最高分;
import pickle# filename = 'file/stats.pkl'# 存儲信息到文件def save_file(obj, filename): statsObj = load_file(filename) if statsObj == 0: # 不存在文件時,直接保存字典 with open(filename, 'wb') as f: pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL) else: # 存在文件時,只修改文件中的最高分 for key, val in statsObj.items(): # 獲取文件最高分的值(當文件字段不止一個時候使用) if key == 'highScore': statsObj[key] = obj['highScore'] obj = statsObj with open(filename, 'wb') as f: pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL) # 讀取信息def load_file(filename): try: with open(filename, 'rb') as f: return pickle.load(f) except FileNotFoundError: # 不存在文件則輸入錯誤信息 msg = "Sorry, the file " + filename + " does not exist." print(msg) return 0 # obj = {'highScore': 20, 'points': 5}# obj = {'highScore': 50}# save_file(obj, filename)# filedata = load_file(filename)# print(filedata)
2.k新建文件settings.py,用來定義一些必須的基本屬性和初始值;
import file as fclass Settings(): def __init__(self): self.screen_width = 480 self.screen_height = 660 self.bg_color = (230, 230, 230) # 子彈設置(寬、高、顏色、最大數量) self.bullet_width = 5 self.bullet_height = 15 self.bullet_color = 255, 255, 255 # 敵機移動頻率 self.enemy_frequency = 0 # 加快游戲節奏的速度 self.speedup_scale = 1.1 # 分數的提高速度 self.score_scale = 1.5 self.initialize_settings() # 初始化統計信息 self.reset_stats() # 統計信息文件路徑 self.filename = 'file/stats.pkl' # 游戲剛啟動時處于非活動狀態 self.game_active = False # 讀取文件的最高分,在任何情況下都不應重置最高得分 statsObj = f.load_file(self.filename) if statsObj == 0: # 不存在文件則顯示最高分0 highScore = 0 else: for key, val in statsObj.items(): # 獲取文件最高分的值(當文件字段不止一個時候使用) if key == 'highScore': highScore = val self.high_score = highScore def initialize_settings(self): """初始化隨游戲進行而變化的設置""" self.player_move_speed = 2.5 self.bullet_speed = 3 self.enemy_move_speed = 1 # 記分 self.one_points = 50 def increase_speed(self): """提高速度設置""" # self.player_move_speed *= self.speedup_scale self.bullet_speed *= self.speedup_scale self.enemy_move_speed *= self.speedup_scale self.one_points = int(self.one_points * self.score_scale) def reset_stats(self): """初始化在游戲運行期間可能變化的統計信息""" # 可射失的數量 self.player_limit = 3 # 射擊分數 self.score = 0 # 等級 self.level = 1 # 打中多少矩形升一級 self.level_number = 10 # 生成敵機頻率間隔 self.enemy_frequency_space = 50
新聞熱點
疑難解答