4

ゲームを while 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 x 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 に答える