pares e ipairs

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

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) do
print(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) do
print(itemValue, itemName)
end

Cuando se ejecute, el código imprimirá lo siguiendo:


You have:
43 Gold Bricks
3 Carrots
2 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) do
print("Winner #" .. playerRank .. " is " .. playerName)
end

Cuando se ejecute, el código imprimirá lo siguiendo:


Winner #1 is Ali
Winner #2 is Ben
Winner #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.

  1. 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,
    }
  2. Debajo del diccionario del menú, agregue un conjunto vacío que se llenará con las elecciones del cliente más tarde.


    -- Sopa del cliente
    local isInSoup = {}
  3. 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 cliente
    local isInSoup = {}
    -- Añade las opciones del cliente a su sopa
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(isInSoup, menuChoice)
    end
    end
  4. Repita 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 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(isInSoup) do
    print(soupIngredient)
    end
    end
  5. En 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 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(isInSoup) do
    print(soupIngredient)
    end
    else
    print("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.

  1. Crea accesorios en el juego para 3 - 5 ingredientes diferentes.
  2. Crea 3 - 5 recetas usando diccionarios similares al de esta lección.
  3. Crea un conjunto que contenga todas las recetas.
  4. Selecciona aleatoriamente una receta y usa un NPC para decirle a los jugadores cuáles son los ingredientes.
  5. Crea un nuevo diccionario para hacer una receta basada en los ingredientes prop que toque el jugador.
  6. Compara la receta del jugador con la receta elegida por el PNJ.
  7. Aumenta el desafío agregando una condición adicional, como un temporizador.