2014-10-01 65 views
2

我有我的表的麻烦,我在LUA制作文字冒险LUA:用户输入以参照表

local locxy = {} 
     locxy[1] = {} 
     locxy[1][1] = {} 
     locxy[1][1]["locdesc"] = "dungeon cell" 
     locxy[1][1]["items"] = {"nothing"} 
     locxy[1][1]["monsters"] = {monster1} 

的[1] [1]是指x,y坐标并使用移动命令,我可以成功地进入不同的房间并接收所述房间的描述。

物品和怪物是嵌套表,因为可以在那里保存多个物品(每个物品都有自己的属性)。

我遇到的问题是让项目/怪物部分工作。我有一个单独的表如:

local monsters = {} 
    monsters["rat"] = {} 
    monsters["rat"]["Name"] = "a rat" 
    monsters["rat"]["Health"] = 5 
    monsters["rat"]["Attack"] = 1 

我正在使用这样的表来创建各种敌人类型的轮廓。 monster1是一个变量,我可以插入位置表来调用其中一个轮廓,但是我不知道如何引用它。

print("You are in ", locxy[x][y]["locdesc"]) -- this works 
print("You can see a ", locxy[x][y]["monsters]["Name"],".") - does not work 

所以我想知道如何才能让它工作,我可能需要一种不同的方法,因为我正在学习。但是我还特别想知道如何/如果可以在指向单独表中的数据的表项中使用变量。

感谢您提供任何帮助!

回答

1

此行

locxy[x][y]["monsters]["Name"] 

  1. 看在locxy表的x
  2. 然后查看该值
  3. 看的y领域中的 “怪物” `该字段的值
  4. 然后看在那个值

的问题是,你从locxy[x][y]["monsters"]找回表没有一个"Name"场的"Name"领域。它在数字指标中有一些条目。

locxy[x][y]["monsters][1]["Name"]会得到你的名字第一个这个表中的怪物,但你需要在怪物表上循环来获得所有这些怪物。

风格笔记:

相反的:

tab = {} 
tab[1] = {} 
tab[1][1] = {} 

你可以使用:

tab = { 
    [1] = { 
     {} 
    } 
} 

,而不是和:

monsters = {} 
monsters["rat"] = {} 
monsters["rat"]["Name"] = "foo" 

你可以使用:

monsters = { 
    rat = { 
     Name = "foo" 
    } 
} 

["rat"]["Name"]如果你想明确你的密钥。

同样地,而不是monsters["rat"]["Name"],您可以使用monsters.rat.Name

+0

感谢您的快速和有益的回应。 – mixedfr00tjam 2014-10-01 20:24:41