许多脚本通常需要查找字典或阵列。 但有时,你可能不知道这些数据结构的开始和结束。 例如,玩家的字典可能正在更改,或玩家可能有一个变形的大小的阵列存储。
在这些情况下,您可以使用 pairs() 和 ipairs()。这些可以用于使用 for 循环来通过每个元素,无需知道开始和结束点。
本文将涵盖使用它们,并有一个实用的脚本示例,在烹饪游戏中跟踪餐厅订单。
字典和对象(。)
pairs() 用于使用 字典 。 一个例子在下面显示。
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() 可以用于与字典元素的键、值或两者进行工作。在下面的循环中,第一个变量是钥键。第二个变量是值。您想要使用的字典是通过 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() 用于使用 阵列 。 在 ipairs() 中的 “i” 代表 “索引”。 使用 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() 来检查是否有足够的材料在字典中标记为 true 或 false 。如果 true ,请将材料添加到汤中。
-- 客户的汤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 #selectedIngredients > 0 thenprint("You ordered soup with: ")for index, soupIngredient in ipairs(selectedIngredients) doprint(soupIngredient)endelseprint("Nothing was selected. Are you not hungry?")end
可选挑战
以下是使用不同方式使用配对和 IP 的一些挑战。尝试看看您是否能够使用这些代码来构建它们。 挑战 : 创建一个 Waiter NPC 而不是使用输出窗口,使用 介绍阵列 中的 NPC 创建一个等待员来接受客户订单。 挑战 : 允许玩家放置订单 允许玩家触摸物理部件(例如靠近提示)来选择材料。 了解更多信息,请参阅靠近提示。 高级挑战 : 让我一些汤模拟器 创建一个餐厅模拟器,在其中玩家是厨师! 玩家将需要放置配料来匹配给予他们的餐单由服务员提供。
- 在游戏中创建 3 - 5 个不同的配料。
- 使用类似本课程中使用的字典创建 3 - 5 个配方。
- 创建一个包含所有配方的阵列。
- 随机选择一个食谱并使用 NPC 告诉玩家材料是什么。
- 创建一个新的字典,以便根据玩家触摸哪些道具材料来创建配方。
- 比较玩家的配方 NPC 选择的配方。
- 通过添加额外的条件,例如计时器,提高挑战。