用JavaScript表示地下城,然后在其中填充怪物的最佳方式是什么?
我正在尝试创建一个MUD as fun项目来练习JS我是一个彻头彻尾的noob,但受到codecademy的启发,我想学习更多!我希望我能得到一些关于如何在JS中代表我的地下城的建议 我希望我的地下城有以下特点: 在指定的参数范围内,地下城应该有随机数量的房间 房间应该自动填充怪物 现在我们可以忽略房间之间的连接方式 鉴于JS是OO语言,我认为表示地下城的最佳方式是将其作为对象:用JavaScript表示地下城,然后在其中填充怪物的最佳方式是什么?,javascript,architecture,mud,Javascript,Architecture,Mud,我正在尝试创建一个MUD as fun项目来练习JS我是一个彻头彻尾的noob,但受到codecademy的启发,我想学习更多!我希望我能得到一些关于如何在JS中代表我的地下城的建议 我希望我的地下城有以下特点: 在指定的参数范围内,地下城应该有随机数量的房间 房间应该自动填充怪物 现在我们可以忽略房间之间的连接方式 鉴于JS是OO语言,我认为表示地下城的最佳方式是将其作为对象: var dungeon = { var room1:roomA, var room2:roomB,
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]
}
计划是为房间对象创建方法,允许玩家与房间中的物品进行交互
问题:
这是个好主意/行得通吗
2如何为对象生成随机数目的属性
谢谢 总的来说,我觉得这是个好主意,但你对地下城的描述没有什么意义。你可以把地下城变成一个物体。您的示例几乎是正确的,但您需要去掉var,如下所示:
var dungeon = {
'room1': roomA,
'room2': roomB
...
}
这可以通过dungeon.room1或dungeon['room1']访问
但是,为这个项目生成随机数量的房间是不必要的复杂。您必须获取最后一个元素,从末尾获取数字,增加一个,并且仅增加一个房间
不如将地下城定义为一个数组,然后生成随机数量的房间就很容易了:
//This generates a random number between min and max
var rand = Math.floor(Math.random() * (max - min) + min);
var dungeon = new Array(rand);
for (var i = 0; i < dungeon.length; i++) {
//This depends on how do you want to generate random rooms
dungeon[i] = randRoom();
}
这是这样初始化的:
var room = new Room();
您可以访问所有字段:
room.description // returns "Some text"
room.monsters // returns [monster1,monster2,monster3];
:在创建对象文本为{}的对象时使用,如我给出的第一个示例中所示。对于使用构造函数定义的对象,您使用=。对我来说总体上是个好主意,但您对地下城的描述并没有真正意义。你可以把地下城变成一个物体。您的示例几乎是正确的,但您需要去掉var,如下所示:
var dungeon = {
'room1': roomA,
'room2': roomB
...
}
这可以通过dungeon.room1或dungeon['room1']访问
但是,为这个项目生成随机数量的房间是不必要的复杂。您必须获取最后一个元素,从末尾获取数字,增加一个,并且仅增加一个房间
不如将地下城定义为一个数组,然后生成随机数量的房间就很容易了:
//This generates a random number between min and max
var rand = Math.floor(Math.random() * (max - min) + min);
var dungeon = new Array(rand);
for (var i = 0; i < dungeon.length; i++) {
//This depends on how do you want to generate random rooms
dungeon[i] = randRoom();
}
这是这样初始化的:
var room = new Room();
您可以访问所有字段:
room.description // returns "Some text"
room.monsters // returns [monster1,monster2,monster3];
:在创建对象文本为{}的对象时使用,如我给出的第一个示例中所示。对于用构造函数定义的对象,您使用=。这是一个相当开放的问题-有很多方法可以做到这一点,但都是同样正确的。但有两点: 您的对象文字语法无效-您需要从属性名称中删除var关键字,使其如下所示:
var dungeon = {
room1:roomA,
room2:roomB,
room3:roomC
}
但我认为你最好有一系列的房间:
var dungeon = [ roomA, roomB, roomC ];
因为这样你可以很容易地改变房间的数量。假设您以某种方式随机生成房间,您可以使用dungeon.pushnew Room轻松地将新房间添加到阵列中
此外,如果您的房间位于规则网格中,您可能希望使用数组数组来表示:
var dungeon = [ [ roomA, roomB, roomC ],
[ roomD, roomE, roomF ],
[ roomG, roomH, roomI ] ];
这样,右中间的房间将作为副本[1,2]第1行第2列访问,注意数组索引是从零开始的
函数中的赋值语法也不正确:您需要
this.propertyName = someValue;
// NOT
this.propertyName : someValue;
冒号:用于对象文字{property:value}语法中的属性创建,但等号=用于其他赋值variableOrProperty=value。这是一个相当开放的问题-有很多方法可以做到这一点,它们都是同样正确的。但有两点: 您的对象文字语法无效-您需要从属性名称中删除var关键字,使其如下所示:
var dungeon = {
room1:roomA,
room2:roomB,
room3:roomC
}
但我认为你最好有一系列的房间:
var dungeon = [ roomA, roomB, roomC ];
因为这样你可以很容易地改变房间的数量。假设您以某种方式随机生成房间,您可以使用dungeon.pushnew Room轻松地将新房间添加到阵列中
此外,如果您的房间位于规则网格中,您可能希望使用数组数组来表示:
var dungeon = [ [ roomA, roomB, roomC ],
[ roomD, roomE, roomF ],
[ roomG, roomH, roomI ] ];
这样,右中间的房间将作为副本[1,2]第1行第2列访问,注意数组索引是从零开始的
函数中的赋值语法也不正确:您需要
this.propertyName = someValue;
// NOT
this.propertyName : someValue;
冒号:用于对象文字{property:value}语法中的属性创建,但等号=用于其他赋值variableOrProperty=value。Aha是的,我想我理解。我把对象文字和构造函数符号弄混了。我之所以使用var,是为了使每个房间都成为一个私有财产,只能使用getter函数访问,而我还没有创建getter函数。这对这个项目来说可能太过分了
事实上,在对这个主题做了更多的阅读之后,您似乎只能使用构造函数而不是对象文本来创建私有变量。是的,我相信是这样的。有相当多的关于它的信息。啊哈,是的,我想我明白了。我把对象文字和构造函数符号弄混了。我之所以使用var,是为了使每个房间都成为一个私有财产,只能使用getter函数访问,而我还没有创建getter函数。对于这个项目来说,这可能有点过头了。事实上,在对这个主题做了更多的阅读之后,似乎您只能使用构造函数而不是对象文本来创建私有变量。是的,我相信是这样的。网站上有很多关于它的信息。