python alien_invasion(外星人入侵)项目笔记


项目来源:《Python编程:从入门到实践》

游戏效果

在这里插入图片描述

项目规划

游戏描述

    在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。玩家
可以使用箭头键左右移动飞船,还可使用空格键进行射击。游戏开始时,一群外星人出
现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。玩家将所有外星
人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。只要有外星人撞到了
玩家的飞船或到达了屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。

开发阶段

第一阶段:飞船、子弹

创建一艘可左右移动的飞船,这艘飞船在用户按空格键时能够开火

小结

- 游戏开发计划的制定
- 使用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 -->开发游戏所需功能
发布了5 篇原创文章 · 获赞 6 · 访问量 1281

猜你喜欢

转载自blog.csdn.net/qq_42816434/article/details/105186325