游戏结束
现在,当玩家的生命耗尽时,程序就会突然结束。 这太不友好了,所以我们将设置一个“游戏结束”界面,并允许玩家根据需要重玩游戏。
游戏结束的原因是我们的游戏循环由运行标志控制(标志是一个变量,可以是 True 或 False),当玩家死亡时我们将 running 设置为 False。 相反,我们想要跟踪我们的游戏处于什么状态(显示游戏结束或正在玩),我们将创建一个名为 game_over 的标志,并将其添加到游戏循环的顶部:
# Game loop
game_over = True
running = True
while running:
if game_over:
show_go_screen()
我们稍后会定义 show_go_screen(),我们还需要考虑其他因素。 当游戏结束,我们进入游戏结束画面,如果玩家选择再次玩,我们需要重置所有东西——分数、Mob、玩家的生命等等。当前,我们是在游戏循环之前设置这些内容,现在我们要将它们移动到 show_go_screen() 之后,这样当玩家退出该屏幕时它们就会执行:
# Game loop
game_over = True
running = True
while running:
if game_over:
show_go_screen()
game_over = False
all_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 playing
if 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 = True
while 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等级
您可能还可以考虑其他想法。在以后的课程中,我们将介绍其他技术,然后您可以再倒回来应用到这个游戏中。
完整的代码请点击此处访问。