项目详细介绍
在这个系列中,将制作一个雷霆战机游戏。
游戏结束
现在,当玩家用完生命时,程序就会突然结束。这不是很友好。
所以将制作一个“Game Over”屏幕,并允许玩家再次玩。
“Game Over”屏幕在2种情况下显示:
- 游戏程序刚刚启动后
- 玩家3条命都用完
游戏结束的原因是游戏循环由running变量控制,设置running为False玩家死亡时。现在想要跟踪游戏状态(显示游戏结束或玩游戏),将创建一个名为game_over的标志,并将其添加到游戏循环的顶部:
# Game loop game_over = True running = True while running: if game_over: show_go_screen()
稍后会定义show_go_screen()。
目前还需要考虑别的事情。
当游戏结束,通过屏幕进入游戏时,如果玩家再次选择游戏,需要重置所有内容 - 得分,流星,玩家的生命等等。现在在游戏开始前设置这些东西,但现在要将它们移动到show_go_screen()之后,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,因为正在开始一个新的游戏。然后,可以改变玩家用完生命时发生的事情--- game_over = True
:
# 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, "雷霆战机!", 64, WIDTH / 2, HEIGHT / 4) draw_text(screen, "方向键移动, 空格键开火", 22, WIDTH / 2, HEIGHT / 2) draw_text(screen, "按下任意键开始游戏", 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
show_go_screen()函数里面运行一个死循环,直到用户按下任意键后,退出死循环,结束函数。