游戏结束
现在,当玩家的生命耗尽时,程序就会突然结束。 这太不友好了,所以我们将设置一个“游戏结束”界面,并允许玩家根据需要重玩游戏。
游戏结束的原因是我们的游戏循环由运行标志控制(标志是一个变量,可以是 True 或 False),当玩家死亡时我们将 running 设置为 False。 相反,我们想要跟踪我们的游戏处于什么状态(显示游戏结束或正在玩),我们将创建一个名为 game_over 的标志,并将其添加到游戏循环的顶部:
# Game loopgame_over = Truerunning = Truewhile running:if game_over:show_go_screen()
我们稍后会定义 show_go_screen(),我们还需要考虑其他因素。 当游戏结束,我们进入游戏结束画面,如果玩家选择再次玩,我们需要重置所有东西——分数、Mob、玩家的生命等等。当前,我们是在游戏循环之前设置这些内容,现在我们要将它们移动到 show_go_screen() 之后,这样当玩家退出该屏幕时它们就会执行:
# Game loopgame_over = Truerunning = Truewhile running:if game_over:show_go_screen()game_over = Falseall_sprites = pygame.sprite.Group()mobs = pygame.sprite.Group()bullets = pygame.sprite.Group()powerups = pygame.sprite.Group()player = Player()all_sprites.add(player)for i in range(8):newmob()score = 0
我们还将 game_over 设置为 False,因为我们正在开始一个新游戏。 然后,我们可以改变玩家生命耗尽时发生的情况:
# if the player died and the explosion has finished playingif player.lives == 0 and not death_explosion.alive():game_over = True
游戏结束画面
现在我们只需要定义 show_go_screen 做什么。 因为对于这个例子,我们只做一个“屏幕”,我们只是要使用游戏的标题,并给出一些关于如何玩指导说明:
def show_go_screen():screen.blit(background, background_rect)draw_text(screen, "SHMUP!", 64, WIDTH / 2, HEIGHT / 4)draw_text(screen, "Arrow keys move, Space to fire", 22,WIDTH / 2, HEIGHT / 2)draw_text(screen, "Press a key to begin", 18, WIDTH / 2, HEIGHT * 3 / 4)pygame.display.flip()waiting = Truewhile waiting:clock.tick(FPS)for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()if event.type == pygame.KEYUP:waiting = False
最后的 while 循环是我们处理“按一个键开始”部分的方式。 这有点像一个微型游戏循环,但我们所做的只是检查事件。 我们关心的唯一事件是 pygame.QUIT,它在单击窗口上的 X 时发生,以及按键事件。 你注意到我们没有在那里使用’pygame.KEYDOWN’吗?
使用 KEYUP 的原因是我们不会在玩家仍然按住键时开始游戏。 他们必须点击并释放才能继续。
这是在屏幕上进行游戏的一种非常简单的方法。 还有许多其他方法可以处理它,但我们将在后面的教程中讨论这些方法。
将所有内容封装起来
我们有了它,你的第一个完整的 Pygame 游戏! 如果您通过所有这些步骤都坚持下去,那么您就可以成为一名游戏程序员了。
显然我们可以添加更多的东西,比如:
- 增加难度
- 更多通电
- 添加敌人(以及敌人的反击!)
- 高分系统
- boss等级
您可能还可以考虑其他想法。在以后的课程中,我们将介绍其他技术,然后您可以再倒回来应用到这个游戏中。
完整的代码请点击此处访问。
