在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家
可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星人出
现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。玩家将所有外星
人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。只要有外星人撞到了
玩家的飞船或到达了屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。
开发阶段
第一阶段:飞船、子弹
创建一艘可左右移动的飞船,这艘飞船在用户按空格键时能够开火
小结
- 游戏开发计划的制定
- 使用Pygame编写的游戏的基本结构
- 如何设置背景色,以及如何将设置存储在可供游戏的各个部分访问的独立类中
- 如何在屏幕上绘制图像,以及如何让玩家控制游戏元素的移动
- 如何创建自动移动的元素,如在屏幕中向上飞驰的子弹,以及如何删除不再需要的对象
- 如何定期重构项目的代码,为后续开发提供便利
第二阶段:外星人
创建一群外星人,并编写外星人与子弹之间的关系
小结
- 如何在游戏中添加大量相同的元素,如创建一群外星人
- 如何使用嵌 套循环来创建元素网格,还通过调用每个元素的方法update()移动了大量的元素
- 如何控制对象 在屏幕上移动的方向,以及如何响应事件,如有外星人到达屏幕边缘
- 如何检测和响应子弹和外星人碰撞以及外星人和飞船碰撞
- 如何在游戏中跟踪统计信息,以及如何使用标志game_active来判断游戏是否结束了
第三阶段:计分
play按键、计分系统
小结
- 如何创建用于开始新游戏的Play按钮,如何检测鼠标事件,以及在游戏 处于活动状态时如何隐藏光标
- 如何随游戏的进行调整其节奏,如何实现记分系统,以及如何以文 本和非文本方式显示信息
文件目录结构
函数
alien_invasion(主函数)
初始化背景设置 创建一个名为screen的显示窗口 创建Play按钮 创建存储游戏统计信息的实例,并创建记分牌 创建一艘飞船 创建一个用于存储子弹的编组 创建外星人群 开始游戏的主循环 捕捉事件(鼠标+按键) 如果游戏处于活动状态 更新飞船 更新子弹 更新外星人 屏幕展示结果game_functions(子函数集)
响应按键和鼠标事件 鼠标退出按钮 退出(系统函数) 按键按下 响应按键(子函数) pygame.K_RIGHT 右移标志改为true pygame.K_LEFT 左移标志改为true pygame.K_SPACE 如果还没有到达限制,就发射一颗子弹(子函数) pygame.K_q 退出(系统函数) 按键松开 响应松开(子函数) pygame.K_RIGHT 右移标志改为false pygame.K_LEFT 左移标志改为false 鼠标按钮按下 获取鼠标坐标(pygame函数) 玩家单击Play按钮时开始新游戏 重置游戏设置 隐藏光标 重置游戏统计信息 重置记分牌图像 清空外星人列表和子弹列表 创建外星人群(子函数) 创建一个外星人,并计算每行可容纳多少个外星人(1 计算每行可容纳多少个外星人(子函数) 2 计算屏幕可容纳多少行外星人(子函数)) 创建外星人群(循环调用:创建一个外星人并将其放在当前行(子函数)) 飞船居中 更新子弹的位置,并删除已消失的子弹 更新子弹的位置 删除已消失的子弹 响应子弹和外星人的碰撞(子函数) 删除发生碰撞的子弹和外星人 更新现有得分和最高得分 更新现有得分 检查是否诞生了新的最高得分(子函数) 如果外星人为0 删除现有的所有子弹 提高速度设置和外星人点数 提高等级 创建外星人群(子函数) 检查是否有外星人位于屏幕边缘,并更新整群外星人的位置 有外星人到达边缘时采取相应的措施 如果检测到边缘后,就改变外星人飞行方向(将整群外星人下移,并改变它们的方向(子函数)) 更新外星人 如果检测到外星人和飞船之间碰撞 响应被外星人撞到的飞船(子函数) 检查是否有外星人到达了屏幕底端 如果到达底端 响应被外星人撞到的飞船(子函数) 更新屏幕上的图像,并切换到新屏幕 类 settings button game_stats scoreboard ship bullet alien 数据 images ship.bmp alien.bmp 编程框架总结 主函数 初始化部分: 初始化参数:用一个Settings类,给各参数一个初始值 创建对象:用参数初始值,对用到的类进行例化 循环体部分: 捕捉事件(鼠标+按键),并做出响应 某一对象有限状态:改变标志位 某类对象集合添加:直接添加对象 如果游戏处于活动状态 根据上面的标志位,在游戏规则的限定下,做出相应的响应 对更新后的结果进行屏幕展示 子函数集 所有的子函数放在一个文件里 函数之间的调用都采用参数传递的方式,未使用全局变量可能是一个缺点 主要描述了不同类之间的关系(方法) 类 每个类都独自写成一个文件 类中包括属性和方法: 属性:自身属性,根据背景参数和特定设置作为初始参数 方法:子包含类本身一些属性的修改 使用到的模块 sys -->玩家退出 pygame -->开发游戏所需功能