python - 我正在用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 包。
解决方案
如果我理解正确,您遇到的问题是,当您的蛇向右移动并且您按向上键并快速连续按向左键时,蛇的头部向左转,有效地导致与自己的身体发生碰撞.
这看起来像你的蛇的运动独立于按键,然后导致一次按下两个键的可能性,并且因为唯一的条件是蛇没有向右移动,一旦你按下向上,这实际上是正确的键,然后它会导致这种行为。
防止这种情况的一种快速方法是设置一个名为 egmoved_from_last_press
的变量,每次蛇移动时,您分配True
,每次按下键时,您分配False
。然后True
在检查按下哪个键时检查该值。