多くのスクリプトは辞書や配列を経由する必要があります。しかし、時々、これらのデータ構造の開始と終了を知らない場合があります。たとえば、プレイヤーの辞書が変更されるか、プレイヤーのアレイインベントリが変更される可能性があります。
これらの状況では、pairs() と ipairs() を使用できます。これらは、既知の開始と終了ポイントのない各要素をループで通過するために使用できます。
このアイテムを使用する方法について説明し、調理ゲームでレストランの注文を追跡する実用的なスクリプトの例を提供します。
辞書とペア()
pairs() は、 dictionaries と使用されます。下の例は見てください。
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() は、ダイクトワールドの要素のキー、値、または両方を取り扱うために使用できます。以下の for ループでは、最初の変数がキーです。2番目の変数は値です。ダイクトワールドで使用したいダイクトワールドは pairs() にパスされます。
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
実行すると、コードはフォロー中のように印刷されます:
You have:43 Gold Bricks3 Carrots2 Torches
配列と IP 配列 (ipairs()}
ipairs() は、 配列 で使用されます。「i」は、ipairs() の中の「インデックス」を表します。0> 配列0> と 3> for ループ3> を組み合わせて、リーダーボードなどのオーダーされた値に対応するようにします。下の例は、ipairs()6> と、ipairs() を使用して
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("Winner #" .. playerRank .. " is " .. playerName)end
実行すると、コードはフォロー中のように印刷されます:
Winner #1 is AliWinner #2 is BenWinner #3 is Cammy
練習 - レストランスープシミュレータ
プレイヤーが可能なスープの材料のリストから選択するレストランシミュレーターのためのスープを作りましょう。材料はキーとして保存され、値は開始時に偽のため、プレイヤーが選択したものだけが取得できます。
pairs() を使用して、何が選択されたかを表示し、ipairs() でリストの材料を印刷します。
新しい 辞書 を作成し、menu という名前のもとに 3 - 5 個のキーバリューペアを追加します。キーが材料であり、値が偽である 3 - 5 ペアを追加します。
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}メニューダイクトリの下に、 空の配列 を追加します。これは、後でクライアントの選択で満たされます。
-- 顧客のスープlocal selectedIngredients = {}pairs() を使用して、辞書の各コンポーネントが マークド または マークド であるかどうかをチェックします。如果、真である場合、コンポーネントをスープに追加します。
-- 顧客のスープlocal selectedIngredients = {}-- スープにお客さんの選択を追加しますfor menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endend顧客にオーダーを繰り返します。スクリプトで、次のコードをコードします。
- SelectedIngredients のメニューアイテムがあるかどうかをチェックします。如果、そうである場合は、"You ordered soup with: "を印刷します。
- ipairs() を使用して、selectedIngredients 配列を通過し、各イングリデントを印刷します。
- 少なくとも 1 つのメニューアイテムを「真」に変更してテストします。
-- 「SelectedIngredients」からスープのオーダーを印刷if #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endendメニューアイテムがあるかどうかをチェックする if 文に、材料が選択されていないことを告げる別のコンディションを追加します。
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
オプションチャレンジ
以下に、パーと IP のペアを使用しているさまざまな方法で適用されるいくつかのチャレンジがあります。これらのコードを構築できるかどうかを確認してください。 チャレンジ : 出力ウィンドウを使用する代わりに、イントロ・トゥ・アレイからNPCを作成して、ウェイターを作成してください。 チャレンジ : プレイヤーがオーダーを配置することを許可する : プレイヤーが近接プロンプトなどの物理パーツをタッチしてオーダーを選択することを許可します。For more information, see 近接プロンプト . 高度なチャレンジ : スープシミュレータを作成して、プレイヤーがシェフであるレストランシミュレータを作成します。プレイヤーは、注文を与えるウェイターに一致するように材料を組み合わせる必要があります。
- 3 - 5種類の違う材料のインゲームプロップを作成します。
- このレッスンで使用している辞書に似た 3 - 5 個のレシピを作成します。
- すべてのレシピを含むアレイを作成します。
- ランダムにレシピを選択し、NPCを使用してプレイヤーに材料が何であるかを告げます。
- プレイヤーがタッチするプロップの材料を基に新しい辞書を作成し、レシピを作成します。
- プレイヤーのレシピを NPC が選択したレシピと比較します。
- 追加のコンディションを追加して、タイマーなどの追加の制限を追加して、チャレンジを増加させます。