我认为我的对象字面量和数组循环有问题。 我正在尝试为我之前使用过数组的“ map ”使用对象文字。我想使用对象文字的原因是因为我想要一个变量来显示它所在位置的名称。截至目前,我总是遇到 loc[2][1] = player; 的问题。
var room0 = [
[blank, blank, blank, blank],
[blank, blank, blank, blank],
[blank, player, blank, doorRight],
[blank, blank, blank, blank]
];
var room1 = [
[blank, blank, blank, blank],
[blank, blank, blank, blank],
[blank, blank, blank, blank],
[blank, blank, blank, blank]
];
var loc = room0;
var map = {
"living room": room0,
"Bedroom": room1,
"Outside": room2
};
function moveRight() {
for (var y = 0; y < loc.length; y++) {
var posX = loc[y].indexOf(player);
if (posX <= -1) continue;
// if going to the next room to the right
if (loc[y][posX+1] == doorRight) {
for (var name in map) {
if (loc == map[name]) {
var rightLoc = map[name+1];
}
}
loc[y][posX] = blank;
loc = rightLoc;
loc[2][1] = player;
break;
}
if (loc[y][posX+1] != blank) break;
if (posX < loc[y].length - 1) {
loc[y][posX] = blank;
loc[y][posX + 1] = player;
}
break;
}
}
最佳答案
你只需要在 map 中保存不同的东西,因为 map[name+1]
不会神奇地指向由 name
标识的下一个房间.
var map = {
"living room": 0,
"Bedroom": 1,
"Outside": 2
};
var rooms = [room0, room1, room2];
现在,map['living room']
将在 rooms
中保留索引,因此您仍然可以使用数字加法“移动”到下一个房间。您的代码将变为:
var rightLoc;
for (var name in map) {
if (loc == map[name]) {
rightLoc = map[name] + 1;
}
}
loc = rooms[rightLoc];
这段代码仍然缺乏一些检查来确保你总是有一个房间可以进入,但我相信你可以自己弄清楚:)
关于javascript - 遍历对象字面量和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16331195/