Pygame重启?

问题描述 投票:3回答:6

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

python user-controls while-loop pygame
6个回答
1
投票

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

要么

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


0
投票

要判断用户是否单击了rect,只需在鼠标位置设置1 x 1 rect,然后单击它们,检查rects是否发生碰撞。然后,就像DeadChex所说的那样,让它成为它自己的函数再次调用循环。


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()

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


0
投票

在你的主程序循环中,创建一个新的event.key if语句,用于你希望玩家按下以重启游戏的任何键,然后在if语句中调用main()。这会将所有内容重置为方块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)

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()

在我的例子中,我在我的True函数的while循环的末尾放置了一个main(),以便main()返回总是True,这使得在play_again循环内部可以重复游戏,如果用户输入已经是1并退出if 0


-1
投票

是否可以通过使用exec()函数简化过程?

以下是我对类似问题的回答。我想这可以适应你的循环使用。

Simply Python Game Restart Code

© www.soinside.com 2019 - 2024. All rights reserved.