Manejo de movimientos no válidos
Parte de la sección Lógica y flujo de control del Journey de Lua de Coddy. Lección 30 de 54.
Desafío
FácilAgrega manejo de errores al sistema de movimiento para proporcionar retroalimentación cuando el jugador ingrese una dirección inválida.
Se te proporcionan las variables startingRoom, gardenRoom y player del desafío anterior.
Modifica el bucle del juego para manejar comandos de movimiento inválidos:
- Conecta las habitaciones usando salidas north/south: establece
startingRoom.exits["north"]comogardenRoom, ygardenRoom.exits["south"]comostartingRoom - Imprime la descripción de la habitación actual del jugador
- Imprime el prompt
"> "(signo de mayor que seguido de un espacio) sin un salto de línea - Lee el comando del usuario usando
io.read() - Verifica si el comando coincide con una clave en la tabla
exitsde la habitación actual - Si coincide, actualiza
player.currentRooma la habitación almacenada en esa salida - Si el comando no coincide con ninguna salida y no es
"quit", imprime"You can't go that way." - Si el comando es
"quit", establecegameRunningenfalsepara salir del bucle
El bucle debe continuar hasta que el usuario escriba "quit".
Formato de salida esperado:
You find yourself in a dusty library filled with ancient books and scrolls.
>
A hidden garden with overgrown plants and a small fountain.
>
You can't go that way.
A hidden garden with overgrown plants and a small fountain.
>
You find yourself in a dusty library filled with ancient books and scrolls.
> Pruébalo tú mismo
-- Room definitions
local startingRoom = {
description = "You find yourself in a dusty library filled with ancient books and scrolls.",
exits = {}
}
local gardenRoom = {
description = "A hidden garden with overgrown plants and a small fountain.",
exits = {}
}
-- Set exits using east / west
startingRoom.exits = {
east = gardenRoom
}
gardenRoom.exits = {
west = startingRoom
}
-- Player
local player = {
currentRoom = startingRoom
}
-- Game loop
local gameRunning = true
while gameRunning do
print(player.currentRoom.description)
io.write("> ")
local command = io.read()
if command == "quit" then
gameRunning = false
elseif player.currentRoom.exits[command] then
player.currentRoom = player.currentRoom.exits[command]
end
end
Todas las lecciones de Lógica y flujo de control
1Iteración avanzada de tablas
Iterar con pairs()Iterar con ipairs()pairs() vs. ipairs()Resumen - Ficha de personaje2Más funciones de la librería table
table.concat()Construcción de tablas y unpack()table.sort()Ordenamiento personalizado con funcionesRepaso - Tabla de puntuaciones altas5Proyecto: Motor de aventura de texto
Configuración del proyecto: La habitaciónConectar habitacionesPractica por tu cuenta: Compilador de Lua online