如何在 pygame 中按下另一个键时禁用某个键

How to disbale certain key when another key is pressed in pygame

我正在完成我的大学作业,他们给了我一个任务,让我在 python 中使用 pygame 制作贪吃蛇游戏,我已经制作了游戏,但我遇到了一个问题,问题是,如果我按下了右键,而我的蛇向右移动,那么我按下了左键,蛇正在撞到自己,我就输了游戏。

我想要的是如果我的蛇朝某个方向移动, 例如:对 左键应该被禁用,换句话说,当按下右键时,左键不应该工作。 自 2 天以来我一直在尝试解决问题,但找不到任何东西,我们将不胜感激,谢谢

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        game_over = True
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            x1_change = -snake_block
            y1_change = 0
        elif event.key == pygame.K_RIGHT:
            x1_change = snake_block
            y1_change = 0
        elif event.key == pygame.K_UP:
            x1_change = 0
            y1_change = -snake_block
        elif event.key == pygame.K_DOWN:
            x1_change = 0
            y1_change = snake_block

您也可以通过注意蛇是否已经朝那个方向移动来禁用按键:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        game_over = True
    if event.type == pygame.KEYDOWN:
        if y1_change:
            if event.key == pygame.K_LEFT:
                x1_change = -snake_block
                y1_change = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = snake_block
                y1_change = 0
        elif x1_change:
            elif event.key == pygame.K_UP:
                x1_change = 0
                y1_change = -snake_block
            elif event.key == pygame.K_DOWN:
                x1_change = 0
                y1_change = snake_block

此代码只允许玩家在水平移动时将其方向更改为 up/down,在垂直移动时更改为 left/right。当玩家向左移动时,y1_change为0,使得if y1_change不被执行。然后玩家不能向左移动(因为他已经这样做了),也不能向右移动(使蛇与自身发生碰撞)。

您需要添加一个额外的条件来检查蛇没有向相反的方向移动。
例如,如果蛇向右移动,则不允许按 LEFT

if not x1_change > 0 and event.key == pygame.K_LEFT:

事件循环:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        game_over = True
    if event.type == pygame.KEYDOWN:
        if not x1_change > 0 and event.key == pygame.K_LEFT: 
            x1_change = -snake_block
            y1_change = 0
        elif not x1_change < 0 and event.key == pygame.K_RIGHT:
            x1_change = snake_block
            y1_change = 0
        elif not y1_change > 0 and event.key == pygame.K_UP:
            x1_change = 0
            y1_change = -snake_block
        elif not y1_change < 0 and event.key == pygame.K_DOWN:
            x1_change = 0
            y1_change = snake_block