雙子和 ip

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

許多指令碼通常需要通過字典或陣列。但有時候,你可能不知道這些數據結構的開始和結束。例如,一個玩家的字典可能正在變更,或玩家可能有一個陣列的各種尺寸。

在這些情況下,您可以使用 pairs()ipairs() 。這些可以用於以循環方式通過每個元素,而不知道開始和結束點。

本文將涵蓋使用它們,並且有一個實用的指令碼示例,在烹飪遊戲中追蹤餐點訂單。

字典和組合式()

pairs()字典 使用。下面有一例。


local myDictionary = {
["Blue Player"] = "Ana",
["Gold Player"] = "Binh",
["Red Player"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(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) do
print(itemValue, itemName)
end

執行時,代碼會列出以追蹤中內容:


You have:
43 Gold Bricks
3 Carrots
2 Torches

陣列和 ipairs()

ipairs()陣列 使用。「i」在 ipairs() 中代表「索引」。使用 ipairs() 和陣列與 for 陣列以一起工作,例如排行榜。下面有一個範例。


local players = {"Ali", "Ben", "Cammy"}
for playerRank, playerName in ipairs(players) do
print("Winner #" .. playerRank .. " is " .. playerName)
end

執行時,代碼會列出以追蹤中內容:


Winner #1 is Ali
Winner #2 is Ben
Winner #3 is Cammy

練習 - 餐廳湯菜模擬器

讓我們來製作一些菜,以便在餐廳模擬器中的玩家可以從可用的食材列表中選擇。這些食材將被存儲為鑰匙,其值將為空,因此玩家只能取得他們選擇的部分。

使用 pairs() 來看看有什麼被選擇,然後 ipairs() 列出材料清單。

  1. 建立名為 menu 的新 menu。添加 3 - 5 個關鍵值對,其中關鍵值是材料,值是 false。


    local menu = {
    cabbage = false,
    beef = false,
    tomato = false,
    noodles = false,
    }
  2. 在菜單典禮下,添加一個 空陣列 ,這麼做會在後來由客戶選擇的結果。


    -- 顧客的湯
    local selectedIngredients = {}
  3. 使用 pairs() 來檢查各個字典中的每個材料是否標為真或假。如果真,請將材料添加到湯中。


    -- 顧客的湯
    local selectedIngredients = {}
    -- 將顧客的選擇添加到他們的湯中
    for menuChoice, value in pairs(menu) do
    if value then
    table.insert(selectedIngredients, menuChoice)
    end
    end
  4. 重複以前的訂單給客戶。 在指令碼中,代碼如下。

    • 檢查 selectedIngredients 中是否有菜單項目。如果是,請列印 "You ordered soup with: "
    • 使用 ipairs() 來通過 selectedIngredients 陣列並列印每個材料。
    • 測試至少一個選單項目為真。

    -- 從 "選擇的材料" 列出湯菜
    if #selectedIngredients > 0 then
    print("You ordered soup with: ")
    for index, soupIngredient in ipairs(selectedIngredients) do
    print(soupIngredient)
    end
    end
  5. 在檢查菜單項道具是否存在的 if 句中,添加另一個條件,告訴客戶沒有選擇任何材料。


    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

可選挑戰

以下是使用對和 ipairs 在不同方式應用的一些挑戰。請嘗試看看您是否能寫出這些代碼。 挑戰 : 在輸出窗口使用以外,使用 Intro To Arrays 中的 NPC 來創建一名服務員。 挑戰 : 允許玩家放置訂單 允許玩家選擇配料 物理零件 (例如接近提示) 。 查看更多資訊,請參閱 接近提示進階挑戰 : 讓我一些湯餅模擬器 製作一個餐廳模擬器,在玩家是廚師的情況下,他們必須將食材放在一起,以匹配給予他們的服務員指定的訂單。

  1. 在遊戲中創建 3 至 5 個不同的材料。
  2. 使用類似本次課題中的典型資料庫創建 3 - 5 個食譜。
  3. 創建一個包含所有配方的矩陣。
  4. 隨機選擇配方並使用 NPC 告訴玩家材料是什麼。
  5. 建立新字典,以讓玩家碰觸到的物件配料來製作食譜。
  6. 比較玩家的配方 NPC 選擇的配方。
  7. 增加挑戰,例如額外的時間器,例如計時器。