我让我的游戏在一段时间 True 循环中运行,我希望能够要求用户“再玩一次?” 我已经有了用于弹出文本的矩形代码,但我需要一种方法让用户单击矩形或按 y 表示是,然后代码再次运行它自己。
5 回答
在您的主程序循环中,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)
拥有循环它自己的方法,从main()
运行中调用它,当游戏结束并结束时,main()
询问用户是否想再次玩,如果是这样,在将所有内容设置为默认值后调用主循环
或者
只需将再次询问的部分清除并重新初始化所有变量作为默认值,如果用户想再次播放则让循环
要判断用户是否点击了矩形,只需在鼠标位置设置一个 1×1 的矩形,然后当他们点击时,检查矩形是否碰撞。然后,就像 DeadChex 所说的那样,通过让它成为自己的函数来再次调用循环。
运行这个我专门写的函数。随心所欲地调整它。如果玩家死了(或发生任何使再次播放文本出现的情况),您只需调用 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()
我希望这是您正在寻找的答案。
我可以想到这一点:在代码的末尾放置这样的内容来询问用户是否想玩:
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 。while
main()
main()
True
play_again
1
0