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")