許多腳本經常需要遍歷字典或數組。但有時,您可能不知道這些數據結構的開始和結束。例如,玩家的字典可能正在變化,或者玩家可能擁有不同大小的數組庫存。
在這些情況下,您可以使用 pairs() 和 ipairs()。這些可以與 for 循環結合使用,遍歷每個元素,無需提前知道開始和結束點。
本文將涵蓋如何使用它們,並提供一個實用的腳本範例,在烹飪遊戲中追蹤餐廳訂單。
字典和 pairs()
pairs() 用於 字典。下面是示例。
local myDictionary = {["藍色玩家"] = "Ana",["金色玩家"] = "Binh",["紅色玩家"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " 是 " .. value)end
pairs() 可以用於操作字典元素的鍵、值,或兩者。下面的 for 循環中,第一個變量是鍵。第二個變量是值。您想操作的字典傳遞給 pairs()。
local inventory = {["金磚"] = 43,胡蘿蔔 = 3,火把 = 2,}print("您擁有:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
執行後,代碼將打印以下內容:
您擁有:43 金磚3 胡蘿蔔2 火把
數組和 ipairs()
ipairs() 用於 數組。ipairs() 中的 "i" 代表 "索引"。將 ipairs() 與數組結合使用,可以處理有序的值,如排行榜。下面是示例。
local players = {"Ali", "Ben", "Cammy"}for playerRank, playerName in ipairs(players) doprint("贏家 #" .. playerRank .. " 是 " .. playerName)end
執行後,代碼將打印以下內容:
贏家 #1 是 Ali贏家 #2 是 Ben贏家 #3 是 Cammy
實踐 - 餐廳湯模擬器
讓我們為餐廳模擬器製作一些湯,玩家可以從可能的湯原料列表中挑選。原料將作為鍵存儲,值將初始設置為 false,以便玩家僅獲取他們選擇的內容。
使用 pairs() 來查看所選的內容,然後使用 ipairs() 打印原料列表。
創建一個名為 menu 的新 字典。添加 3 - 5 個鍵值對,其中鍵是原料,值為 false。
local menu = {卷心菜 = false,牛肉 = false,番茄 = false,麵條 = false,}在菜單字典下方,添加一個 空數組,稍後將用客戶的選擇填充。
-- 客戶的湯local selectedIngredients = {}使用 pairs() 檢查字典中的每個原料是否標記為 true 或 false。如果為 true,則將原料添加到湯中。
-- 客戶的湯local selectedIngredients = {}-- 將客戶的選擇添加到他們的湯中for menuChoice, value in pairs(menu) doif value thentable.insert(selectedIngredients, menuChoice)endend將訂單重複告訴客戶。在腳本中,編碼以下內容。
- 檢查 selectedIngredients 中是否有菜單項。如果有,打印 "您點的湯有:"。
- 使用 ipairs() 遍歷 selectedIngredients 數組,打印每個原料。
- 測試通過將至少一個菜單項更改為 true。
-- 打印來自 "selectedIngredients" 的湯訂單if #selectedIngredients > 0 thenprint("您點的湯有:")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endend在檢查菜單項的 if 語句中,添加一個 else 條件,告訴客戶如果沒有選擇任何原料。
if #selectedIngredients > 0 thenprint("您點的湯有:")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("沒有選擇任何內容。您不餓嗎?")end
可選挑戰
以下是一些挑戰,適用於以不同方式使用 pairs 和 ipairs。嘗試看看您是否能夠構建出這些代碼。
挑戰:創建一個服務員 NPC 而不是使用輸出窗口,使用 引介數組 中的 NPC 創建一個服務員來接受客戶訂單。
挑戰:允許玩家下訂單 允許玩家通過接觸物理部件(例如接近提示)來選擇原料。更多信息,請參見 接近提示。
進階挑戰:製作我的湯模擬器 創建一個餐廳模擬器,玩家是廚師!玩家將必須組合原料以配合服務員給出的訂單。
- 創建 3 - 5 種不同原料的遊戲內道具。
- 創建 3 - 5 種使用字典的食譜,與本課程中的食譜類似。
- 創建一個數組來保存所有食譜。
- 隨機選擇一個食譜,並使用 NPC 告訴玩家原料是什麼。
- 創建一個新的字典,根據玩家觸碰的道具原料製作食譜。
- 將玩家的食譜與 NPC 選擇的食譜進行比較。
- 增加挑戰,添加額外的條件,例如計時器。