首页 > 解决方案 > 我正在用python编写一个蛇游戏。但是,如果我们快速按下 2 个按钮,则一次需要两个命令。我能做些什么来防止它?

问题描述

我在蛇游戏中遇到以下问题:如果蛇向右并且玩家快速连续按下向上和向左键,蛇向左转,越过它的身体并且游戏结束,将其视为碰撞。如何防止游戏在蛇移动之前接受两个改变方向的命令?

我检查按下哪个键的代码如下:

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT and left == False:
                right = True
                up = False
                down = False
            elif event.key == pygame.K_LEFT and right == False:
                left = True
                up = False
                down = False
            elif event.key == pygame.K_DOWN and up == False:
                down = True
                right = False
                left = False
            elif event.key == pygame.K_UP and down == False:
                up = True
                right = False
                left = False

该项目的完整代码可以在这个 Git 存储库中找到。

要运行代码,您需要通过 pip 安装 pygame 包。

标签: pythonpygame

解决方案


如果我理解正确,您遇到的问题是,当您的蛇向右移动并且您按向上键并快速连续按向左键时,蛇的头部向左转,有效地导致与自己的身体发生碰撞.

这看起来像你的蛇的运动独立于按键,然后导致一次按下两个键的可能性,并且因为唯一的条件是蛇没有向右移动,一旦你按下向上,这实际上是正确的键,然后它会导致这种行为。

防止这种情况的一种快速方法是设置一个名为 egmoved_from_last_press的变量,每次蛇移动时,您分配True,每次按下键时,您分配False。然后True在检查按下哪个键时检查该值。


推荐阅读