很多脚本通常需要遍历字典或数组。但有时,您可能不知道这些数据结构的开始和结束。例如,玩家的字典可能在变化,或者玩家可能拥有大小不一的数组库存。
在这种情况下,您可以使用 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() 和数组结合 for 循环来处理类似排行榜的有序值。下面是一个示例。
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 选择的食谱。
- 通过添加额外条件,例如计时器,来增加挑战性。