2014-10-01 66 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