Я предполагаю, что ваша конкретная проблема связана с тем, что вы не можете правильно или правильно отслеживать состояние игры. Я должен догадаться, потому что вы не предоставите пример, который демонстрирует проблему, которую вы описываете, и я не могу запустить ваш код, не генерируя целую кучу ресурсов наполнителя и не догадываясь о реализации других, неопределенных функций.
Ниже приведен пример, в котором минимально показывает, как задавать несколько вопросов, нажмите клавишу, чтобы начать задавать вопросы, и нажмите левую или правую кнопку мыши, чтобы ответить.
Для его выполнения не требуется никаких дополнительных ресурсов, и, если вы закомментируете указанную строку, возникнет та же проблема, которую вы описываете: зацикливание вопроса с каждым кадром (без ожидания ответа).
import pygame
import random
pygame.init()
pygame.font.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode([320,240])
sys_font = pygame.font.SysFont(pygame.font.get_default_font(), 18)
pygame.display.set_caption("Quiz")
nums_left = 0 # initialise the counters
nums_right = 0
done = False
questions = ["Who?", "What?", "Where?", "When?", "Why?"]
# states: 0: init, 10: select a question, 20: wait for answer, 30: Answered
state = 0
while not done:
# Events
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.KEYDOWN:
if state == 0:
state = 10
elif event.type == pygame.MOUSEBUTTONUP:
if state == 20:
if event.button == 1: # left
nums_left += 1
state = 30
elif event.button == 2: # middle
pass
elif event.button == 3: # right
nums_right += 1
state = 30
elif state == 30:
state = 10 # ask a new question
# Clear Background
screen.fill(pygame.color.Color("white"))
# Manage state
if state == 0:
question_txt = sys_font.render("Press any key to start!", True, pygame.color.Color("violet"))
elif state == 10:
# choose a random question
question = random.choice(questions)
question_txt = sys_font.render(question, True, pygame.color.Color("seagreen"))
# comment out the line below to replicate buggy behaviour
state = 20
elif state == 20:
# we're just waiting here, perhaps indicate the mouse should be clicked
pass
elif state == 30:
question_txt = sys_font.render("Click for a new question", True, pygame.color.Color("turquoise"))
else:
raise NotImplementedError # shouldn't get here
# always draw the score
score_txt = sys_font.render(f"Left: {nums_left} Right: {nums_right}", True, pygame.color.Color("olivedrab"))
# update the screen
screen.blit(question_txt, (20, 20))
screen.blit(score_txt, (20, 220))
# Frame Change
pygame.display.update()
clock.tick(60)
pygame.quit()
Чтобы получить максимальную отдачу от переполнения стека, прочитайте и поймите Как спросить . Это поможет вам создать вопросы, которые не будут чахнуть, игнорируются с низким баллом.