Python Pygame跳过按键检查
我正在编写一个游戏,随机挑选一个问题供玩家回答。我有一个函数,可以随机选择问题并显示出来,效果很好。这是函数中的第一个问题:Python Pygame跳过按键检查,python,pygame,Python,Pygame,我正在编写一个游戏,随机挑选一个问题供玩家回答。我有一个函数,可以随机选择问题并显示出来,效果很好。这是函数中的第一个问题: topicList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] def random_topic_generator(): global RNG RNG = random.choice(topicList) if RNG == 0: scree
topicList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
def random_topic_generator():
global RNG
RNG = random.choice(topicList)
if RNG == 0:
screen.fill((255, 255, 255))
draw_text("Question 1", questionFont, screen, 10, 0)
draw_text("What color is the sky", questionFont, screen, 10, 100)
draw_text("A: Green", answerFont, screen, 10,400)
draw_text("B: Blue", answerFont, screen, 700, 400)
draw_text("C: Orange", answerFont, screen, 10,600)
draw_text("D: Yellow", answerFont, screen, 700, 600)
topicList.remove(0)
以下是While循环的相应部分:
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_RETURN:
random_topic_generator()
if RNG == 0:
if event.key == K_b:
right_answer()
else:
wrong_answer()
正确答案()和错误答案():
按return键进入下一个问题,可以。但是,无论何时RNG==0,无论何时我在游戏中遇到问题,错误的答案()总是在没有按键的情况下运行。如果我去掉了else,遇到了这个问题,按b没有任何作用。您已经检查了第二个代码片段第7行的事件键。当您到达最里面的if语句时,它总是使用else,因为只有当按下的键是
return
时,您才能到达该代码
这个逻辑错误的原因可能是您的输入处理程序过于复杂,这使得出错更加容易。从长远来看,您可能希望重构此代码,因为您的游戏将有许多不同的状态(菜单、问题、问题完成)和不同的输入处理。如果编写单独的输入处理函数,则可以在开始处理事件之前检查游戏状态,并将代码交给正确的处理程序。这可以防止单片megahandler使代码难以更新
while True:
state = handle_events(state)
def handle_events(state):
if state == 1:
return handle_menu_events(state)
elif state == 2:
return handle_question_events(state)
elif state == 3:
return handle_question_over_events(state)
def handle_question_events(state):
for event in pygame.event.get():
if event.type == KEYDOWN:
if RNG == 0:
if event.key == K_b:
right_answer()
else:
wrong_answer()
[...]
def handle_question_over_events(state):
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_RETURN:
random_topic_generator()
现在,您的逻辑已经足够分离,因此很难意外地将不同状态的事件处理混合在一起,就像您最初遇到的问题一样。欢迎使用堆栈溢出!使用格式化工具使文章更具可读性。代码块应类似于
代码块
。如果需要,请使用粗体斜体。举例说明,用代码解释而不是理论描述。谢谢你的建议。
while True:
state = handle_events(state)
def handle_events(state):
if state == 1:
return handle_menu_events(state)
elif state == 2:
return handle_question_events(state)
elif state == 3:
return handle_question_over_events(state)
def handle_question_events(state):
for event in pygame.event.get():
if event.type == KEYDOWN:
if RNG == 0:
if event.key == K_b:
right_answer()
else:
wrong_answer()
[...]
def handle_question_over_events(state):
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_RETURN:
random_topic_generator()