首页 > 编程 > Python > 正文

python实现飞机大战游戏(pygame版)

2020-02-15 21:19:24
字体:
来源:转载
供稿:网友

简介

使用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            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表