許多腳本會經常需要通過辭典或陣列進行。但有時候,你可能不知道這些數據結構的開始和結束。例如,玩家辭典可能正在更改,或玩家可能擁有不同尺寸的數組庫存。
在這些情況下,您可以使用 pairs() 和 ipairs() 。這些可以使用 for 循環來通過沒有已知開始和結束點的每個元素。
本文將討論使用它們,並有一個實用的腳本範例,在烹飪遊戲中追蹤餐廳訂單。
辭典和 pairs()
pairs() 與 辭典 使用。下面有一個例子。
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() 可用於與辭典元素的鍵、值或兩者都工作。在下面的 for 循環中,第一個變量是鑰鍵。第二個變量是值。你想使用的辭典被傳送到 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
陣列和 ipairs()
ipairs() 使用 陣列 。在 ipairs() 中的 "i" 代表 "索引"。使用 ipairs() 和陣列與 for 循環結合來處理排序值,例如排行榜。以下是一個例子。
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 個鑰匙值對,其中鑰匙是成分,值為 false。
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 陣列並打印每個成分。
- 通過變更至少一個選單項目為真實來進行測試。
-- 從「選擇的材料」列印湯品訂單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
可選挑戰
以下是使用不同方式應用對組和 ipair 的一些挑戰。嘗試看看你能否為它們編寫代碼。 挑戰 : 使用 介紹到陣列 的 NPC 來創建一名服務員,而不是使用輸出窗口,使用 NPC 來創建一名服務員來接受客戶訂單。 挑戰 : 允許玩家下單 允許玩家通過觸碰物理部件,如感應提示,選擇一個成分。欲了解更多信息,請參閱孔位提示。 高級挑戰 : 讓我做一些湯品模擬器 創建一個餐廳模擬器,玩家是廚師!玩家必須將配料組合到符合服務員給予他們的訂單為止。
- 為 3 - 5 種不同的原料創建遊戲道具。
- 使用與本課程中的辭典相似的辭典創建 3 - 5 個配方。
- 創建一個包含所有配方的數組。
- 隨機選擇配方並使用 NPC 告訴玩家配料是什麼。
- 創建一個新字典來製作一個基於玩家觸碰的道具成分的配方。
- 比較玩家的配方與 NPC 選擇的配方。
- 通過添加額外條件,例如定時器,增加挑戰。