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) end
Paso 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