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:

  1. El programa genera un número aleatorio entre 1 y 100.
  2. El jugador tiene un número limitado de intentos para adivinar el número.
  3. El programa proporciona pistas ("más alto" o "más bajo") después de cada intento.
  4. 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.

local intentos_maximos = 10
local intentos_restantes = intentos_maximos

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.

© Copyright 2024. Todos los derechos reservados