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) doprint(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) doprint(itemValue, itemName)end
Quando viene eseguito, il codice Seguendoviene visualizzato:
You have:43 Gold Bricks3 Carrots2 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) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Quando viene eseguito, il codice Seguendoviene visualizzato:
Winner #1 is AliWinner #2 is BenWinner #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.
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,}Sotto il menu della dizionaria, aggiungi un array vuoto che verrà riempito con le scelte del cliente in seguito.
-- Zuppa del clientelocal selectedIngredients = {}Usa pairs() per controllare se ciascun ingrediente nel dizionario è contrassegnato vero o falso. Se vero, aggiungi l'ingrediente alla zuppa.
-- Zuppa del clientelocal selectedIngredients = {}-- Aggiunge le scelte del cliente alla loro zuppafor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendRipeti 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 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendNella 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 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("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.
- Crea oggetti in gioco per 3 - 5 diversi ingredienti.
- Crea 3 - 5 ricette usando dizionari simili a quello in questa lezione.
- Crea un array che contiene tutte le ricette.
- Seleziona casualmente una ricetta e usa un NPC per mostrare ai giocatori quali sono gli ingredienti.
- Crea un nuovo dizionario per creare una ricetta in base a quale ingrediente del prop giocatore tocca.
- Confronta la ricetta del Giocatorecon la ricetta scelta dall'NPC.
- Aumenta la sfida aggiungendo una condizione extra, come un timer.