ゲームを while 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 x 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()
これがあなたが探していた答えであることを願っています。