pare e ipairs

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Molti script potrebbero spesso dover passare attraverso dizionari o mappe. Tuttavia, a volte potresti non conoscere l'inizio e la fine di queste strutture di dati. Ad esempio, un dizionario di giocatori potrebbe essere in cambio, o i giocatori potrebbero avere un inventario di matricce di varie dimensioni.

In queste situazioni, puoi usare pairs() e ipairs(). Questi possono essere utilizzati con un for loop per passare attraverso ogni elemento senza punti di inizio e fine conosciuti.

Questo articolo li coprirà, e avrà un esempio pratico di script in cui tracci i comandi dei clienti in un gioco di cucina.

Dizionari e coppie()

pairs() viene utilizzato con dizionari . Un esempio è mostrato qui sotto.


local myDictionary = {
["Blue Player"] = "Ana",
["Gold Player"] = "Binh",
["Red Player"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(key .. " is " .. value)
end

pairs() può essere utilizzato per lavorare con la chiave, il valore o entrambi di un elemento di dizionario. Nel for loop seguente, la prima variabile è la chiave. La seconda variabile è il valore. Il dizionario che si desidera lavorare con viene passato in to pairs() .


local inventory = {
["Gold Bricks"] = 43,
Carrots = 3,
Torches = 2,
}
print("You have:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
end

Quando viene eseguito, il codice Seguendoviene visualizzato:


You have:
43 Gold Bricks
3 Carrots
2 Torches

Matrici e ipairs()

ipairs() viene utilizzato con array . Il "i" in ipairs() sta per "index." Usa ipairs() e array in combinazione con un for loop per lavorare con valori ordinati come le classifiche. Un esempio è sotto.


local players = {"Ali", "Ben", "Cammy"}
for playerRank, playerName in ipairs(players) do
print("Winner #" .. playerRank .. " is " .. playerName)
end

Quando viene eseguito, il codice Seguendoviene visualizzato:


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

Pratica - Simulatore di zuppa del ristorante

Facciamo una zuppa per un simulatore di ristorante in cui i giocatori scegliendo da una lista di possibili ingredienti di zuppa. Gli ingredienti vengono memorizzati come chiavi e i valori inizieranno come falsi in modo che i giocatori ottengano solo ciò che Selezionare.

Usa pairs() per vedere cosa è stato scelto, e poi ipairs() per stampare la lista degli ingredienti.

  1. Crea un nuovo dizionario chiamato menu . Aggiungi 3 - 5 coppie di valore chiave in cui la chiave è l'ingrediente e il valore è falso.


    local menu = {
    cabbage = false,
    beef = false,
    tomato = false,
    noodles = false,
    }
  2. Sotto il menu della dizionaria, aggiungi un array vuoto che verrà riempito con le scelte del cliente in seguito.


    -- Zuppa del cliente
    local selectedIngredients = {}
  3. Usa pairs() per controllare se ciascun ingrediente nel dizionario è contrassegnato vero o falso. Se vero, aggiungi l'ingrediente alla zuppa.


    -- Zuppa del cliente
    local selectedIngredients = {}
    -- Aggiunge le scelte del cliente alla loro zuppa
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(selectedIngredients, menuChoice)
    end
    end
  4. Ripeti l'ordine al cliente. Nel script, codifica il seguente sotto.

    • Controlla se c'è un elemento menu in selectedIngredients . Se sì, stampa "You ordered soup with: " .
    • Usa ipairs() per passare attraverso l' array selectedIngredients e stampare ognuno degli ingredienti.
    • Prova cambiando almeno un elemento del menu a vero.

    -- Stampa l'ordine della zuppa da "selectedIngredients"
    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    end
  5. Nella dichiarazione if che controlla se esiste un menu Articolo, aggiungi una condizione else che dice ai clienti se non sono selezionati ingredienti.


    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

Sfide opzionali

Di seguito sono alcune delle sfide che si applicano utilizzando i paari e gli IPairs in modi diversi. Prova a vedere se riesci a costruire il codice per queste. Sfida : Crea un Waiter NPC invece di utilizzare la finestra di uscita, usa il NPC da Intro To Arrays per creare un Waiter per prendere gli ordini dei clienti. Sfida : Consenti ai giocatori di effettuare ordini Consenti ai giocatori di selezionare un ingrediente toccando una parte fisica come un prompt di prossimità. Per ulteriori informazioni, vedi Prompt di prossimità . Sfida avanzata : Make Me Some Soup Simulator Crea un simulatore di ristorante in cui i giocatori sono i chef! I giocatori dovranno mettere insieme gli ingredienti per corrispondere all'ordine dato dal ristoratore.

  1. Crea oggetti in gioco per 3 - 5 diversi ingredienti.
  2. Crea 3 - 5 ricette usando dizionari simili a quello in questa lezione.
  3. Crea un array che contiene tutte le ricette.
  4. Seleziona casualmente una ricetta e usa un NPC per mostrare ai giocatori quali sono gli ingredienti.
  5. Crea un nuovo dizionario per creare una ricetta in base a quale ingrediente del prop giocatore tocca.
  6. Confronta la ricetta del Giocatorecon la ricetta scelta dall'NPC.
  7. Aumenta la sfida aggiungendo una condizione extra, come un timer.