2

Pygame と Python を使用してちょっとした Guess The Flag ゲームを作成しようとしていますが、作成した関数とループの一部に問題があります。私は Python に比較的慣れていないため、非常に混乱することがあります。

とにかく、私はゲームのテスト段階にあり、中国、カナダ、アメリカ、フランスの 4 つの国があります。それらを別々の定義済み関数に入れ、それらをリストに入れ、ランダムモジュールを使用してリストをシャッフルしました。私はそれを for ループに入れて、希望どおりに動作させようとしています。

リストを適切にシャッフルして関数を選択しますが、同じ関数の繰り返しがあり、決して終了しません。

これが私のコードです:

def pick_country():
    global list1
    main_font = "brain flower euro.ttf"
    font1 = pygame.font.Font((main_font), 50)
    font2 = pygame.font.Font((main_font), 40)
    list1 = [france1, canada1, china1, usa1]
    random.shuffle(list1)
    for cur_country in list1:
        cur_country()
    pygame.display.update()

def france1():
    screen.fill((255, 255, 255))
    country = 'FRANCE'
    flag = 'france_flag.jpeg'
    flag1 = pygame.image.load(flag).convert()
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:
                pick_country()
        screen.blit(flag1, (300, 350))
        pygame.display.update()
def canada1():
    name = ""
    main_font = "brain flower euro.ttf"
    font1 = pygame.font.Font((main_font), 50)
    country = 'CANADA'
    flag = 'canada_flag.jpeg'
    black = 0, 0, 0
    flag1 = pygame.image.load(flag).convert()
    while True:
        for evt in pygame.event.get():
            if evt.type == KEYDOWN:
                if evt.unicode.isalpha():
                    name += evt.unicode
                elif evt.key == K_SPACE:
                    name += " "
                elif evt.key == K_BACKSPACE:
                    name = name[:-1]
            elif evt.type == QUIT:
                pygame.quit()
                sys.exit()
        screen.fill((255, 255, 255))
        screen.blit(flag1, (200, 25))
        pygame.draw.line(screen, black, (200, 115), (0, 115), (6))
        pygame.draw.line(screen, black, (600, 115), (800, 115), (6))
        block = font1.render(name, True, black)
        rect = block.get_rect(center = (400, 600))
        screen.blit(block, rect)
        pygame.draw.rect(screen, black, (275, 550, 250, 100), (2))
        if name == "canada":
            pick_country()
        pygame.display.update()
def usa1():
    screen.fill((255, 255, 255))
    country =  'USA'
    flag = 'usa_flag.jpeg'
    flag1 = pygame.image.load(flag).convert()
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:
                pick_country()
        screen.blit(flag1, (225, 300))
        pygame.display.update()
def china1():
    screen.fill((255, 255, 255))
    country = 'CHINA'
    flag = 'china_flag.jpeg'
    flag1 = pygame.image.load(flag).convert()
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:
                pick_country()
        screen.blit(flag1, (300, 350))
        pygame.display.update()


pick_country()

カナダについて尋ねないでください。それは私の主要な国のテストエリアです。

「何を試しましたか」から始める前に、次のことを試しました。

1: スクリプトの「リストとシャッフル」部分を取得し、関数の外、画面の上部に配置します。1 のエラー: リスト内の関数が (まだ) わかりません。

2: スクリプトの「リストとシャッフル」の部分を取り、それを関数の外に置きます。国関数の後、実際の関数の前pick_country()です。2 のエラー: 最初に国を選択しますが、明らかに別の国に行くことはありません。

何か助けはありますか?お願いします!

4

2 に答える 2