如何重新开始游戏?

How to restart the game?

我想使用按钮 Yes! 可以重新开始游戏,而不是退出程序并定期进入。如何创建?

def game_over():
    Game_over = True
    while Game_over:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
        #[...]
        button.draw(450, 500, 'Yes!')
        button.draw(720, 500, 'No!', beginning)
        pygame.display.update()
        clock.tick(FPS)
def game():
    global health 
    Game = True
    while Game:
        clock.tick(FPS)
        for event in pygame.event.get(): 
            #[...]
            if event.type == pygame.QUIT:
                beginning = False
        if health <= 0:
            game_over()
        #[...]        
        show_health()
        button.draw(20, 80, 'Pause', pause)
        pygame.display.update()
        all_sprites.update()

def beginning():
    Beginning = True
    while Beginning:
        clock.tick(FPS)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
        #[...]
        mini_button = Button2(180, 120)
        mini_button.draw(570, 200, 'PLAY', game)
        mini_button.draw(570, 420, 'QUIT', QUIT)
        pygame.display.update()      
beginning()
pygame.quit()

你的方法的问题在于它是递归的。 beginning 调用 gamegame 调用 game_overgame_over 再次调用 beginning:

beginning
  |
   -> game
       |
        -> game_over
            |
             -> beginning
                  |
                   -> game
                        |
                         -> ...

重组代码并添加游戏状态变量和改变游戏状态的函数:

game_state = 'beginning'

def start_game():
    global game_state
    game_state = 'running'

def pause_game():
    global game_state
    game_state = 'pause'

def game_over():
    global game_state
    game_state = 'game_over'

def quit_game():
    global game_state
    game_state = 'quit'

创建一个游戏循环,根据游戏状态绘制不同的场景。当按下一个键时,游戏状态发生变化:

def main():
    global game_state
    while game_state != 'quit':
        event_list = pygame.event.get() 
        for event in event_list:
            if event.type == pygame.QUIT:
                quit_game()
  
        if game_state == 'beginning':
            mini_button = Button2(180, 120)
            mini_button.draw(570, 200, 'PLAY', start_game)
            mini_button.draw(570, 420, 'QUIT', quit_game)

        elif game_state == 'pause':
            # [...]
        
        elif game_state == 'running':
            for event in event_list:
                # [...]
            if health <= 0:
                game_over()
            #[...]        
            show_health()
            button.draw(20, 80, 'Pause', pause_game)
            all_sprites.update()

        elif game_state == 'game_over':
            button.draw(450, 500, 'Yes!', start_game)
            button.draw(720, 500, 'No!', quit_game)
        
        pygame.display.update()     
        clock.tick(FPS)

main()
pygame.quit()

用 class 方法代替 global game_state variabel you can use a Classe