许多脚本经常需要通过词典或阵列进行。但有时候,你可能不知道这些数据结构的开始和结束。例如,玩家词典可能正在更改,或玩家可能有不同大小的阵列库存。
在这些情况下,您可以使用 pairs() 和 ipairs() 。这些可以用于 for 循环来无需知道起始和终点通过每个元素。
本文将涵盖使用它们,并有一个实用的脚本示例,在烹饪游戏中跟踪餐馆订单。
词典和 pairs()
pairs() 与 词典 一起使用。以下是一个例子。
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(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) doprint(itemValue, itemName)end
执行时,代码将打印以关注中/正在关注内容:
You have:43 Gold Bricks3 Carrots2 Torches
阵列和 ipairs()
ipairs() 与 阵列 一起使用。在 ipairs() 中的“i”代表“索引”。使用 ipairs() 和 array 与 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 。添加 3 - 5 个键值对,其中键是成分,值为 false。
local menu = {cabbage = false,beef = false,tomato = false,noodles = false,}在菜单词典下,添加一个 空数组 ,其将在稍后填充客户的选择。
-- 客户的汤local selectedIngredients = {}使用 pairs() 检查词典中的每个成分是否标记为真或假。如果真的,将成分添加到汤中。
-- 客户的汤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 声明中,添加另一个条件,告诉客户没有选择配料。
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
可选挑战
以下是一些使用不同方式应用双子和 ipairs 的挑战。尝试看看你能否为它们编写代码。 挑战 : 使用输出窗口而不是使用输出窗口,使用 介绍到阵列 的 NPC 来创建一个服务器来接受客户订单。 挑战 : 允许玩家下订单 允许玩家通过触摸物理部件(例如靠近提示)选择一种成分。了解更多信息,请参阅靠近提示。 高级挑战 : 让我做一些汤模拟器 创建一个餐厅模拟器,玩家是厨师!玩家必须根据服务员给予他们的订单配置食材。
- 创建游戏内道具,用于 3 到 5 种不同的原料。
- 创建 3 - 5 个类似于本节中的词典的配方。
- 创建一个阵列,包含所有配方。
- 随机选择一个配方并使用 NPC 告诉玩家配料是什么。
- 创建一个新的词典,以创建基于玩家触摸的配料的配方。
- 将玩家的配方与 NPC 选择的配方进行比较。
- 通过添加额外条件,例如计时器,增加挑战。