我正在尝试创建一个有趣的MUD项目来练习JS(我是一个菜鸟,但从代码学院那里得到了启发,希望学到更多东西!),我希望能从中获得一些建议,以了解如何在JS中代表我的地牢。
我希望自己的地牢具有以下功能:
地牢应具有随机数量的房间(在指定参数范围内)
房间应该自动装满怪物
(我们现在可以忽略房间的连接方式)
鉴于JS是OO语言,所以我认为代表地牢的最佳方法是作为对象:
var dungeon = {
var room1:roomA,
var room2:roomB,
var room3:roomC
}
//RoomX is an object created with the following constructor
function Room(){
this.description: "Some text",
this.monsters:[monster1,monster2,monster3],
this.treasure:[treasure1,treasure2,treasure3]
}
然后计划为Room对象创建方法,以允许玩家与房间中的东西进行交互。
问题:
1)这是一个好主意/行得通吗?
2)如何为对象生成随机数量的属性?
谢谢!
最佳答案
这是一个开放式的问题-有很多方法可以做到这一点,而这些方法都是“正确的”。但是有两点:
您的对象文字语法无效-您需要从属性名称中删除var
关键字,使其看起来像这样:
var dungeon = {
room1:roomA,
room2:roomB,
room3:roomC
}
但我认为您最好拥有一系列房间:
var dungeon = [ roomA, roomB, roomC ];
因为这样您可以轻松更改房间数量。假设您以某种方式随机生成房间,则可以使用
dungeon.push(new Room())
轻松地将新房间添加到阵列中。此外,如果您的房间出现在规则的网格中,那么您可能希望使用数组数组来表示:
var dungeon = [ [ roomA, roomB, roomC ],
[ roomD, roomE, roomF ],
[ roomG, roomH, roomI ] ];
这样,右中间房间将以
dungeon[1, 2]
的形式访问(第1行,第2列,注意数组索引是从零开始的)。您在函数中的分配语法也不正确:您需要说
this.propertyName = someValue;
// NOT
this.propertyName : someValue;
冒号
:
用于对象文字{ property : value }
语法中的属性创建,但是等号=
用于其他赋值variableOrProperty = value
。