4

我让我的游戏在一段时间 True 循环中运行,我希望能够要求用户“再玩一次?” 我已经有了用于弹出文本的矩形代码,但我需要一种方法让用户单击矩形或按 y 表示是,然后代码再次运行它自己。

4

5 回答 5

2

在您的主程序循环中,event.key为您希望玩家按下以重新开始游戏的任何键创建一个新的 if 语句,然后main()在 if 语句中调用。这会将所有内容重置回方块 1。

在下面的示例中,我检测用户是否已经死亡并按下R键,然后重新启动main()

# -------- Main Program Loop -----------
while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.go_left()
            if event.key == pygame.K_RIGHT:
                player.go_right()
            if event.key == pygame.K_UP:
                player.jump()
            if event.key == pygame.K_SPACE:
                player.shoot()

            if event.key == pygame.K_r and not player.alive():
                main()

在主循环的下方,我显示了一些文本,要求玩家按 R 键重生。

        if not player.alive():
            gameover = font.render("Press R to Respawn", False, (255, 255, 255))
            rect = gameover.get_rect()
            rect.center = screen.get_rect().center
            screen.blit(gameover, rect)
于 2015-08-12T06:16:29.513 回答
1

拥有循环它自己的方法,从main()运行中调用它,当游戏结束并结束时,main()询问用户是否想再次玩,如果是这样,在将所有内容设置为默认值后调用主循环

或者

只需将再次询问的部分清除并重新初始化所有变量作为默认值,如果用户想再次播放则让循环

于 2012-12-21T04:01:45.280 回答
0

要判断用户是否点击了矩形,只需在鼠标位置设置一个 1×1 的矩形,然后当他们点击时,检查矩形是否碰撞。然后,就像 DeadChex 所说的那样,通过让它成为自己的函数来再次调用循环。

于 2013-01-07T01:24:13.923 回答
0

运行这个我专门写的函数。随心所欲地调整它。如果玩家死了(或发生任何使再次播放文本出现的情况),您只需调用 play_again()

import pygame
pygame.init()

SCREEN_WIDTH = 600
SCREEN_HEIGHT = 400

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
bigfont = pygame.font.Font(None, 80)
smallfont = pygame.font.Font(None, 45)

def play_again():
    text = bigfont.render('Play again?', 13, (0, 0, 0))
    textx = SCREEN_WIDTH / 2 - text.get_width() / 2
    texty = SCREEN_HEIGHT / 2 - text.get_height() / 2
    textx_size = text.get_width()
    texty_size = text.get_height()
    pygame.draw.rect(screen, (255, 255, 255), ((textx - 5, texty - 5),
                                               (textx_size + 10, texty_size +
                                                10)))

    screen.blit(text, (SCREEN_WIDTH / 2 - text.get_width() / 2,
                       SCREEN_HEIGHT / 2 - text.get_height() / 2))

    clock = pygame.time.Clock()
    pygame.display.flip()
    in_main_menu = True
    while in_main_menu:
        clock.tick(50)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                in_main_menu = False
                pygame.display.quit()
                pygame.quit()
                quit()
            elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
                x, y = event.pos
                if x >= textx - 5 and x <= textx + textx_size + 5:
                    if y >= texty - 5 and y <= texty + texty_size + 5:
                        in_main_menu = False
                        break

play_again()

pygame.display.quit()
pygame.quit()

我希望这是您正在寻找的答案。

于 2013-12-07T08:48:17.977 回答
0

我可以想到这一点:在代码的末尾放置这样的内容来询问用户是否想玩:

play_again = 1

while play_again:
    play_again = int(raw_input("Play again? 0=No, 1=Yes"))
    if play_again:
        main()
    else:
        break
        pygame.quit()

在我的示例中,我将 a放在函数循环True的末尾,以便返回 allways ,这使得如果用户输入为,则可以在循环内部重复游戏并退出 if 。whilemain()main()Trueplay_again10

于 2016-02-03T02:35:19.013 回答