Muchos scripts a menudo necesitarán recorrer diccionarios o arreglos. Pero a veces, es posible que no conozcas el inicio y el final de estas estructuras de datos. Por ejemplo, un diccionario de jugadores puede estar cambiando, o los jugadores pueden tener un inventario de arreglos de tamaños variables.
En estas situaciones, puedes usar pares() y ipares(). Estos pueden ser utilizados con un bucle for para recorrer cada elemento sin puntos de inicio y final conocidos.
Este artículo cubrirá su uso y tendrá un ejemplo práctico de un script donde se rastrean los pedidos de un restaurante en un juego de cocina.
Diccionarios y pares()
pares() se utiliza con diccionarios. Un ejemplo se muestra a continuación.
local miDiccionario = {["Jugador Azul"] = "Ana",["Jugador Dorado"] = "Binh",["Jugador Rojo"] = "Cate",}for clave, valor in pairs(miDiccionario) doprint(clave .. " es " .. valor)end
pares() puede ser utilizado para trabajar con la clave de un elemento de diccionario, valor o ambos. En el bucle for a continuación, la primera variable es la clave. La segunda variable es el valor. El diccionario con el que deseas trabajar se pasa a pares().
local inventario = {["Ladrillos Dorados"] = 43,Zanahorias = 3,Antorchas = 2,}print("Tienes:")for nombreElemento, valorElemento in pairs(inventario) doprint(valorElemento, nombreElemento)end
Cuando se ejecuta, el código imprimirá lo siguiente:
Tienes:43 Ladrillos Dorados3 Zanahorias2 Antorchas
Arreglos y ipares()
ipares() se utiliza con arreglos. La "i" en ipares() significa "índice". Usa ipares() y arreglos en combinación con un bucle for para trabajar con valores ordenados como tableros de lideres. Un ejemplo se muestra a continuación.
local jugadores = {"Ali", "Ben", "Cammy"}for rangoJugador, nombreJugador in ipairs(jugadores) doprint("Ganador #" .. rangoJugador .. " es " .. nombreJugador)end
Cuando se ejecuta, el código imprimirá lo siguiente:
Ganador #1 es AliGanador #2 es BenGanador #3 es Cammy
Práctica - Simulador de Sopa de Restaurante
Hagamos un poco de sopa para un simulador de restaurante donde los jugadores eligen de una lista de posibles ingredientes para la sopa. Los ingredientes se almacenarán como claves, y los valores comenzarán como falsos para que los jugadores solo reciban lo que seleccionen.
Usa pares() para ver lo que fue seleccionado, y luego ipares() para imprimir la lista de ingredientes.
Crea un nuevo diccionario llamado menú. Agrega de 3 a 5 pares clave-valor donde la clave es el ingrediente y el valor es falso.
local menú = {repollo = false,carne = false,tomate = false,fideos = false,}Debajo del diccionario del menú, agrega un arreglo vacío que se llenará con las elecciones del cliente más tarde.
-- Sopa del clientelocal ingredientesSeleccionados = {}Usa pares() para verificar si cada ingrediente en el diccionario está marcado como verdadero o falso. Si es verdadero, agrega el ingrediente a la sopa.
-- Sopa del clientelocal ingredientesSeleccionados = {}-- Agrega las elecciones del cliente a su sopafor elecciónMenú, valor in pairs(menú) doif valor thentable.insert(ingredientesSeleccionados, elecciónMenú)endendRepite el pedido al cliente. En el script, codifica lo siguiente a continuación.
- Verifica si hay un elemento de menú en ingredientesSeleccionados. Si es así, imprime "Pediste sopa con: ".
- Usa ipares() para recorrer el arreglo ingredientesSeleccionados e imprimir cada ingrediente.
- Prueba cambiando al menos un elemento del menú a verdadero.
-- Imprime el pedido de sopa de "ingredientesSeleccionados"if #ingredientesSeleccionados > 0 thenprint("Pediste sopa con: ")for índice, ingredienteSopa in ipairs(ingredientesSeleccionados) doprint(ingredienteSopa)endendEn la declaración if que verifica si hay un elemento de menú, agrega una condición else que le dice a los clientes si no se seleccionaron ingredientes.
if #ingredientesSeleccionados > 0 thenprint("Pediste sopa con: ")for índice, ingredienteSopa in ipairs(ingredientesSeleccionados) doprint(ingredienteSopa)endelseprint("No se eligió nada. ¿No tienes hambre?")end
Desafíos opcionales
A continuación, se presentan algunos desafíos que aplican el uso de pares e ipares de diferentes maneras. Intenta ver si puedes construir el código para estos.
Desafío: Crear un NPC de Camarero En lugar de usar la ventana de Salida, usa el NPC de Introducción a los Arreglos para crear un camarero que tome los pedidos de los clientes.
Desafío: Permitir que los Jugadores Hagan Pedidos Permite que los jugadores seleccionen un ingrediente tocando una parte física como un aviso de proximidad. Para obtener más información, consulta Avisos de Proximidad.
Desafío Avanzado: Crea un Simulador de Sopa Crea un simulador de restaurante donde los jugadores son los chefs. ¡Los jugadores tendrán que reunir ingredientes para coincidir con el pedido que les da el camarero!
- Crea props dentro del juego para 3 a 5 ingredientes diferentes.
- Crea 3 a 5 recetas usando diccionarios similares a los de esta lección.
- Crea un arreglo que contenga todas las recetas.
- Selecciona una receta al azar y usa un NPC para decir a los jugadores cuáles son los ingredientes.
- Crea un nuevo diccionario para hacer una receta basada en los ingredientes de props que toca el jugador.
- Compara la receta del jugador con la receta elegida por el NPC.
- Aumenta la dificultad agregando una condición extra, como un temporizador.