Molti script dovranno spesso passare attraverso dizionari o array.Ma a volte, potresti non conoscere l'inizio e la fine di queste strutture di dati.Ad esempio, un dizionario di giocatori può essere in via di cambiamento, o i giocatori possono avere un inventario di dimensioni variabili di array.
In queste situazioni, puoi usare pairs() e ipairs().Questi possono essere utilizzati con un ciclo while per passare attraverso ogni elemento senza punti di inizio e fine noti.
Questo articolo tratterà il loro uso e avrà un esempio di script pratico in cui tracciate gli ordini del ristorante in un Giocodi cucina.
Dizionari e pairs()
pairs() è utilizzato con dizionari . Un esempio è visto 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 gli elementi di un dizionario.Nel ciclo for sotto, la prima variabile è la chiave.La seconda variabile è il valore.Il dizionario con cui vuoi lavorare viene passato a 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 stamperà quanto Seguendo:
You have:43 Gold Bricks3 Carrots2 Torches
Array e ipairs()
ipairs() viene utilizzato con array .Il "i" in ipairs() sta per "index." Usa ipairs() e array in combinazione con un ciclo for per lavorare con valori ordinati come le classifiche.Un esempio è qui sotto.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Quando viene eseguito, il codice stamperà quanto Seguendo:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Pratica - Simulatore di zuppa del ristorante
Creiamo una zuppa per un simulatore di ristorante in cui i giocatori scelgono da una lista di possibili ingredienti di zuppa.Gli ingredienti verranno memorizzati come chiavi e i valori inizieranno come falsi in modo che i giocatori ottengano solo ciò che Selezionare.
Usa pairs() per vedere ciò che è stato selezionato, e poi ipairs() per stampare l'elenco degli ingredienti.
Crea un nuovo dizionario chiamato menu . Aggiungi 3 - 5 coppie chiave-valore in cui la chiave è l'ingrediente e il valore è falso.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Sotto il dizionario del menu, aggiungi un array vuoto che verrà riempito con le scelte del cliente in seguito.
-- Zuppa del clientelocal selectedIngredients = {}Usa pairs() per controllare se ogni ingrediente nel dizionario è contrassegnato vero o falso. Se è vero, aggiungi l'ingrediente alla zuppa.
-- Zuppa del clientelocal selectedIngredients = {}-- Aggiunge le scelte del cliente alla sua zuppafor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendRipeti l'ordine al cliente. Nel script, codifica quanto segue.
- Verifica se c'è un elemento del menu in selectedIngredients . Se è così, stampa "You ordered soup with: " .
- Usa ipairs() per passare attraverso l'array selectedIngredients e stampare ogni ingrediente.
- Prova cambiando almeno un elemento del menu in vero.
-- Stampa l'ordine della zuppa da "ingredienti selezionati"if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendNella dichiarazione if che controlla se esiste un Articolomenu, aggiungi una condizione else che informa i clienti se non sono stati 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 riportate alcune sfide che si applicano utilizzando coppie e ipari in modi diversi. Prova a vedere se puoi costruire il codice per questi. Sfida : Crea un NPC Server invece di utilizzare la finestra di output, usa il NPC da Intro To Arrays per creare un server 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 cuochi! I giocatori dovranno mettere insieme gli ingredienti per corrispondere all'ordine dato loro dal cameriere.
- 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 dire ai giocatori quali sono gli ingredienti.
- Crea un nuovo dizionario per creare una ricetta basata su quali ingredienti del proprio tocco il giocatore tocca.
- Confronta la ricetta del Giocatorecon la ricetta scelta dall'NPC.
- Aumenta la sfida aggiungendo una condizione extra, come un timer.