如何防止我的程序连续两次向我显示相同的图像? 主要

问题描述

我是 pygame 的新手,我基本上是在创建一个问答游戏,你必须在其中猜测,只需看看他们的脸,他们的名字。问题是同一个玩家可以连续出现两次,我不知道如何阻止它。如果需要,这是我的程序。任何帮助表示赞赏。谢谢!

导入pygame、随机、时间

主要

pygame.init()
clock = pygame.time.Clock()
fenetre = pygame.display.set_mode((1400,788))
pygame.display.set_caption('Quizz joueurs de foot')
BACKGROUND = pygame.image.load("IMAGES/BACKGROUND.png").convert()
font = pygame.font.SysFont('Montserrat',70)

erreurs = 0
bonne_reponses = 0
entree = ""

joueurs = ["Aguero","Alisson","Batistuta","Boateng","Cantona","Cristiano Ronaldo","Dembélé","Dybala","Dzeko","figo","Gattuso","Ibrahimovic","Kanté","Koeman","Lewa","Messi","Nedved","Neuer","Neymar","Reus","Stoichkov","Totti","Vidic"]

images = ["Aguero.png","Alisson.png","Batistuta.png","Boateng.png","Cantona.png","CR7.png","Dembélé.png","Dybala.png","Dzeko.png","figo.png","Gattuso.png","Ibra.png","Kanté.png","Koeman.png","Lewa.png","MESSI.png","Nedved.png","Neuer.png","Neymar.png","Reus.png","Stoichkov.png","Totti.png","Vidic.png"]

find = random.randint(0,len(images)-1)

def erreur():
    global erreurs
    erreurs=erreurs+1
    return erreurs

def bonne_reponse():
    global bonne_reponses
    bonne_reponses=bonne_reponses+1
    return bonne_reponses

input_active = True
run = True

while run:
    fenetre.blit(BACKGROUND,[0,0])
    TPImage = pygame.image.load("IMAGES/" + images[find])
    fenetre.blit(TPImage,TPImage.get_rect(center = (640,260)))
    clock.tick(25)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN and input_active:
            if event.key == pygame.K_RETURN:
                if entree.lower() != joueurs[find].lower():
                    erreur()
                    if erreurs >= 5:
                        input_active = False
                        entree = ""
                        pygame.display.flip()
                        
                else:
                    entree = ""
                    bonne_reponse()
                    find = random.randint(0,len(images)-1)

            elif event.key == pygame.K_BACKSPACE:
                entree =  entree[:-1]

            else:
                entree += event.unicode
                print(entree)

    
    
    texte = font.render('Qui est ce joueur ?',True,(255,255,255))
    text_surf = font.render(entree,(181,195,199))
    text_reponse = font.render("Valides : " + str(bonne_reponses),(99,247,141))
    text_erreur = font.render("Erreurs : " + str(erreurs),(245,73,73))
    fenetre.blit(text_reponse,(50,10))
    fenetre.blit(text_surf,text_surf.get_rect(center = (640,730)))
    fenetre.blit(texte,texte.get_rect(center = (680,430)))
    fenetre.blit(text_erreur,(1000,5))
    pygame.display.flip()
        
pygame.exit()
exit()

解决方法

重复 random.randint 直到得到不同的结果:

while run:
    # [...]

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN and input_active:
            if event.key == pygame.K_RETURN:
                if entree.lower() != joueurs[find].lower():
                    # [...]

                else:
                    entree = ""
                    bonne_reponse()

                    prev_find = find
                    while prev_find == find:
                        find = random.randint(0,len(images)-1)

    # [...]

如果您只想设置随机顺序并只显示每张图片一次,请使用 random.shuffle

image_indices = random.shuffle(list(range(len(images))))
index = 0
find = image_indices[index]

while run:
    # [...]

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN and input_active:
            if event.key == pygame.K_RETURN:
                if entree.lower() != joueurs[find].lower():
                    # [...]
                        
                else:
                    entree = ""
                    bonne_reponse()

                    index += 1
                    if index >= len(images):
                        index = 0
                    find = image_indices[index]

    # [...]