# alien-invasion **Repository Path**: gitee-cooper/alien-invasion ## Basic Information - **Project Name**: alien-invasion - **Description**: Python Crash Course 2nd --- Project Alien Invasion - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-28 - **Last Updated**: 2025-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 👽 Alien Invasion --- > In Alien Invasion, the player controls a rocket ship that appears > at the bottom center of the screen. > > The player can move the ship right and left using the arrow keys > and shoot bullets using the space bar. > > When the game begins, a fleet of aliens fills the sky and moves across > and down the screen. The player shoots and destroys the aliens. > > If the player shoots all the aliens, a new fleet appears that moves faster > than the previous fleet. If any alien hits the player’s ship or > reaches the bottom of the screen, the player loses a ship. > > If the player loses three ships, the game ends. > 在游戏《外星人入侵》中,玩家控制着一艘最初出现在屏幕底部中央的飞船。 > > 玩家可以使用箭头键左右移动飞船,还可使用空格键进行射击。 > 游戏开始时,一群外星人出 现在天空中,他们在屏幕中向下移动。玩家的任务是射杀这些外星人。 > 玩家将所有外星 人都消灭干净后,将出现一群新的外星人,他们移动的速度更快。 > 只要有外星人撞到了玩家的飞船或到达了屏幕底部,玩家就损失一艘飞船。玩家损失三艘飞船后,游戏结束。 --- # 1 武装飞船 ## 1.1 规划项目 在游戏《外星人入侵》中,玩家控制一艘最初出现在屏幕底部中央的飞船。玩 家可以使用箭头键左右移动飞船,还可使用空格键射击。游戏开始时,一群外 星人出现在天空中,并向屏幕下方移动。玩家的任务是射杀这些外星人。玩家 将所有外星人都消灭干净后,将出现一群新的外星人,其移动速度更快。只要 有外星人撞到玩家的飞船或到达屏幕底部,玩家就损失一艘飞船。玩家损失三 艘飞船后,游戏结束。 开发的第一个阶段将创建一艘飞船,它可左右移动,并且能在用户按空格键时开 火。设置好这种行为后,就可以创建外星人并提高游戏的可玩性了。 ## 1.2 安装 Pygame 模块 - [Pygame](https://www.pygame.org/news) >- 国内 pip 镜像安装源 >- pypi 清华大学源:https://pypi.tuna.tsinghua.edu.cn/simple >- pypi 腾讯源:http://mirrors.cloud.tencent.com/pypi/simple >- pypi 阿里源:https://mirrors.aliyun.com/pypi/simple/ >- pypi 豆瓣源 :http://pypi.douban.com/simple/ ## 1.3 开始游戏项目 - 外星人游戏基本设置模块 ### 1.3.1 创建 Pygame 窗口及响应用户输入 - `alien_invasion.py` ### 1.3.2 设置背景色 ```text ``` ### 1.3.3 创建设置类 - 在文件夹alien_invasion中,新建一个名为settings.py的文件,并在其中添加 Settings 类: ## 1.4 添加飞船图像 ### 1.4.1 创建 Ship 类 > Pygame之所以高效,是因为它让你能够像处理矩形(rect 对象)一样处理所有的 游戏元素,即便其形状并非矩形。 > 像处理矩形一样处理游戏元素之所以高效,是因为矩形是简单的几何形状。例如,通过将游戏元素视为矩形, > Pygame能够更快地判断出它们是否发生了碰撞。这种做法的效果通常很好,游戏玩家几乎注意不到我们 > 处理的并不是游戏元素的实际形状。在这个类中,我们将把飞船和屏幕作为矩形进行处理。 ### 1.4.2 在屏幕上绘制飞船 ## 1.5 重构: 方法_check_events() 和 __update_screen() # 2 添加外星人 开发大型项目时,要在进入每个开发阶段之前回顾一下开发计划,搞清楚接下来要 通过编写代码来完成哪些任务。 > - 研究既有代码,确定实现新功能前是否要重构。 > - 在屏幕左上角添加一个外星人,并指定合适的边距。 > - 根据第一个外星人的边距和屏幕尺寸计算屏幕上可容纳多少个外星人。编写一 > - 个循环来创建一系列外星人,使其填满屏幕的上半部分。 > - 让外星人群向两边和下方移动,直到外星人被全部击落、有外星人撞到飞船或 > - 有外星人抵达屏幕底端。如果整群外星人都被击落,将再创建一群外星人。如 > - 果有外星人撞到了飞船或抵达屏幕底端,将销毁飞船并再创建一群外星人。 > - 限制玩家可用的飞船数量。当配给的飞船用完之后,游戏将结束。 > ## 2.6 游戏结束检测 - 游戏结束需求 > 如果玩家没能在足够短的时间内将整群外星人消灭干净, > 导致有外星人撞到了飞船或抵达屏幕底端,飞船将被摧毁。 > 与此同时,限制玩家可使用的飞船数,在玩家用光所有的飞船后,游戏将结束。 ### 2.6.1 检测外星人和飞船碰撞 检查外星人和飞船之间的碰撞,以便在外星人撞上飞船时做出合适的响应。为此, 在 AlienInvasion 中更新每个外星人的位置后,立即检测外星人和飞船之间 的碰撞: `alien_invasion.py` 修改 `_update_aliens()` 方法 ```text def _update_aliens(self): # --snip-- self.aliens.update() # 检测外星人和飞船之间的碰撞。 if pygame.sprite.spritecollideany(self.ship, self.aliens): print("Ship hit!!!") ``` ### 2.6.2 响应外星人和飞船碰撞 现在需要确定当外星人与飞船发生碰撞时该做些什么。我们不销毁 Ship 实例并创 建新的,而是通过跟踪游戏的统计信息来记录飞船被撞了多少次(跟踪统计信息还 有助于记分)。 创建一个用于跟踪游戏统计信息的新类GameStats ,并将其保存为文件 `game_stats.py`: # 3 记分模块 - 开发需求 > 添加一个 Play 按钮,用于根据需要启动游戏以及在游戏结束后重启游戏,还会修改这个游 > 戏,使其随玩家等级提高而加快节奏,并实现一个记分系统。 ## 3.1 添加 Play 按钮 添加一个 **Play** 按钮,它在游戏开始前出现,并在游戏结束后再次出现,让玩家能够开始新游戏。 运行代码后让游戏一开始处于非活动状态,并提示玩家单击Play按钮来开始游戏。 修改 GameStats 类的 __init__() 方法: - `game_stats.py` ```text def __init__(self, ai_game): """ 初始化统计信息 """ self.settings = ai_game.settings self.reset_stats() # 标识游戏启动时处于活动状态 self.game_active = False ``` ### 3.1.1 创建 PLAY 按钮 - 新建 Button 类 由于Pygame没有内置创建按钮的方法,我们将编写一个Button 类,用于创建带标签的实心矩形。 可在游戏中使用这些代码来创建任何按钮。下面是Button 类的第一部分,将这个类保存为文件 button.py: ## 3.2 提高等级 ## 3.3 记分板 ### 3.3.1 显示得分