Viele Skripte müssen oft durch Dictionaries oder Arrays gehen. Aber manchmal wissen Sie möglicherweise nicht, wo der Anfang und das Ende dieser Datenstrukturen sind. Zum Beispiel kann sich ein Dictionary von Spielern ändern, oder Spieler haben ein Array-Inventar unterschiedlicher Grössen.
In diesen Situationen können Sie pairs() und ipairs() verwenden. Diese können mit einer for-Schleife verwendet werden, um jedes Element ohne bekannte Start- und Endpunkte zu durchlaufen.
Dieser Artikel behandelt die Verwendung dieser Funktionen und enthält ein praktisches Skriptbeispiel, in dem Sie Restaurantbestellungen in einem Kochspiel verfolgen.
Dictionaries und pairs()
pairs() wird mit Dictionaries verwendet. Ein Beispiel ist unten zu sehen.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " ist " .. value)end
pairs() kann verwendet werden, um mit dem Schlüssel, dem Wert oder beidem eines Dictionary-Elements zu arbeiten. In der folgenden for-Schleife ist die erste Variable der Schlüssel. Die zweite Variable ist der Wert. Das Dictionary, mit dem Sie arbeiten möchten, wird an pairs() übergeben.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("Du hast:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Wenn der Code ausgeführt wird, wird Folgendes ausgegeben:
Du hast:43 Gold Bricks3 Carrots2 Torches
Arrays und ipairs()
ipairs() wird mit Arrays verwendet. Das "i" in ipairs() steht für "Index". Verwenden Sie ipairs() und Arrays in Kombination mit einer for-Schleife, um mit geordneten Werten wie Bestenlisten zu arbeiten. Ein Beispiel ist unten.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Gewinner #" .. playerRank .. " ist " .. playerName)end
Wenn der Code ausgeführt wird, wird Folgendes ausgegeben:
Gewinner #1 ist AliGewinner #2 ist BenGewinner #3 ist Cammy
Übung - Restaurant-Suppen-Simulator
Lass uns etwas Suppe für einen Restaurantsimulator machen, bei dem die Spieler aus einer Liste möglicher Suppenzutaten auswählen. Die Zutaten werden als Schlüssel gespeichert, und die Werte beginnen als false, sodass die Spieler nur das erhalten, was sie auswählen.
Verwenden Sie pairs(), um zu sehen, was ausgewählt wurde, und dann ipairs(), um die Liste der Zutaten auszudrucken.
Erstellen Sie ein neues Dictionary namens menu. Fügen Sie 3 - 5 Schlüssel-Wert-Paare hinzu, wobei der Schlüssel die Zutat und der Wert false ist.
local menu = {kohl = false,rindfleisch = false,tomate = false,haarnudeln = false,}Unterhalb des Menü-Dictionaries fügen Sie ein leeres Array hinzu, das später mit den Wahlen des Kunden gefüllt wird.
-- Suppe des Kundenlocal selectedIngredients = {}Verwenden Sie pairs(), um zu überprüfen, ob jede Zutat im Dictionary als true oder false markiert ist. Wenn true, fügen Sie die Zutat zur Suppe hinzu.
-- Suppe des Kundenlocal selectedIngredients = {}-- Fügt die Wahlen des Kunden zu ihrer Suppe hinzufor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendWiederholen Sie die Bestellung für den Kunden. Im Skript codieren Sie Folgendes:
- Überprüfen Sie, ob es einen Menüpunkt in selectedIngredients gibt. Wenn ja, drucken Sie "Sie haben Suppe mit: " aus.
- Verwenden Sie ipairs(), um durch das selectedIngredients-Array zu gehen und jede Zutat auszudrucken.
- Testen Sie, indem Sie mindestens einen Menüpunkt auf true ändern.
-- Druckt die Suppe-Bestellung von "selectedIngredients"if #selectedIngredients > 0 thenprint("Sie haben Suppe mit: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendIn der if-Anweisung, die überprüft, ob es einen Menüpunkt gibt, fügen Sie eine else-Bedingung hinzu, die den Kunden mitteilt, ob keine Zutaten ausgewählt wurden.
if #selectedIngredients > 0 thenprint("Sie haben Suppe mit: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("Nichts wurde ausgewählt. Sind Sie nicht hungrig?")end
Optionale Herausforderungen
Unten sind einige Herausforderungen aufgeführt, die die Verwendung von pairs und ipairs auf verschiedene Weise anwenden. Versuchen Sie, den Code für diese Herausforderungen zu erstellen.
Herausforderung: Erstellen Sie einen Kellner-NPC Anstelle der Verwendung des Outputfensters verwenden Sie den NPC aus Einführung in Arrays, um einen Kellner zu erstellen, der Kundenbestellungen entgegennimmt.
Herausforderung: Lassen Sie die Spieler Bestellungen aufgeben Erlauben Sie den Spielern, eine Zutat auszuwählen, indem sie einen physischen Teil wie einen Nähe-Trigger berühren. Weitere Informationen finden Sie unter Proximity Prompts.
Fortgeschrittene Herausforderung: Machen Sie mir einen Suppensimulator Erstellen Sie einen Restaurantsimulator, in dem die Spieler die Köche sind! Die Spieler müssen Zutaten zusammenstellen, die mit der Bestellung übereinstimmen, die ihnen der Kellner gegeben hat.
- Erstellen Sie In-Game-Requisiten für 3 - 5 verschiedene Zutaten.
- Erstellen Sie 3 - 5 Rezepte mit Dictionaries ähnlich dem in dieser Lektion.
- Erstellen Sie ein Array, das alle Rezepte enthält.
- Wählen Sie zufällig ein Rezept aus und verwenden Sie einen NPC, um den Spielern die Zutaten mitzuteilen.
- Erstellen Sie ein neues Dictionary, um ein Rezept basierend auf den vom Spieler berührten Requisiten-Zutaten zu erstellen.
- Vergleichen Sie das Rezept des Spielers mit dem Rezept, das vom NPC ausgewählt wurde.
- Erhöhen Sie die Herausforderung, indem Sie eine zusätzliche Bedingung hinzufügen, wie z. B. einen Timer.