許多指令碼通常需要通過字典或陣列。但有時候,你可能不知道這些數據結構的開始和結束。例如,一個玩家的字典可能正在變更,或玩家可能有一個陣列的各種尺寸。
在這些情況下,您可以使用 pairs() 和 ipairs() 。這些可以用於以循環方式通過每個元素,而不知道開始和結束點。
本文將涵蓋使用它們,並且有一個實用的指令碼示例,在烹飪遊戲中追蹤餐點訂單。
字典和組合式()
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() 與 陣列 使用。「i」在 ipairs() 中代表「索引」。使用 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 的新 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
可選挑戰
以下是使用對和 ipairs 在不同方式應用的一些挑戰。請嘗試看看您是否能寫出這些代碼。 挑戰 : 在輸出窗口使用以外,使用 Intro To Arrays 中的 NPC 來創建一名服務員。 挑戰 : 允許玩家放置訂單 允許玩家選擇配料 物理零件 (例如接近提示) 。 查看更多資訊,請參閱 接近提示。 進階挑戰 : 讓我一些湯餅模擬器 製作一個餐廳模擬器,在玩家是廚師的情況下,他們必須將食材放在一起,以匹配給予他們的服務員指定的訂單。
- 在遊戲中創建 3 至 5 個不同的材料。
- 使用類似本次課題中的典型資料庫創建 3 - 5 個食譜。
- 創建一個包含所有配方的矩陣。
- 隨機選擇配方並使用 NPC 告訴玩家材料是什麼。
- 建立新字典,以讓玩家碰觸到的物件配料來製作食譜。
- 比較玩家的配方 NPC 選擇的配方。
- 增加挑戰,例如額外的時間器,例如計時器。