对和 ipairs

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

许多脚本通常需要查找字典或阵列。 但有时,你可能不知道这些数据结构的开始和结束。 例如,玩家的字典可能正在更改,或玩家可能有一个变形的大小的阵列存储。

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

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

字典和对象(。)

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() 可以用于与字典元素的键、值或两者进行工作。在下面的循环中,第一个变量是钥键。第二个变量是值。您想要使用的字典是通过 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() 和阵列与 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() 来检查是否有足够的材料在字典中标记为 true 或 false 。如果 true ,请将材料添加到汤中。


    -- 客户的汤
    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 #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

可选挑战

以下是使用不同方式使用配对和 IP 的一些挑战。尝试看看您是否能够使用这些代码来构建它们。 挑战 : 创建一个 Waiter NPC 而不是使用输出窗口,使用 介绍阵列 中的 NPC 创建一个等待员来接受客户订单。 挑战 : 允许玩家放置订单 允许玩家触摸物理部件(例如靠近提示)来选择材料。 了解更多信息,请参阅靠近提示高级挑战 : 让我一些汤模拟器 创建一个餐厅模拟器,在其中玩家是厨师! 玩家将需要放置配料来匹配给予他们的餐单由服务员提供。

  1. 在游戏中创建 3 - 5 个不同的配料。
  2. 使用类似本课程中使用的字典创建 3 - 5 个配方。
  3. 创建一个包含所有配方的阵列。
  4. 随机选择一个食谱并使用 NPC 告诉玩家材料是什么。
  5. 创建一个新的字典,以便根据玩家触摸哪些道具材料来创建配方。
  6. 比较玩家的配方 NPC 选择的配方。
  7. 通过添加额外的条件,例如计时器,提高挑战。