Saltar la navegación

6.2. Moverse dentro del laberinto

Movimiento del personaje

En este apartado se propone un código que mueve al jugador en un laberinto usando las teclas de dirección.

Este código permite que el jugador se mueva en cualquier dirección usando las teclas de flecha y actualiza el laberinto en consecuencia. Si el jugador se mueve a una celda con un valor de 3, el juego termina y muestra la pantalla de victoria.

Desglosaremos cada parte del código para entender su funcionamiento.

1. Definición de la Función

def move_player(key):

Esta línea define una función llamada move_player que se ejecutará cuando se presione una tecla. La key indica qué tecla se ha presionado.

2. Obtener la Posición del Jugador

x, y = get_player_position()

Se obtiene la posición actual del jugador en el laberinto y se almacena en las variables x y y.

3. Mover el Jugador hacia Arriba

Este bloque de código mueve al jugador hacia arriba si la celda está vacía.

Si la celda contiene la meta del laberinto, se muestra la pantalla de victoria.

if key == pygame.K_UP:
if laberinto[x - 1][y] == 0:
laberinto[x][y] = 0
laberinto[x - 1][y] = 2
elif laberinto[x - 1][y] == 3:
show_victory_screen()

Este bloque de código permite mover al jugador hacia arriba cuando se presiona la flecha hacia arriba (UP). Vamos a explicarlo paso a paso.

Línea 1: Detectar la tecla presionada

if key == pygame.K_UP:

En esta línea, el programa está verificando si el jugador presionó la tecla de flecha hacia arriba (pygame.K_UP). Si es así, ejecutará las instrucciones que vienen a continuación.

Línea 2: Verificar si la celda de arriba está libre

if laberinto[x - 1][y] == 0:

En esta línea, el código comprueba si la celda justo arriba del jugador está libre. El valor de x - 1 representa la posición de la celda de arriba, y el valor 0 indica que está vacía (sin obstáculos).

Línea 3: Marcar la posición actual como vacía

laberinto[x][y] = 0

Si la celda de arriba está vacía, el programa marca la posición actual del jugador (x, y) como vacía (asigna el valor 0), lo que significa que el jugador ya no está en esa casilla.

Línea 4: Mover al jugador a la celda de arriba

laberinto[x - 1][y] = 2

Aquí el jugador se mueve a la celda de arriba (x - 1, y), y la casilla se marca con el valor 2, que representa al jugador en el laberinto.

Línea 5: Verificar si el jugador ha llegado a la meta

elif laberinto[x - 1][y] == 3:

Si la celda de arriba no está vacía pero contiene un valor 3, significa que el jugador ha llegado a la meta del laberinto. Esto activará la pantalla de victoria.

Línea 6: Mostrar la pantalla de victoria

show_victory_screen()

Esta línea llama a la función show_victory_screen(), que mostrará una pantalla de victoria, indicando que el jugador ha ganado el juego.

4. Mover el Jugador hacia Abajo

elif key == pygame.K_DOWN:
if laberinto[x + 1][y] == 0:
laberinto[x][y] = 0
laberinto[x + 1][y] = 2
elif laberinto[x + 1][y] == 3:
show_victory_screen()

Si se presiona la flecha hacia abajo:

  • Se verifica si la celda debajo del jugador (en x + 1) está libre.
  • Si está libre, el jugador se mueve hacia abajo.
  • Si la celda contiene un valor 3, se muestra la pantalla de victoria.

5. Mover el Jugador hacia la Izquierda

elif key == pygame.K_LEFT:
if laberinto[x][y - 1] == 0:
laberinto[x][y] = 0
laberinto[x][y - 1] = 2
elif laberinto[x][y - 1] == 3:
show_victory_screen()

Si se presiona la flecha hacia la izquierda:

  • Se verifica si la celda a la izquierda del jugador (en y - 1) está libre.
  • Si está libre, el jugador se mueve a la izquierda.
  • Si la celda contiene un valor 3, se muestra la pantalla de victoria.

6. Mover el Jugador hacia la Derecha

elif key == pygame.K_RIGHT:
if laberinto[x][y + 1] == 0:
laberinto[x][y] = 0
laberinto[x][y + 1] = 2
elif laberinto[x][y + 1] == 3:
show_victory_screen()

Si se presiona la flecha hacia la derecha:

  • Se verifica si la celda a la derecha del jugador (en y + 1) está libre.
  • Si está libre, el jugador se mueve hacia la derecha.
  • Si la celda contiene un valor 3, se muestra la pantalla de victoria.

Obtener la Posición del Jugador

El siguiente código se encarga de encontrar y devolver la posición actual del jugador en el laberinto. la función get_player_position recorre todas las celdas del laberinto hasta encontrar la celda que contiene al jugador (valor 2) y devuelve las coordenadas de esa celda.

Vamos a desglosarlo línea por línea para entender su funcionamiento.

Línea 1: Definición de la función

def get_player_position():

Esta línea define una función llamada get_player_position. La función no recibe ningún argumento y su propósito es devolver las coordenadas del jugador en el laberinto.

Línea 2: Iniciar un bucle sobre las filas

for row in range(len(laberinto)):

En esta línea, se inicia un bucle que recorre todas las filas del laberinto. La función len(laberinto) devuelve el número total de filas en la matriz del laberinto, y range() genera una secuencia de índices para cada fila.

Línea 3: Iniciar un bucle sobre las columnas

for col in range(len(laberinto[0])):

Dentro del primer bucle, se inicia otro bucle que recorre todas las columnas de la fila actual. La función len(laberinto[0]) devuelve el número total de columnas en la matriz del laberinto, y range() genera una secuencia de índices para cada columna.

Línea 4: Verificar si la celda contiene al jugador

if laberinto[row][col] == 2:

En esta línea, se verifica si el valor en la celda actual (laberinto[row][col]) es igual a 2. El valor 2 representa la posición del jugador en el laberinto.

Línea 5: Devolver la posición del jugador

return row, col

Si la celda contiene el valor 2, se devuelve la posición del jugador como una tupla de coordenadas (row, col). Esto termina la ejecución de la función y proporciona la posición del jugador.

Licencia: licencia propietaria intelectual

Creado con eXeLearning (Ventana nueva)