De nombreux scripts auront souvent besoin de passer par des dictionnaires ou des tableaux.Mais parfois, vous ne savez pas le début et la fin de ces structures de données.Par exemple, un dictionnaire de joueurs peut changer, ou les joueurs peuvent avoir un inventaire d'arrays de tailles différentes.
Dans ces situations, vous pouvez utiliser pairs() et ipairs().Ces derniers peuvent être utilisés avec une boucle for pour parcourir chaque élément sans points de départ et d'extrémité connus.
Cet article couvrira leur utilisation et aura un exemple de script pratique où vous traquez les commandes de restaurants dans un jeu de cuisine.
Dictionnaires et paires()
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 la boucle for ci-dessous, la première variable est la clé.La deuxième variable est la valeur.Le dictionnaire avec lequel vous voulez travailler est passé à pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Lorsqu'il est exécuté, le code imprimera ce qui suivre:
You have:43 Gold Bricks3 Carrots2 Torches
Tableaux et ipairs()
ipairs() est utilisé avec arrays .Le "i" dans ipairs() signifie "index." Utilisez ipairs() et des tableaux en combinaison avec une boucle for 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
Lorsqu'il est exécuté, le code imprimera ce qui suivre:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
Pratique - Simulateur de soupe de restaurant
Faisons une soupe pour un simulateur de restaurant où les joueurs choisissent parmi une liste d'ingrédients de soupe possibles.Les ingrédients seront stockés en tant que clés, et les valeurs commenceront par être fausses afin que les joueurs ne reçoivent que ce qu'ils selectionner.
Utilisez pairs() pour voir ce qui a été sélectionné, puis ipairs() pour imprimer la liste des ingrédients.
Créer un nouveau dictionnaire nommé menu . Ajoutez 3 - 5 paires clé-valeur où la clé est l'ingrédient et la valeur est fausse.
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}En dessous du dictionnaire de menu, ajoutez un array vide qui sera rempli avec 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. S'il est vrai, 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étez l'ordre au client. Dans le script, codez ce qui suit ci-dessous.
- Vérifiez s'il y a un élément de menu dans selectedIngredients . Si oui, imprimez "You ordered soup with: " .
- Utilisez ipairs() pour parcourir l'array selectedIngredients et imprimer chaque ingrédient.
- Testez en changeant au moins un élément de menu en vrai.
-- Imprime la commande de soupe à partir de "ingrédients sélectionnés"if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendDans la déclaration if qui vérifie s'il y a un itemde menu, ajoutez une condition else qui informe les clients s'il n'y a pas d'ingrédients sélectionnés.
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 optionnels
Ci-dessous, quelques défis qui s'appliquent en utilisant des paires et des ipaires de différentes manières. Essayez de voir si vous pouvez construire le code pour ces derniers. Défi : Créez un NPC serveur au lieu d'utiliser la fenêtre de sortie, utilisez le NPC de Introduction aux tableaux pour créer un serveur pour prendre les commandes des clients. Défi : Permettre aux joueurs de passer des commandes Permettre aux joueurs de sélectionner un ingrédient en touchant une partie physique telle qu'une invite de proximité.Pour plus d'informations, voir invitations de proximité. Défi avancé : Make Me Some Soup Simulator Crée un simulateur de restaurant où les joueurs sont les chefs ! Les joueurs devront assembler des ingrédients pour correspondre à la commande donnée par le serveur.
- Créez des props dans le jeu pour 3 à 5 ingrédients différents.
- Créer 3 - 5 recettes en utilisant des dictionnaires similaires à celui de cette leçon.
- Créer 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 créer une recette en fonction des ingrédients de propriété 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 minuterie.