目录
1. 明确主程序职责
2. 实现飞机大战主游戏类
2.1 明确文件职责
1. 明确主程序职责
-
- 一个游戏主程序的 职责 可以分为两个部分:游戏初始化游戏循环
- 根据明确的职责, 设计 PlaneGame 类如下:
提示 根据 职责 封装私有方法, 可以避免某一个方法的代码写得太过冗长
如果某一个方法编写的太长, 既不好阅读, 也不好维护!
- 游戏初始化 ---- __init__() 会调用以下方法:
2. 实现飞机大战主游戏类
2.1 明确文件职责
- plane_main
- 封装 主游戏类
- 创建 游戏对象
- 启动游戏
- plane_sprites封装游戏中 所有 需要使用的 精灵子类提供游戏的 相关工具
代码实现
- 新建 plane_main.py 文件, 并且设置为可执行
- 编写 继承代码
1 class PlaneGame(object): 2 """飞机大战祝游戏""" 3 4 def __init__(self): 5 print("游戏初始化") 6 7 # 1. 创建游戏的窗口 8 self.screen = pygame.display.set_mode((480, 700)) 9 # 2. 创建游戏的失踪10 self.clock = pygame.time.Clock()11 # 3. 调用私有方法, 精灵和精灵组的创建12 self.__create_sprites()13 14 def __create_sprites(self):15 pass16 17 def start_game(self):18 print("游戏开始...")
使用 常量 代替固定的数值
- 变量 ---- 不变化的量
- 变量 ---- 可以变化的量
应用场景
- 在开发时, 可能会需要使用 固定的数值, 例如 屏幕的高度 是 700
- 这个时候, 建议 不要 直接使用固定数值, 而应该使用 常量
- 在开发时, 为了保证代码的可维护性, 尽量不要使用 魔法数字
常量的定义
- 定义 常量 和 定义 变量 的语法完全一样, 都是使用 赋值语句
- 常量 的 命名 应该 所有字母都使用大写, 单词与单词之间使用下划线连接
常量的好处
- 阅读代码时, 通过 常量名 见名知意, 不需要猜测数字的含义
- 如果需要 调整值, 只需要 修改常量定义 就可以实现 统一修改
提示: Python 中并没有真正意义的常量, 只是通过命名的约定 ---- 所有字母都是大写的就是常量, 开发时不要轻易的修改!
代码调整
- 在 plane_sprites.py 中增加常量定义
1 # 定义屏幕大小常量2 SCREEN_RECT = pygame.Rect(0, 0, 480, 700)3 # 刷新的帧率4 FRAME_PER_SEC = 60
2.2搭建游戏启动结构
import pygamefrom plane_sprites import *# 定义屏幕大小常量SCREEN_RECT = pygame.Rect(0, 0, 480, 700)# 刷新的帧率FRAME_PER_SEC = 60class PlaneGame(object): """飞机大战祝游戏""" def __init__(self): print("游戏初始化") # 1. 创建游戏的窗口 self.screen = pygame.display.set_mode(SCREEN_RECT.size) # 2. 创建游戏的失踪 self.clock = pygame.time.Clock() # 3. 调用私有方法, 精灵和精灵组的创建 self.__create_sprites() def __create_sprites(self): pass def start_game(self): print("游戏开始...") while True: # 1.设置刷新帧率 self.clock.tick(FRAME_PER_SEC) # 2.事件监听 self.__event_handler() # 3.碰撞检测 self.__check_collide() # 4.更新/绘制精灵组 self.__create_sprites() # 5.更新显示 pygame.display.update() pass def __event_handler(self): for event in pygame.event.get(): # 判断是否退出游戏 if event.type is pygame.QUIT: PlaneGame.__game_over() def __check_collide(self): pass def __update_sprites(self): pass @staticmethod def __game_over(): print("游戏结束") pygame.quit() exit()if __name__ == '__main__': game = PlaneGame() game.start_game()