Saltar la navegación

4.1. Control por teclado

Captura de teclas

En Pygame, es posible detectar cuándo el usuario presiona o suelta una tecla utilizando los eventos KEYDOWN y KEYUP. Estos eventos son detectados dentro del bucle de eventos del juego, permitiendo realizar diferentes acciones según la tecla que se haya interactuado.

El evento KEYDOWN ocurre cuando el usuario presiona una tecla, mientras que KEYUP sucede cuando la tecla se libera. Estos eventos se pueden capturar dentro de un bucle como el siguiente:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_SPACE:
            print("Tecla ESPACIO presionada")
    elif event.type == pygame.KEYUP:
        if event.key == pygame.K_SPACE:
            print("Tecla ESPACIO soltada")

En este ejemplo, el programa detecta cuándo el jugador presiona y suelta la tecla ESPACIO. Cada vez que se produce uno de estos eventos, el juego puede reaccionar, por ejemplo, haciendo que el personaje salte cuando la tecla se presiona.

Teclas específicas

En Pygame, además de detectar cuándo se presiona o suelta una tecla, también es posible verificar si una tecla específica ha sido pulsada. Cada tecla en Pygame está representada por una constante, como K_UP para la flecha hacia arriba, K_DOWN para la flecha hacia abajo, o K_SPACE para la barra espaciadora.

Para comprobar si el usuario ha presionado una tecla en particular, se usa event.key dentro del bucle de eventos. Aquí tienes un ejemplo de cómo detectar si se presionan las teclas de flecha o la barra espaciadora:

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_UP:
            print("Tecla ARRIBA presionada")
        elif event.key == pygame.K_DOWN:
            print("Tecla ABAJO presionada")
        elif event.key == pygame.K_SPACE:
            print("Tecla ESPACIO presionada")

En este código, cuando el jugador presiona una tecla específica como ARRIBA, ABAJO o ESPACIO, el programa responde mostrando un mensaje en la consola. Esto permite realizar acciones específicas dentro del juego, como mover un personaje o saltar.

Mover un personaje con el teclado

Moviendo un Personaje con el Teclado

Una de las funcionalidades más comunes en los videojuegos es permitir que el jugador mueva un personaje u objeto en pantalla usando las teclas del teclado. En Pygame, esto se puede lograr capturando los eventos de las teclas de dirección (flechas) y actualizando las coordenadas del personaje en función de la tecla presionada.

El siguiente ejemplo muestra cómo se puede mover un personaje en las direcciones arriba, abajo, izquierda y derecha:

import pygame

# Inicialización de Pygame
pygame.init()

# Dimensiones de la ventana
screen = pygame.display.set_mode((800, 600))

# Posición inicial del personaje
x, y = 400, 300
velocidad = 5

# Bucle principal
running = True
while running:
    # Captura de eventos
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Captura de teclas presionadas
    keys = pygame.key.get_pressed()

    # Movimiento del personaje
    if keys[pygame.K_LEFT]:
        x -= velocidad
    if keys[pygame.K_RIGHT]:
        x += velocidad
    if keys[pygame.K_UP]:
        y -= velocidad
    if keys[pygame.K_DOWN]:
        y += velocidad

    # Dibuja la pantalla y el personaje
    screen.fill((0, 0, 0))  # Fondo negro
    pygame.draw.rect(screen, (0, 255, 0), (x, y, 50, 50))  # Personaje como un cuadrado verde
    pygame.display.flip()  # Actualiza la pantalla

    pygame.time.delay(30)  # Pausa para controlar la velocidad del juego

pygame.quit()

En este ejemplo, el personaje es representado por un cuadrado verde que puede moverse por la pantalla en respuesta a las teclas de flecha. Cuando se presiona la flecha izquierda (K_LEFT), la posición x del personaje disminuye, moviéndolo hacia la izquierda. De manera similar, las otras teclas permiten mover el personaje en las otras direcciones.

Este es un método básico para mover un personaje, y puede expandirse para agregar colisiones, límites de movimiento o animaciones.

Comprensión del código (mover personaje con teclado)

Pregunta

¿Cuál es la finalidad de pygame.time.delay(30)() en el código?

Respuestas

Controlar la velocidad de fotogramas del juego haciendo una pausa de 30 milisegundos en cada iteración del bucle.

Incrementar la velocidad del personaje en 30 píxeles.

Finalizar el bucle de eventos después de 30 segundos.

Pregunta

¿Qué ocurre cuando el usuario presiona la tecla de flecha izquierda (K_LEFT)?

Respuestas

La velocidad del personaje aumenta, haciéndolo más rápido.

La posición x del personaje disminuye, moviéndolo hacia la izquierda.

La posición x del personaje aumenta, moviéndolo hacia la izquierda.

Pregunta

¿Cómo puedes hacer que el personaje se mueva en diagonal?

Respuestas

No se puede

Aprentando a la vez las teclas de izquierda y derecha.

Apretando a la vez una tecla de movimiento vertical (arriba o abajo) y otra de movimiento horizontal (izquierda o derecha).

Habilitar JavaScript

Actividad de síntesis

Quieres crear un juego tipo Space invaders o Galaxian, donde le sprite personaje del gameplayer se sitúa en la parte inferior de la pantalla y sólo se puede mover de izquierda a derecha y viceversa.

En este actividad, deberás crear un personaje que sea un cuadrado rojo ubicado en la base de la pantalla. El personaje debe moverse hacia la izquierda al presionar la tecla Z y hacia la derecha al presionar la tecla C.

Sigue los siguientes pasos para completar la actividad:

  1. Inicializa Pygame y crea una ventana de 800 píxeles de ancho y 600 píxeles de alto.
  2. Dibuja un cuadrado rojo de 50x50 píxeles que comience en la base de la pantalla.
  3. Utiliza las teclas Z para mover el cuadrado hacia la izquierda y C para moverlo hacia la derecha.
  4. El cuadrado no debe moverse fuera de la ventana.

Licencia: licencia propietaria intelectual

Creado con eXeLearning (Ventana nueva)