对和 ipairs

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

许多脚本经常需要通过词典或阵列进行。但有时候,你可能不知道这些数据结构的开始和结束。例如,玩家词典可能正在更改,或玩家可能有不同大小的阵列库存。

在这些情况下,您可以使用 pairs()ipairs() 。这些可以用于 for 循环来无需知道起始和终点通过每个元素。

本文将涵盖使用它们,并有一个实用的脚本示例,在烹饪游戏中跟踪餐馆订单。

词典和 pairs()

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()阵列 一起使用。在 ipairs() 中的“i”代表“索引”。使用 ipairs() 和 array 与 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 。添加 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 的挑战。尝试看看你能否为它们编写代码。 挑战 : 使用输出窗口而不是使用输出窗口,使用 介绍到阵列 的 NPC 来创建一个服务器来接受客户订单。 挑战 : 允许玩家下订单 允许玩家通过触摸物理部件(例如靠近提示)选择一种成分。了解更多信息,请参阅靠近提示高级挑战 : 让我做一些汤模拟器 创建一个餐厅模拟器,玩家是厨师!玩家必须根据服务员给予他们的订单配置食材。

  1. 创建游戏内道具,用于 3 到 5 种不同的原料。
  2. 创建 3 - 5 个类似于本节中的词典的配方。
  3. 创建一个阵列,包含所有配方。
  4. 随机选择一个配方并使用 NPC 告诉玩家配料是什么。
  5. 创建一个新的词典,以创建基于玩家触摸的配料的配方。
  6. 将玩家的配方与 NPC 选择的配方进行比较。
  7. 通过添加额外条件,例如计时器,增加挑战。