Kabori
Kabori

Reputation: 109

How can I prevent my program from showing me the same image twice in a row?

im new to pygame and im basically creating a quiz game where you have to guess, just by looking at their face, their name. The problem is that a same player can show up twice in a row and i don't know how can i prevent it. Here is my program if needed. Any help is appreciated. Thanks !

import pygame,random,time

Main

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, True, (181, 195, 199))
    text_reponse = font.render("Valides : " + str(bonne_reponses), True, (99, 247, 141))
    text_erreur = font.render("Erreurs : " + str(erreurs), True, (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()

Upvotes: 1

Views: 70

Answers (1)

Rabbid76
Rabbid76

Reputation: 211258

Repeat random.randint until you get a different result:

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)

    # [...]

If you just want to set a random order and show each image exactly once, use 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]

    # [...]

Upvotes: 2

Related Questions