【发布时间】:2017-09-27 15:04:41
【问题描述】:
我正在 pygame 中构建一个多项选择测验游戏,但是我的 while 循环存在问题。
我在没有 GUI 的情况下成功地在 python 中构建了游戏,并且所有逻辑都可以正常工作,但是,当我尝试将 GUI 添加到逻辑时,它的工作方式就不同了。
在我的工作逻辑游戏中,由于我使用“raw_input()”函数,连续的 while 循环在每个问题处都会暂停并等待用户回答。当我做 GUI 版本时,我的问题被成功读入,但它一次全部读入,没有时间回答。
我尝试在阅读每个问题后添加 time.sleep() 但这意味着程序不会响应事件处理程序。如果事件处理程序确实有效,那么这将是一个完美的解决方案,给用户一定的时间来回答。
下面的示例代码无法编译,因为我遗漏了许多类和方法,但想表明这是我的问题所在。我在其中读取字典键和值,然后尝试将用户输入与正确答案的索引进行匹配,该索引始终为 answerMain[0] ,然后再被洗牌。
有没有人遇到过类似的问题或知道可能的解决方案?
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'
【问题讨论】:
-
minimal, runnable example 会很有帮助。我已经可以告诉你,你不应该在 pygame 中使用
time.sleep,因为此时程序将无响应。在 pygame 中有多种实现定时器的方法(在 Stack Overflow 上搜索)。 -
好的,谢谢,我看了一下教程点上的时间。()函数,然后会在这里做一个更具体的搜索!
-
这里是some good answers(我的意思是
pygame.time.get_ticks()、pygame.time.set_timer和我的dt = clock.tick(30) / 1000方法)。 -
啊,我想我之前确实找到了那个确切的页面,它帮助我让倒计时工作,但是我的问题是在 normalQuestion 函数的 for 循环中,当我希望每次迭代时它迭代太快以 10/15 秒为例,这样用户就有机会回答问题
-
给我看一个最小的、可运行的例子,我会看看问题出在哪里。问题中的代码不够完整,无法查看程序是如何工作的。
标签: python while-loop event-handling pygame