简介
使用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
新闻热点
疑难解答