Muchos scripts a menudo tendrán que pasar por diccionarios o matrices. Pero a veces, es posible que no sepa el comienzo 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 matrices de diferentes tamaños.
En estas situaciones, puedes usar pairs() y ipairs() . Estos se pueden usar con un bucle para pasar por cada elemento sin puntos de inicio y final conocidos.
Este artículo cubrirá el uso de ellos y tendrá un ejemplo práctico de script donde puedes realizar un seguimiento de los pedidos de un restaurante en un juego de cocina.
Diccionarios y pares ()
pairs() se usa con diccionarios . Un ejemplo se puede ver a continuación.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() se puede usar para trabajar con la clave, el valor o ambos de un elemento de diccionario. En el bucle for a continuación, la primera variable es la clave. La segunda variable es el valor. El diccionario con el que desea trabajar se pasa a pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Cuando se ejecute, el código imprimirá lo siguiendo:
You have:43 Gold Bricks3 Carrots2 Torches
Arrays y ipairs ()
ipairs() se usa con matrices . La "i" en ipairs() significa "index." Use ipairs () y matrices en combinación con un bucle para trabajar con valores ordenados como tablas de clasificación. Un ejemplo está a continuación.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Cuando se ejecute, el código imprimirá lo siguiendo:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Práctica - Simulador de sopa de restaurante
Vamos a hacer algo de sopa para un simulador de restaurante donde los jugadores escojan de una lista de posibles ingredientes de sopa. Los ingredientes se almacenarán como claves, y los valores empezarán como falsos para que los jugadores solo obtengan lo que elegir.
Usa pairs() para ver lo que fue recogido, y luego ipairs() para imprimir la lista de ingredientes.
Crea un nuevo diccionario llamado menu . Añade 3 - 5 pares de valores de clave donde la clave es el ingrediente y el valor es falso.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Debajo del diccionario del menú, agregue un conjunto vacío que se llenará con las elecciones del cliente más tarde.
-- Sopa del clientelocal isInSoup = {}Usa pairs() para comprobar si cada ingrediente del diccionario está marcado como verdadero o falso. Si es cierto, añade el ingrediente a la sopa.
-- Sopa del clientelocal isInSoup = {}-- Añade las opciones del cliente a su sopafor menuChoice, value in pairs(menu) doif value thentable.insert(isInSoup, menuChoice)endendRepita el pedido al cliente. En el script, codifica lo siguiente a continuación.
- Compruebe si hay un elemento de menú en isInSoup . Si es así, imprima "You ordered soup with: " .
- Usa ipairs() para pasar por la matriz isInSoup e imprimir cada ingrediente.
- Prueba cambiando al menos un elemento del menú a true.
-- Imprime el pedido de sopa de "isInSoup"if isInSoup thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(isInSoup) doprint(soupIngredient)endendEn la declaración if que comprueba si hay un objetodel menú, agregue una condición else que le dice a los clientes si no se seleccionaron ingredientes.
if isInSoup thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(isInSoup) doprint(soupIngredient)endelseprint("Nothing was selected. Are you not hungry?")end
Desafíos Opcionales
A continuación hay algunos desafíos que se aplican usando pares y ipairs de diferentes maneras. Intenta ver si puedes construir el código para estos. Desafío : Crea un NPC de camarero En lugar de usar la ventana de salida, usa el NPC de Intro To Arrays para crear un camarero para tomar pedidos de clientes. Desafío : Permitir a los jugadores realizar pedidos Permite a los jugadores seleccionar un ingrediente tocando una parte física, como un aviso de proximidad. Para más información, consulte Avisos de proximidad. Desafío Avanzado : Make Me Some Soup Simulator ¡Crea un simulador de restaurante donde los jugadores sean los chefs! Los jugadores tendrán que juntar ingredientes para que coincidan con el pedido que les dio el camarero.
- Crea accesorios en el juego para 3 - 5 ingredientes diferentes.
- Crea 3 - 5 recetas usando diccionarios similares al de esta lección.
- Crea un conjunto que contenga todas las recetas.
- Selecciona aleatoriamente una receta y usa un NPC para decirle a los jugadores cuáles son los ingredientes.
- Crea un nuevo diccionario para hacer una receta basada en los ingredientes prop que toque el jugador.
- Compara la receta del jugador con la receta elegida por el PNJ.
- Aumenta el desafío agregando una condición adicional, como un temporizador.