我让我的游戏运行了一段时间的True循环,我希望能够让用户“再玩一次?”我已经有了一个用于弹出文本的rect的代码,但是我需要一种方法让用户点击rect或点击y表示是,代码再次运行自己。
拥有循环它自己的方法,从main()
运行中调用它,当游戏结束并结束时,让main()
询问用户是否要再次播放,如果是这样,在将所有内容设置为默认值后调用主循环
要么
只需要再次请求清除并重新初始化所有变量的部分作为默认值,如果用户想再次播放则让循环
要判断用户是否单击了rect,只需在鼠标位置设置1 x 1 rect,然后单击它们,检查rects是否发生碰撞。然后,就像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()
我希望这是你正在寻找的答案。
在你的主程序循环中,创建一个新的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)
我能想到这一点:在代码结尾处放置这样的东西来询问用户是否要玩:
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
。