MÓDULO 1: SCRIPTING

Tablas (Arrays)

Las tablas son la estructura de datos más importante en Lua. Son como cajas mágicas que pueden guardar múltiples valores: listas de enemigos, inventarios, estadísticas de jugadores... ¡Todo cabe en una tabla!


1. Crear una Tabla Simple (Array)

Una tabla es una colección de valores entre llaves {}.

-- Tabla con números
local numeros = {1, 2, 3, 4, 5}

-- Tabla con textos
local enemigos = {"Goblin", "Orco", "Dragón"}

-- Tabla mixta
local inventario = {"Espada", 50, "Poción", 100}

2. Acceder a Elementos de una Tabla

Usa el índice (posición) para acceder. En Lua, los índices comienzan en 1, no en 0.

local enemigos = {"Goblin", "Orco", "Dragón"}

print(enemigos) -- Goblin
print(enemigos) -- Orco
print(enemigos) -- Dragón

-- Modificar un elemento
enemigos = "Goblin Fuerte"
print(enemigos) -- Goblin Fuerte

¡Importante! En Lua, los índices comienzan en 1. En JavaScript comienzan en 0. ¡No olvides esto!


3. Agregar y Eliminar Elementos

Puedes agregar elementos a una tabla dinámicamente.

local inventario = {"Espada", "Escudo"}

-- Agregar un elemento al final
table.insert(inventario, "Poción")
print(inventario) -- Poción

-- Agregar en una posición específica
table.insert(inventario, 2, "Anillo")
-- Ahora: Espada, Anillo, Escudo, Poción

-- Eliminar un elemento
table.remove(inventario, 2)
-- Ahora: Espada, Escudo, Poción

4. Obtener la Longitud de una Tabla

Usa el operador # para saber cuántos elementos tiene una tabla.

local enemigos = {"Goblin", "Orco", "Dragón"}

print(#enemigos) -- 3

-- Útil en bucles
for i = 1, #enemigos do
  print(enemigos[i])
end

5. Tablas como Diccionarios (Clave-Valor)

Las tablas también pueden almacenar pares clave-valor, como objetos en JavaScript.

local jugador = {
  nombre = "Héroe",
  nivel = 5,
  vida = 100,
  mana = 50
}

print(jugador.nombre) -- Héroe
print(jugador["nivel"]) -- 5

-- Modificar valores
jugador.vida = 80
jugador["mana"] = 30
-- Ejemplo más complejo: Enemigo con propiedades
local goblin = {
  nombre = "Goblin",
  vida = 30,
  daño = 10,
  oro = 50,
  atacar = function()
    print("¡El Goblin ataca!")
  end
}

print(goblin.nombre) -- Goblin
goblin.atacar() -- ¡El Goblin ataca!

6. Recorrer Tablas

Hay varias formas de recorrer una tabla.

local inventario = {"Espada", "Escudo", "Poción"}

-- Forma 1: Con índices numéricos
for i = 1, #inventario do
  print(i .. ". " .. inventario[i])
end

-- Forma 2: Con ipairs (más seguro)
for indice, item in ipairs(inventario) do
  print(indice .. ". " .. item)
end
-- Recorrer tabla de diccionario
local jugador = {
  nombre = "Héroe",
  nivel = 5,
  vida = 100
}

for clave, valor in pairs(jugador) do
  print(clave .. ": " .. valor)
end

7. Funciones Útiles para Tablas

Lua tiene funciones especiales para trabajar con tablas.

local numeros = {3, 1, 4, 1, 5}

-- Ordenar
table.sort(numeros)
print(numeros) -- 1

-- Concatenar (unir elementos en un string)
local items = {"Espada", "Escudo", "Poción"}
local lista = table.concat(items, ", ")
print(lista) -- Espada, Escudo, Poción

🛠️ Tu Misión

Prueba esto en lua.org:

  1. Crea una tabla llamada enemigos con 3 nombres de enemigos.
  2. Accede al primer y tercer enemigo e imprímelos.
  3. Usa table.insert para agregar un nuevo enemigo.
  4. Usa # para imprimir cuántos enemigos hay.
  5. Recorre la tabla con for ... in ipairs e imprime cada enemigo.
  6. Crea una tabla de diccionario con datos de un jugador (nombre, nivel, vida, mana).
  7. Bonus: Crea una tabla de jugadores donde cada jugador es una tabla con sus propiedades.
← Lección Anterior