De nombreux scripts devront souvent passer par des dictionnaires ou des tableaux. Mais parfois, vous ne saurez peut-être pas le début et la fin de ces structures de données. Par exemple, un dictionnaire de joueurs peut être en train de changer, ou les joueurs peuvent avoir un inventaire de tableau de taille variante.
Dans ces situations, vous pouvez utiliser pairs() et ipairs(). Ces derniers peuvent être utilisés avec un for loop pour passer à travers chaque élément sans points de départ et de fin connus.
Cet article couvrira leur utilisation, et aura un exemple de script pratique où vous suivrez les commandes de restaurant dans un jeu de cuisine.
Dictionnaires et couples()
pairs() est utilisé avec dictionnaires . Un exemple est vu ci-dessous.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() peut être utilisé pour travailler avec la clé, la valeur ou les deux d'un élément de dictionnaire. Dans le for loop ci-dessous, la première variable est la clé. La deuxième variable est la valeur. Le dictionnaire que vous voulez travailler avec est passé dans le pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Lors de l'exécution, le code imprimera les éléments suivre:
You have:43 Gold Bricks3 Carrots2 Torches
Les tableaux et les ipairs()
ipairs() est utilisé avec tableaux . Le « i » dans ipairs() signifie « index ». Utilisez ipairs() et les tableaux en combinaison avec un for loop pour travailler avec des valeurs ordonnées comme les classements. Un exemple est ci-dessous.
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
Lors de l'exécution, le code imprimera les éléments suivre:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Exercice - Simulateur de soupe restaurant
Faisons du soupe pour un simulateur de restaurant où les joueurs choisissent à partir d'une liste d'ingrédients de soupe possibles. Les ingrédients seront stockés comme des clés, et les valeurs commenceront par faux afin que les joueurs ne reçoivent que ce qu'ils selectionner.
Utilisez pairs() pour voir ce qui a été choisi, puis ipairs() pour imprimer la liste des ingrédients.
Créez un nouveau dictionnaire nommé menu . Ajoutez 3 - 5 paires de valeur clé où la clé est l'ingrédient et la valeur est fausse.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}Sous le dictionnaire du menu, ajoutez un tableau vide qui sera rempli par les choix du client plus tard.
-- Soupe du clientlocal selectedIngredients = {}Utilisez pairs() pour vérifier si chaque ingrédient dans le dictionnaire est marqué vrai ou faux. Si oui, ajoutez l'ingrédient à la soupe.
-- Soupe du clientlocal selectedIngredients = {}-- Ajoute les choix du client à leur soupefor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endendRépéter l'ordre au client. Dans le script, codez le code suivant ci-dessous.
- Vérifiez si il y a un élément de menu dans selectedIngredients. Si oui, imprimez "You ordered soup with: " .
- Utilisez ipairs() pour passer à travers le selectedIngredients tableau et imprimer chaque ingrédient.
- Testez en changeant au moins un élément de menu en vrai.
-- Imprime la commande de soupe à partir de « SelectedIngredients »if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendDans la déclaration if qui vérifie si il y a un itemde menu, ajoutez une autre condition qui indique aux clients si aucun ingrédient n'a été sélectionné.
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
Défis facultatifs
Ceux-ci sont quelques défis qui s'appliquent en utilisant des paires et des ipairs de différentes manières. Essayez de voir si vous pouvez construire le code pour eux. Défi : Créez un PNJ serveur au lieu d'utiliser la fenêtre d'Output, utilisez le PNJ de Intro To Arrays pour créer un serveur de prise de commandes. Défi : Permettre aux joueurs de placer des commandes Permettre aux joueurs de sélectionner un ingrédient en touchant une partie physique comme une commande de proximité. Pour plus d'informations, voir Proximity Prompts. Défi avancé : Make Me Some Soup Simulator Créez un simulateur de restaurant où les joueurs sont les chefs ! Les joueurs devront mettre ensemble les ingrédients pour correspondre à l'ordre donné par le serveur.
- Créez des éléments d'ameublement dans le jeu pour 3 - 5 ingrédients différents.
- Créez 3 - 5 recettes à l'aide de dictionnaires similaires à celui dans cette leçon.
- Créez un tableau qui contient toutes les recettes.
- Sélectionnez aléatoirement une recette et utilisez un PNJ pour dire aux joueurs quels sont les ingrédients.
- Créez un nouveau dictionnaire pour faire un réceptacle en fonction des ingrédients de prop que le joueur touche.
- Comparez la recette du joueur à la recette choisie par le PNJ.
- Augmentez le défi en ajoutant une condition supplémentaire, comme un minuteur.