MÓDULO 1: SCRIPTING

Funciones

Las funciones son uno de los conceptos más importantes en programación. Te permiten reutilizar código, organizar mejor tus scripts y crear sistemas complejos en tus juegos. En Lua, las funciones son "ciudadanos de primera clase", lo que significa que son muy flexibles.


1. Crear una Función Básica

La sintaxis básica de una función en Lua es:

function nombreDeLaFuncion()
  print("¡Este código se puede reutilizar!")
end

-- Llamamos a la función
nombreDeLaFuncion()

¡Importante! En Lua siempre debes cerrar la función con end. No se usan llaves {}.


2. Funciones con Parámetros

Los parámetros permiten que la función reciba información para trabajar.

function atacar(enemigo, daño)
  print("El héroe ataca a " .. enemigo .. " por " .. daño .. " de daño!")
end

atacar("Goblin", 25)
atacar("Dragón", 45)

3. Funciones que Devuelven Valores (return)

Una función puede devolver un resultado usando return.

function calcularDaño(base, multiplicador)
  return base * multiplicador
end

local dañoFinal = calcularDaño(20, 1.5)
print("Daño infligido: " .. dañoFinal)  -- 30

Múltiples retornos: Lua permite devolver varios valores al mismo tiempo.

function obtenerEstadisticas()
  return 120, 80, 35   -- vida, mana, stamina
end

local vida, mana, stamina = obtenerEstadisticas()
print("Vida: " .. vida .. ", Mana: " .. mana)

4. Variables Locales dentro de Funciones

Es muy recomendable usar local dentro de las funciones.

function subirNivel()
  local experiencia = 250
  local nivelActual = 8
  local nuevoNivel = nivelActual + 1
  
  print("¡Subiste al nivel " .. nuevoNivel .. "!")
  return nuevoNivel
end

subirNivel()

Buena práctica: Siempre declara tus variables como local dentro de las funciones para evitar problemas de alcance global.


5. Funciones Anónimas y Funciones como Variables

En Lua puedes guardar funciones dentro de variables o tablas.

local curar = function(cantidad)
  print("El jugador se curó " .. cantidad .. " puntos de vida")
end

curar(50)

Ejemplo práctico en juegos:

local habilidades = {
  atacar = function() print("¡Ataque básico!") end,
  defender = function() print("¡Defensa activada!") end,
  curar = function() print("¡Curación aplicada!") end
}

habilidades.atacar()
habilidades.curar()

6. Parámetros por Defecto (Simulados)

Lua no tiene parámetros por defecto de forma nativa, pero se simulan fácilmente con or.

function lanzarHechizo(nombre, manaCoste)
  manaCoste = manaCoste or 15   -- valor por defecto
  print("Lanzaste " .. nombre .. " por un coste de " .. manaCoste .. " mana")
end

lanzarHechizo("Bola de Fuego")        -- usa 15
lanzarHechizo("Rayo", 30)            -- usa 30

🛠️ Tu Misión

Prueba esto en lua.org:

  1. Crea una función saludar que reciba un nombre y imprima “¡Bienvenido, [nombre]!”
  2. Crea una función calcularDaño que reciba daño base y multiplicador, y devuelva el daño final.
  3. Crea una función recibirDaño que reste daño a la vida actual y devuelva la vida restante.
  4. Crea una función que devuelva múltiples valores: nombre del jugador, nivel y experiencia.
  5. Bonus: Crea una tabla llamada habilidades que contenga 3 funciones anónimas (atacar, defender y curar) y ejecútalas.