如何在 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
我正在完成我的大学作业,他们给了我一个任务,让我在 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