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 pass 16 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 pygame from plane_sprites import * # 定义屏幕大小常量 SCREEN_RECT = pygame.Rect(0, 0, 480, 700) # 刷新的帧率 FRAME_PER_SEC = 60 class 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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)