我正在尝试创建一个有趣的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

10-08 17:11