les paires et les ipairs

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

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) do
print(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) do
print(itemValue, itemName)
end

Lors de l'exécution, le code imprimera les éléments suivre:


You have:
43 Gold Bricks
3 Carrots
2 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) do
print("Winner #" .. playerRank .. " is " .. playerName)
end

Lors de l'exécution, le code imprimera les éléments suivre:


Winner #1 is Ali
Winner #2 is Ben
Winner #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.

  1. 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,
    }
  2. Sous le dictionnaire du menu, ajoutez un tableau vide qui sera rempli par les choix du client plus tard.


    -- Soupe du client
    local selectedIngredients = {}
  3. 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 client
    local selectedIngredients = {}
    -- Ajoute les choix du client à leur soupe
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(selectedIngredients, menuChoice)
    end
    end
  4. Ré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 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    end
  5. Dans 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 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    else
    print("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.

  1. Créez des éléments d'ameublement dans le jeu pour 3 - 5 ingrédients différents.
  2. Créez 3 - 5 recettes à l'aide de dictionnaires similaires à celui dans cette leçon.
  3. Créez un tableau qui contient toutes les recettes.
  4. Sélectionnez aléatoirement une recette et utilisez un PNJ pour dire aux joueurs quels sont les ingrédients.
  5. Créez un nouveau dictionnaire pour faire un réceptacle en fonction des ingrédients de prop que le joueur touche.
  6. Comparez la recette du joueur à la recette choisie par le PNJ.
  7. Augmentez le défi en ajoutant une condition supplémentaire, comme un minuteur.