Python学习笔记(5)

项目练习

飞船的射击功能

  • 设定玩家按空格键发射子弹(小矩形),子弹将在屏幕中上下穿行,抵达屏幕边缘后消失。
  • 可以将子弹的长宽、速度和颜色等属性加入到setting模块中,避免直接写在主程序中使代码杂乱,同时也便于以后修改属性。
  • 创建子弹Bullet类,可新建一个bullet模块存储该类。并创建一个编组(Pygame中的功能,类似于列表)来存储所有有效的子弹。同时,也要考虑到从编组中删除已消失的子弹,避免其持续占用内存和处理能力。
  • 在功能模块中添加开火的功能,即响应按键事件来创建子弹实例。
  • 基础的发射功能基本如上,现在可以重构代码,将射击功能和子弹创建及删除功能移到游戏功能实现模块的方法里。

创建外星人(射击目标)

  • 创建外星人(射击目标)与创建飞船类似,但是需要考虑到让外星人自行移动、被攻击后消失以及自动生成新的外星人等功能。
  • 外星人移动:目标是使外星人可以上下左右移动,触及边界后改变运动轨迹。
  • 射杀外星人:目标是检测子弹与外星人的碰撞,从而删除掉相应的外星人和子弹。
  • 可以利用pygame中的sprite.groupcollide()检测两个编组成员之间的碰撞,同时可以选择是否删除发生碰撞的成员。
  • 生成新的外星人:当屏幕上所有外星人被消灭后调用批量生成外星人的函数生成一组新的外星人,同时清空屏幕上已有的子弹。

结束游戏

  • 目前为止,一个射击类游戏最基本的功能已经完成:玩家、射击功能、射击目标。接下来需要为游戏设定结束条件,比如飞船被撞毁或者外星人到达底部这样的条件。
  • 通过之前设计中使用到过的功能,检测外星人与飞船是否发生碰撞或到达屏幕底部,并作出相应的响应:减命并将飞船重置于中央或者结束游戏。
  • 可以新建一个用于存储游戏状态的模块,从而记录当前游戏状态、剩余的飞船命数以及后面要添加的游戏积分等数据。
  • 在主程序中通过判断游戏状态(运行中/结束)来选择性运行代码,实现飞船命数归零时结束游戏的功能。

绘制Play按钮

  • 新建一个Button类,像绘制飞船和外星人一样,利用pygame.font模块把带有指定文本的图形(开始按钮)绘制在屏幕上。在事件监测功能中添加对鼠标点击动作的监测,当鼠标点击在开始按钮区域时将游戏状态设置为开始并重置游戏界面。
  • 同时也可以设置按键开始,监测指定按键事件来调用游戏开始代码。

提升游戏难度

  • 随着消灭的敌人批次增加,提高敌人的移动速度以提升游戏难度。在setting模块中添加速度递增的方法以实现功能。在每次屏幕中敌人清零时调用该方法增加难度。
  • 当游戏重新开始或者结束时重置速度为初始值。

创建记分牌并记分

  • 在游戏状态模块中添加游戏积分属性,创建Scoreboard类并在游戏开始前就于屏幕右上角绘制带有积分数值的记分牌。
  • 为外星人设置分值,每消灭一个就得到相应分值,分值随着难度上升而提高。
  • 可以记录历史最高分并将最高分绘制在屏幕上方,显示当前游戏难度等级并绘制在得分下方,显示剩余飞船(生命数)在左上角。

小结

  • 至此,小游戏基本完成。按照书上的指导。基本上顺利地完成了整个程序地设计和编写,虽然中间遇到了一些书中没有提到的小问题,但通过网上搜索资料也都基本解决。通过完成像这样一个简单的游戏设计,积累了对Python的实践经验,增强了程序结构设计和优化的意识,学习了如何将一个像游戏一样具有清晰逻辑的功能实现成一个具体的程序。
  • 完整地写完一个游戏既能提高对Python的学习认识,又能增强自己的信心和兴趣。接下来,将学习如何利用Python实现数据可视化这一与数据挖掘密切相关的功能。

burpsuite的python拓展 bullet python_burpsuite的python拓展

参考资料