用JavaScript表示地牢,然后用怪物填充地牢的最佳方式是什么
What is the best way to represent a dungeon in JavaScript and then populate it with monsters?
我正试图创建一个MUD作为一个有趣的项目来练习JS(我是一个彻头彻尾的傻瓜,但受到codecademy的启发,我学到了更多!)我希望我能得到一些关于如何在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
。
总的来说,这听起来是个好主意,但你对地牢的描述并没有真正的意义。你可以把地牢变成一个物体。您的示例几乎是正确的,但您需要去掉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();
}
您的Room构造函数也不完全正确。如果我用正确的javascript重写它,它将是:
function Room(){
this.description = "Some text";
this.monsters = [monster1,monster2,monster3];
this.treasure = [treasure1,treasure2,treasure3];
}
这是这样初始化的:
var room = new Room();
您可以访问所有字段:
room.description // returns "Some text"
room.monsters // returns [monster1,monster2,monster3];
在创建具有对象文字CCD_ 12的对象时使用CCD_。对于使用构造函数定义的对象,可以使用=
。
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 在node.js中编写单元测试的最佳方式是什么
- 使用AJAX在Rails中提交动态表单的最佳方式是什么
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 在AngularJS中使用多个主题的最佳方式是什么
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 用JavaScript随机给网页上的每个字母上色的最佳方式是什么
- 如果我返回表,检查 Ajax 调用是否为 200 OK的最佳方法是什么
- JavaScript - 创建可链接函数时的最佳方法是什么
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- addEvent()传奇事件之后的当前最佳实践是什么