parejas y 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 necesitarán pasar por diccionarios o matices. Pero a veces, puede que no sepas 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 matices de tamaños varios.

En estas situaciones, puede usar pairs() y ipairs() . Estos se pueden usar con un for loop para pasar por cada elemento sin puntos de inicio y fin conocidos.

Este artículo cubrirá su uso, y tendrá un ejemplo de script práctico en el que rastreará los pedidos de restaurantes en un juego de cocina.

Diccionarios y parejas()

pairs() se usa con diccionarios . Un ejemplo se ve 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 for de abajo, 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

Al ejecutarse, el código imprimirá lo siguiendo:


You have:
43 Gold Bricks
3 Carrots
2 Torches

Matrices y ipairs()

ipairs() se usa con arrays . El "i" en ipairs() significa "索引". Usa ipairs() y arrays en combinación con un for loop 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

Al ejecutarse, el código imprimirá lo siguiendo:


Winner #1 is Ali
Winner #2 is Ben
Winner #3 is Cammy

Práctica - Restaurant Soup Simulator

Hagamos un poco de sopa para un simulador de restaurante donde los jugadores eligen de una lista de posibles ingredientes de sopa. Los ingredientes se almacenarán como claves, y los valores comenzarán con falso para que los jugadores solo obtengan lo que elegir.

Usa pairs() para ver qué fue elegido, y luego ipairs() para imprimir la lista de ingredientes.

  1. Crea un nuevo diccionario llamado menu . Añade 3 - 5 pares de valores clave donde la clave es el ingrediente y el valor es falso.


    local menu = {
    cabbage = false,
    beef = false,
    tomato = false,
    noodles = false,
    }
  2. Bajo el diccionario del menú, agregue un arrayo vacío que se llenará con las opciones del cliente más tarde.


    -- Sopa del cliente
    local selectedIngredients = {}
  3. Use pairs() para verificar si cada ingrediente en el diccionario está marcado como verdadero o falso. Si es así, agrégalo a la sopa.


    -- Sopa del cliente
    local selectedIngredients = {}
    -- Añade las opciones del cliente a su sopa
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(selectedIngredients, menuChoice)
    end
    end
  4. Repita el orden a el cliente. En el script, cód. el siguiente abajo.

    • Compruebe si hay un elemento de menú en selectedIngredients . Si es así, imprima "You ordered soup with: " .
    • Usa ipairs() para pasar por el arreglo selectedIngredients y imprimir cada ingrediente.
    • Prueba cambiando al menos un artículo de menú a verdadero.

    -- Imprime el pedido de sopa de "ingredientes seleccionados"
    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    end
  5. En la declaración if que comprueba si hay un objetode menú, agregue una condición else que le dice a los clientes si no se seleccionaron ingredientes.


    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) 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 a diferentes usando pares y ipairs de diferentes maneras. Intenta ver si puedes construir el código para estos. Desafío : Crear un NPC de Waiter en lugar de usar la ventana de salida, usar el NPC de Intro To Arrays para crear un Waiter para tomar pedidos de clientes. Desafío : Permite a los jugadores colocar pedidos Permite a los jugadores seleccionar un ingrediente tocando una parte física, como un mensaje de proximidad. Para obtener más información, see Mensajes de proximidad . Desafío avanzado : Make Me Some Soup Simulator Crea un simulador de restaurante donde los jugadores son los chefs! Los jugadores tendrán que poner los ingredientes a juego para que coincida con el pedido dado por el camarero.

  1. Crea propiedades de juego para 3 - 5 ingredientes diferentes.
  2. Crea 3 - 5 recetas usando diccionarios similares al que se muestra en esta lección.
  3. Cree un array que almacene todas las recetas.
  4. Seleccione aleatoriamente una receta y use un NPC para decir a los jugadores qué son los ingredientes.
  5. Crea un nuevo diccionario para hacer una receta basada en qué ingredientes del prop el jugador toca.
  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.