Pygame - 如何确保玩家以正确的顺序完成任务?
Pygame - How do I ensure that a player completes a task in the correct order?
我还年轻(高中一年级),所以我对 Pygame 或一般编码了解不多。对于我的计算机科学 class 期末项目,我正在制作一款类似于老爹比萨店的餐厅游戏。现在,我只是在做基础,它的一个功能是你需要按照一定的顺序准备食物,否则你会得到一个错误信息,或者被扣分等等。例如,如果你想准备一个汉堡,你必须先放面包,然后是汉堡,然后是配料……你懂的。如果你把汉堡放在面包之前就不行了。我将如何做到这一点?我在考虑使用嵌套的 if 语句。此外,通过按下与成分对应的键(例如,“L”代表生菜),将成分放在食物上。下面的代码显示了我所拥有的,希望能帮助您理解我的要求。我遇到问题的部分从第一个 elif 语句开始,我只是将其余部分放在上下文中。
running = True
while running:
pygame.display.update()
for event in pygame.event.get():
if(running == False):
pygame.QUIT()
sys.exit()
if(event.type == QUIT):
running = False
if(event.type == KEYDOWN):
if(event.key == K_ESCAPE):
running = False
elif(event.key == K_l):
screen.blit(lettuce, ((counter_width-lettuce_width)/2 + 2, (counter_height-lettuce_height)/2))
print("lettuce")
if(event.key == K_a):
screen.blit(apple, ((counter_width-apple_width)/2 + 2, (counter_height-apple_height)/2))
else:
print("wrong")
正如您在代码中看到的,我在第一个 elif 语句中放置了另一个 if 语句,因此在您按下“L”键后,它会检查您是否按下了“A”键,如果您没有按下t(else 语句),它会给你一条错误信息。但是,当我按下 L 然后再按下另一个键时,无论我是否按下了正确的键,它都会给我错误消息(如果我按下 L 然后 A,这是正确的顺序,它会给我错误消息)。我知道这是因为用于 A 键的 if 语句仍在检查与用于 L 键的 if 语句相同的按键事件,因此自从我首先按下 L 后,用于检查 A 的 if 语句仅检测到该事件。我的问题是弄清楚要更改什么以使其按预期工作。请不要评判我的代码或我的经验,我还在学习。谢谢!
需要理解的重要一点是,pygame.KEYDOWN
类型的事件仅表示按下一个键。
用户点击 'k' 然后按任意顺序点击 'a' 将触发两个 KEYDOWN 事件,所有事件 运行 你的代码都是因为行 for event in pygame.event.get():
。这就是为什么您的代码永远不会识别出两者同时被按下的原因。 (event.key
不能等于 K_l 和 K_a)
您需要存储一个键是否被按下,以实现识别何时使用多个键的目标。
提示:您可以使用布尔值来存储是否按下某个键
for event in pygame.event.get():
# KEYDOWN event for when a key is pressed
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_l:
l_pressed = True
print("lettuce")
elif event.key == pygame.K_a:
a_pressed = True
if l_pressed:
print("tomato")
# KEYUP event for when a key is released
elif event.type == pygame.KEYUP:
if event.key == pygame.K_a:
a_pressed = False
elif event.key == pygame.K_l:
l_pressed = False
编辑:实际上并不想要多个按键功能:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_l:
print("lettuce")
elif event.key == pygame.K_a:
print("tomato")
我还年轻(高中一年级),所以我对 Pygame 或一般编码了解不多。对于我的计算机科学 class 期末项目,我正在制作一款类似于老爹比萨店的餐厅游戏。现在,我只是在做基础,它的一个功能是你需要按照一定的顺序准备食物,否则你会得到一个错误信息,或者被扣分等等。例如,如果你想准备一个汉堡,你必须先放面包,然后是汉堡,然后是配料……你懂的。如果你把汉堡放在面包之前就不行了。我将如何做到这一点?我在考虑使用嵌套的 if 语句。此外,通过按下与成分对应的键(例如,“L”代表生菜),将成分放在食物上。下面的代码显示了我所拥有的,希望能帮助您理解我的要求。我遇到问题的部分从第一个 elif 语句开始,我只是将其余部分放在上下文中。
running = True
while running:
pygame.display.update()
for event in pygame.event.get():
if(running == False):
pygame.QUIT()
sys.exit()
if(event.type == QUIT):
running = False
if(event.type == KEYDOWN):
if(event.key == K_ESCAPE):
running = False
elif(event.key == K_l):
screen.blit(lettuce, ((counter_width-lettuce_width)/2 + 2, (counter_height-lettuce_height)/2))
print("lettuce")
if(event.key == K_a):
screen.blit(apple, ((counter_width-apple_width)/2 + 2, (counter_height-apple_height)/2))
else:
print("wrong")
正如您在代码中看到的,我在第一个 elif 语句中放置了另一个 if 语句,因此在您按下“L”键后,它会检查您是否按下了“A”键,如果您没有按下t(else 语句),它会给你一条错误信息。但是,当我按下 L 然后再按下另一个键时,无论我是否按下了正确的键,它都会给我错误消息(如果我按下 L 然后 A,这是正确的顺序,它会给我错误消息)。我知道这是因为用于 A 键的 if 语句仍在检查与用于 L 键的 if 语句相同的按键事件,因此自从我首先按下 L 后,用于检查 A 的 if 语句仅检测到该事件。我的问题是弄清楚要更改什么以使其按预期工作。请不要评判我的代码或我的经验,我还在学习。谢谢!
需要理解的重要一点是,pygame.KEYDOWN
类型的事件仅表示按下一个键。
用户点击 'k' 然后按任意顺序点击 'a' 将触发两个 KEYDOWN 事件,所有事件 运行 你的代码都是因为行 for event in pygame.event.get():
。这就是为什么您的代码永远不会识别出两者同时被按下的原因。 (event.key
不能等于 K_l 和 K_a)
您需要存储一个键是否被按下,以实现识别何时使用多个键的目标。
提示:您可以使用布尔值来存储是否按下某个键
for event in pygame.event.get():
# KEYDOWN event for when a key is pressed
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_l:
l_pressed = True
print("lettuce")
elif event.key == pygame.K_a:
a_pressed = True
if l_pressed:
print("tomato")
# KEYUP event for when a key is released
elif event.type == pygame.KEYUP:
if event.key == pygame.K_a:
a_pressed = False
elif event.key == pygame.K_l:
l_pressed = False
编辑:实际上并不想要多个按键功能:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_l:
print("lettuce")
elif event.key == pygame.K_a:
print("tomato")