Je construis un jeu-questionnaire à choix multiple dans pygame mais il y a un problème avec ma boucle while.Alors que le problème de boucle dans pygame ne s'arrête pas pour le gestionnaire d'événements
J'ai réussi à construire le jeu en python sans l'interface graphique et toute la logique fonctionne bien, cependant, quand j'essaie d'ajouter l'interface graphique à la logique, cela ne fonctionne pas de la même manière.
Dans mon jeu de logique de travail, la boucle while continue est mise en pause à chaque question grâce à la fonction 'raw_input()' et attend que l'utilisateur réponde. Quand je fais la version de l'interface graphique, mes questions sont lues avec succès mais elles les lisent toutes en même temps et il n'y a pas de temps pour répondre.
J'ai essayé d'ajouter time.sleep() après avoir lu chaque question, mais cela signifie que le programme ne répond pas aux gestionnaires d'événements. Si les gestionnaires d'événements fonctionnaient, alors ce serait la solution parfaite, donnant aux utilisateurs un certain temps pour répondre.
Cet exemple de code ci-dessous ne compilera pas car j'ai omis de nombreuses classes et méthodes, mais je voulais montrer que c'est là que se situe mon problème. Je lis les clefs et les valeurs de dictionnaire dedans et essaye alors et fais correspondre l'entrée d'utilisateur avec l'index de la réponse correcte qui est toujours answerMain [0] avant d'être mélangé.
Quelqu'un a-t-il eu un problème similaire ou connaît-il une solution possible?
attemptMain = {'Q': 'Question Here', 'A': 'Answer1','B': 'Answer2','c': 'Answer3','D': 'Answer4', }
def normalQuestions(self, list):
for i in list:
questionMain = self.attemptMain.keys()[i - 1]
answersMain = (self.attemptMain.values()[i - 1])
correctAnswerMain = answersMain[0]
shuffle(answersMain)
answersMainIndex = (1 + answersMain.index(correctAnswerMain))
self.layout.questionandAnswers(questionMain, answersMain[0], answersMain[1], answersMain[2], answersMain[3])
time.sleep(10)
x = self.layout.controls()
if (x == answersMainIndex):
print("this is the correct answer")
def controls(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_1:
print("here" + str(1))
return '1'
elif event.key == pygame.K_2:
print("here" + str(2))
return '2'
elif event.key == pygame.K_3:
print("here" + str(3))
return '3'
elif event.key == pygame.K_4:
print("here" + str(4))
return '4'
Un [exemple minimal exécutable] (https://stackoverflow.com/help/mcve) serait utile. Je peux déjà vous dire que vous ne devriez pas utiliser 'time.sleep' dans pygame, car le programme ne répondra pas pendant ce temps. Il y a plusieurs façons d'implémenter des timers dans pygame (recherche sur Stack Overflow). – skrx
Ok merci, j'ai jeté un oeil à l'heure.() Les fonctions sur tutoriels point, feront une recherche un peu plus spécifique ici alors! – odare
Voici [quelques bonnes réponses] (https://stackoverflow.com/questions/30720665/countdown-timer-in-pygame) (Je veux dire le 'pygame.time.get_ticks()', 'pygame.time.set_timer' et mon approche 'dt = clock.tick (30)/1000'). – skrx