Микшер Pygame в цикле

#python #pygame

#python #pygame

Вопрос:

Я разрабатываю игру на pygame и распознавание голоса, в которой будут отображаться разные изображения, и пользователь должен произнести имя объекта, который они видят. Если они дадут правильный ответ, программа воспроизведет аудиофайл «хорошая работа» и перейдет к следующему изображению. В противном случае он будет воспроизводить «повторите попытку с неправильным ответом» и предоставит пользователю второй шанс ответить на тот же вопрос; это произойдет три раза. Моя проблема в том, что после последнего шанса будет воспроизведен аудиофайл «неправильный ответ, попробуйте еще раз», и вместо повторного перехода к следующему вопросу. Как я могу пропустить воспроизведение «повторите попытку с неправильным ответом» в последний раз, когда я выполняю цикл?

Спасибо.

 for i in range(1,11):
       
       
       if i== 1:

            carImg = pygame.image.load(os.path.join(image_path,'tiger.jpg'))
            gameDisplay.blit(carImg,(130,0))
            pygame.display.update()
            pygame.mixer.Sound.play(Tiger)
            pygame.mixer.music.stop()
            time.sleep(7)
            for j in range(1,4):
                    r = sr.Recognizer()
                    with sr.Microphone() as source:
            
                     print ('Say Something!')
                     audio = r.listen(source)
                    try:
                        text = r.recognize_google(audio)
                        print(text)
                    except:
                        print('Did not get that try Again')
                        text=''
            
                    if text == 'tiger':
                        print('good job') 
                        pygame.mixer.Sound.play(right)
                        pygame.mixer.music.stop()
                        break
                    else:
                        print('wrong try again')
                        pygame.mixer.Sound.play(wrong)
                        pygame.mixer.music.stop()
                        time.sleep(3)
            time.sleep(4)
      
       
       elif i== 2:

        carImg = pygame.image.load(os.path.join(image_path,'monkey.jpg'))
        gameDisplay.blit(carImg,(130,0))
        pygame.display.update()
        pygame.mixer.Sound.play(Monkey)
        pygame.mixer.music.stop()
         
        for a in range(1,4):
                    r = sr.Recognizer()
                    with sr.Microphone() as source:
            
                     print ('Say Something!')
                     audio = r.listen(source)
                    try:
                        text = r.recognize_google(audio)
                        print(text)
                    except:
                        print('Did not get that try Again')
                        text=''
        
                    if text == 'monkey':
                        print('good job') 
                        pygame.mixer.Sound.play(right)
                        pygame.mixer.music.stop()
                        break
                    else:
                        print('wrong ya wad')
                        pygame.mixer.Sound.play(wrong)
                        pygame.mixer.music.stop()
                        time.sleep(3)
        time.sleep(4)
  

Ответ №1:

Вы можете создать переменную с именем что-то вроде ‘guess_counter’, чтобы отслеживать, сколько раз они отвечали неправильно, и пока это число <3, (поскольку вы сказали, что у них будет 3 шанса), вы можете воспроизвести звуковой эффект для неправильного.

Как только вы перейдете к следующему изображению, вы можете сбросить эту переменную счетчика, чтобы отслеживать догадки для нового изображения.

 for i in range(1,11):
   
   
   if i== 1:
        guess_counter = 0
        carImg = pygame.image.load(os.path.join(image_path,'tiger.jpg'))
        gameDisplay.blit(carImg,(130,0))
        pygame.display.update()
        pygame.mixer.Sound.play(Tiger)
        pygame.mixer.music.stop()
        time.sleep(7)
        for j in range(1,4):
                r = sr.Recognizer()
                with sr.Microphone() as source:
        
                print ('Say Something!')
                audio = r.listen(source)
                try:
                    text = r.recognize_google(audio)
                    print(text)
                except:
                    print('Did not get that try Again')
                    text=''
        
                if text == 'tiger':
                    print('good job') 
                    pygame.mixer.Sound.play(right)
                    pygame.mixer.music.stop()
                    break
                else:
                    if guess_counter < 3:
                        print('wrong try again')
                        pygame.mixer.Sound.play(wrong)
                        pygame.mixer.music.stop()
                        time.sleep(3)
                        guess_counter  = 1
        time.sleep(4)
  
   
   elif i== 2:
       guess_counter = 0
       carImg = pygame.image.load(os.path.join(image_path,'monkey.jpg'))
       gameDisplay.blit(carImg,(130,0))
       pygame.display.update()
       pygame.mixer.Sound.play(Monkey)
       pygame.mixer.music.stop()
     
       for a in range(1,4):
                r = sr.Recognizer()
                with sr.Microphone() as source:
        
                print ('Say Something!')
                audio = r.listen(source)
                try:
                    text = r.recognize_google(audio)
                    print(text)
                except:
                    print('Did not get that try Again')
                    text=''
    
                if text == 'monkey':
                    print('good job') 
                    pygame.mixer.Sound.play(right)
                    pygame.mixer.music.stop()
                    break
                else:
                    if guess_counter < 3:
                        print('wrong ya wad')
                        pygame.mixer.Sound.play(wrong)
                        pygame.mixer.music.stop()
                        time.sleep(3)
                        guess_counter  = 1
    time.sleep(4)