En este módulo, aprenderemos a construir un juego simple utilizando Lua. Este ejercicio práctico te permitirá aplicar muchos de los conceptos que has aprendido en los módulos anteriores. Vamos a crear un juego de "Adivina el Número", donde el jugador debe adivinar un número generado aleatoriamente por el programa.
Objetivos del Módulo
- Aplicar conceptos básicos e intermedios de Lua.
- Desarrollar habilidades prácticas en la creación de juegos.
- Aprender a estructurar un proyecto de programación en Lua.
Estructura del Juego
El juego de "Adivina el Número" tendrá la siguiente estructura:
- El programa genera un número aleatorio entre 1 y 100.
- El jugador tiene un número limitado de intentos para adivinar el número.
- El programa proporciona pistas ("más alto" o "más bajo") después de cada intento.
- El juego termina cuando el jugador adivina el número o se queda sin intentos.
Paso 1: Generar un Número Aleatorio
Primero, necesitamos generar un número aleatorio. Lua proporciona la función math.random para este propósito.
-- Generar un número aleatorio entre 1 y 100
local numero_secreto = math.random(1, 100)
print("Número secreto generado (para pruebas): " .. numero_secreto)Paso 2: Configurar el Juego
Vamos a definir algunas variables para configurar el juego, como el número máximo de intentos.
Paso 3: Solicitar Adivinanzas del Jugador
Necesitamos un bucle que permita al jugador hacer adivinanzas hasta que adivine el número o se quede sin intentos.
while intentos_restantes > 0 do
print("Tienes " .. intentos_restantes .. " intentos restantes.")
print("Adivina el número (entre 1 y 100):")
local adivinanza = io.read("*n") -- Leer un número del jugador
if adivinanza == numero_secreto then
print("¡Felicidades! Adivinaste el número.")
break
elseif adivinanza < numero_secreto then
print("El número es más alto.")
else
print("El número es más bajo.")
end
intentos_restantes = intentos_restantes - 1
end
if intentos_restantes == 0 then
print("Lo siento, te has quedado sin intentos. El número era " .. numero_secreto)
endPaso 4: Mejorar la Experiencia del Usuario
Podemos mejorar la experiencia del usuario añadiendo mensajes de bienvenida y despedida, así como validaciones de entrada.
print("¡Bienvenido al juego de Adivina el Número!")
print("Tienes " .. intentos_maximos .. " intentos para adivinar un número entre 1 y 100.")
while intentos_restantes > 0 do
print("Tienes " .. intentos_restantes .. " intentos restantes.")
print("Adivina el número (entre 1 y 100):")
local adivinanza = io.read("*n") -- Leer un número del jugador
if adivinanza < 1 or adivinanza > 100 then
print("Por favor, introduce un número válido entre 1 y 100.")
elseif adivinanza == numero_secreto then
print("¡Felicidades! Adivinaste el número.")
break
elseif adivinanza < numero_secreto then
print("El número es más alto.")
else
print("El número es más bajo.")
end
intentos_restantes = intentos_restantes - 1
end
if intentos_restantes == 0 then
print("Lo siento, te has quedado sin intentos. El número era " .. numero_secreto)
end
print("Gracias por jugar. ¡Hasta la próxima!")Ejercicio Práctico
Modifica el juego para que el jugador pueda elegir el rango de números (por ejemplo, entre 1 y 1000) y el número de intentos disponibles.
Solución Propuesta
print("¡Bienvenido al juego de Adivina el Número!")
print("Por favor, elige el rango de números.")
print("Número mínimo:")
local numero_minimo = io.read("*n")
print("Número máximo:")
local numero_maximo = io.read("*n")
print("¿Cuántos intentos te gustaría tener?")
local intentos_maximos = io.read("*n")
local intentos_restantes = intentos_maximos
local numero_secreto = math.random(numero_minimo, numero_maximo)
print("Número secreto generado (para pruebas): " .. numero_secreto)
print("Tienes " .. intentos_maximos .. " intentos para adivinar un número entre " .. numero_minimo .. " y " .. numero_maximo .. ".")
while intentos_restantes > 0 do
print("Tienes " .. intentos_restantes .. " intentos restantes.")
print("Adivina el número (entre " .. numero_minimo .. " y " .. numero_maximo .. "):")
local adivinanza = io.read("*n") -- Leer un número del jugador
if adivinanza < numero_minimo or adivinanza > numero_maximo then
print("Por favor, introduce un número válido entre " .. numero_minimo .. " y " .. numero_maximo .. ".")
elseif adivinanza == numero_secreto then
print("¡Felicidades! Adivinaste el número.")
break
elseif adivinanza < numero_secreto then
print("El número es más alto.")
else
print("El número es más bajo.")
end
intentos_restantes = intentos_restantes - 1
end
if intentos_restantes == 0 then
print("Lo siento, te has quedado sin intentos. El número era " .. numero_secreto)
end
print("Gracias por jugar. ¡Hasta la próxima!")Conclusión
En este módulo, hemos construido un juego simple de "Adivina el Número" utilizando Lua. Este ejercicio nos ha permitido aplicar conceptos básicos e intermedios de Lua, como la generación de números aleatorios, bucles, estructuras de control y entrada/salida. En el próximo módulo, exploraremos cómo utilizar Lua en motores de juegos para crear experiencias más complejas y visualmente atractivas.
Curso de Programación en Lua
Módulo 1: Introducción a Lua
Módulo 2: Conceptos Básicos
Módulo 3: Conceptos Intermedios
Módulo 4: Conceptos Avanzados
- Corutinas
- Programación Orientada a Objetos en Lua
- Técnicas de Depuración
- Optimización del Rendimiento
- Uso de la API C de Lua
Módulo 5: Aplicaciones Prácticas
- Construcción de un Juego Simple
- Scripting en Motores de Juegos
- Automatización de Tareas con Lua
- Integración de Lua con Otros Lenguajes
