Viele Skripte müssen oft durch Dictionaries oder Arrays gehen. Aber manchmal, Sie wissen möglicherweise nicht den Anfang und das Ende dieser Datenstrukturen. Zum Beispiel, ein Wörterbuch von Spielern kann sich ändern, oder Spieler haben ein Array-Inventar von verschiedenen Größen.
In diesen Situationen können Sie pairs() und ipairs() verwenden. Dies kann mit einem for-Loop verwendet werden, um jedes Element ohne bekannte Start- und Endpunkte durchzugehen.
Dieser Artikel wird die Verwendung von ihnen abdecken und ein praktisches Skriptbeispiel haben, in dem Sie Restaurantbestellungen in einem Spielverfolgen.
Diktionare und Paare()
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 .. " is " .. value)end
pairs() kann verwendet werden, um mit einem Wörterbuch-Element-Schlüssel, Wert oder beides zu arbeiten. Im For-Loop unten ist die erste Variable der Schlüssel. Die zweite Variable ist der Wert. Das Wörterbuch, mit dem Sie arbeiten möchten, wird in pairs() übergeben.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Wenn es ausgeführt wird, druckt der Code gefolgte Profile:
You have: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 einem for-Loop, um mit sortierten Werten wie Bestenlisten zu arbeiten. Ein Beispiel ist unten.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Wenn es ausgeführt wird, druckt der Code gefolgte Profile:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Übung - Restaurant-Suppe-Simulator
Lass uns etwas Suppe für einen Restaurantsimulator machen, bei dem Spieler aus einer Liste möglicher Suppeingredients auswählen. Die Zutaten werden als Schlüssel gespeichert, und die Werte beginnen mit falsch, damit die Spieler nur das bekommen, was sie auswählen.
Verwenden Sie pairs() , um zu sehen, was gewählt wurde, und dann ipairs() , um die Liste der Zutaten zu drucken.
Erstellen Sie ein neues Wörterbuch mit dem Namen menu . Fügen Sie 3 - 5 Schlüsselwerte hinzu, bei denen der Schlüssel das Zutat ist und der Wert falsch ist.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Unter dem Menü-Wörterbuch fügen Sie ein leeres Array hinzu, das später mit den Auswahlmöglichkeiten des Kunden gefüllt wird.
-- Suppe des Kundenlocal selectedIngredients = {}Verwenden Sie pairs() , um zu überprüfen, ob jedes Zutat im Wörterbuch als wahr oder falsch markiert ist. Wenn Sie es wahr ist, fügen Sie das Zutat zu Suppe hinzu.
-- Suppe des Kundenlocal selectedIngredients = {}-- Fügt ihren Suppe die Auswahl des Kunden hinzufor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendWiederholen Sie die Reihenfolge an den Kunden. Im Skript, das. PL: die Skriptskodieren Sie die folgenden Zeilen.
- Überprüfen Sie, ob es ein Menü-Element in selectedIngredients gibt. Wenn so, drucken Sie "You ordered soup with: " .
- Verwenden Sie ipairs() , um durch die selectedIngredients -Matrix zu gehen und jedes Zutat zu drucken.
- Testen Sie, indem Sie mindestens einen Menüartikel auf "wahr" ändern.
-- Druckt die Suppe-Bestellung aus "ausgewählte Zutaten"if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendIn der if-Anweisung, die prüft, ob ein Artikelvorhanden ist, fügen Sie eine andere Bedingung hinzu, die den Kunden sagt, dass keine Zutaten ausgewählt wurden.
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
Optionale Herausforderungen
Below are some challenges that apply using pairs and ipairs in different ways. Try seeing if you can build out the code for these. Herausforderung : Erstellen Sie einen Waiter-NPC anstelle des Ausgabe-Fensters, verwenden Sie den NPC aus Intro To Arrays , um einen Waiter zu erstellen, der Kundenanfragen annimmt. Herausforderung : Erlaube Spielern, Bestellungen aufzugeben, um Spielern die Auswahl einer Zutat zu ermöglichen, indem sie einen physischen Teil wie eine Näherungsmeldung berühren. Weitere Informationen finden Sie unter Näherungsmeldungen. Fortgeschrittene Herausforderung : Make Me Some Soup Simulator erstellen Sie einen Restaurantsimulator, in dem Spieler die Köche sind! Spieler müssen die Zutaten zusammenbringen, um die Bestellung, die ihnen vom Kellner gegeben wird, zu entsprechen.
- Erstellen Sie In-Game-Elemente für 3 - 5 verschiedene Zutaten.
- Erstellen Sie 3 - 5 Rezepte mit Diktionen, die dem in dieser Lektion ähneln.
- Erstellen Sie ein Array, das alle Rezepte enthält.
- Wähle zufällig ein Rezept aus und verwende einen NPC, um den Spielern zu erzählen, welche Zutaten sind.
- Erstellen Sie ein neues Wörterbuch, um ein Rezept zu erstellen, das auf den Zutaten basiert, von denen der Spieler berührt.
- Vergleichen Sie das Rezept des Spieler:inmit dem Rezept, das der NPC ausgewählt hat.
- Erhöhen Sie die Herausforderung, indem Sie ein zusätzliches Bedingung hinzufügen, wie z. B. einen Timer.