es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo deshabilitar una tecla específica cuando se presiona otra tecla en pygame.

Estoy trabajando en mi tarea universitaria y me han dado la tarea de hacer el juego de la serpiente en Python utilizando pygame. He hecho el juego pero me enfrento a un problema. El problema es que si presiono la tecla derecha y mi serpiente se está moviendo hacia la derecha y luego presiono la tecla izquierda, la serpiente se choca a sí misma y pierdo el juego.

Lo que quiero es que si mi serpiente se está moviendo en una dirección determinada, por ejemplo hacia la derecha, la tecla izquierda no debería funcionar, es decir, se desactivaría.
He estado tratando de resolver el problema desde hace 2 días pero no encuentro nada, cualquier ayuda será apreciada. Gracias.

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
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes agregar una variable que almacene la dirección actual de la serpiente. Luego, antes de actualizar la dirección de la serpiente, puedes verificar si la nueva dirección es opuesta a la dirección actual. Si lo es, entonces no actualices la dirección. Aquí tienes un ejemplo de código:

    # definir variables
    current_direction = "DERECHA"  # comenzar con dirección hacia la derecha
    
    # dentro del bucle del juego
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_IZQUIERDA and current_direction != "DERECHA":  # verificar si es dirección opuesta
                x1_change = -snake_block
                y1_change = 0
                current_direction = "IZQUIERDA"
            elif event.key == pygame.K_DERECHA and current_direction != "IZQUIERDA":
                x1_change = snake_block
                y1_change = 0
                current_direction = "DERECHA"
            elif event.key == pygame.K_ARRIBA and current_direction != "ABAJO":
                x1_change = 0
                y1_change = -snake_block
                current_direction = "ARRIBA"
            elif event.key == pygame.K_ABAJO and current_direction != "ARRIBA":
                x1_change = 0
                y1_change = snake_block
                current_direction = "ABAJO"
    

    En este ejemplo, se verifica si la nueva dirección es opuesta a current_direction antes de actualizarla. Si no es opuesta, entonces actualizamos current_direction y x1_change, y1_change correspondientemente. De lo contrario, no actualizamos nada y la serpiente seguirá moviéndose en la dirección actual.

Comments are closed.