如何用Javascript在网格上包装对象?
我目前正在火星探测车Kata上工作。我已经创建了一个10x10网格,漫游者可以前后移动并改变方向['N','E','S','W']。因为网格实际上代表一个球形行星,所以漫游者应该包裹在10x10网格上,而不是完全离开。我正试着给包装编码。包含对象以获取更多上下文。我目前正在使用if/else语句来确定漫游者应该包装的情况,但我知道我把它复杂化了。switch语句会更有效吗?或者我可以用一个循环吗?我是Javascript新手。非常感谢如何用Javascript在网格上包装对象?,javascript,loops,if-statement,Javascript,Loops,If Statement,我目前正在火星探测车Kata上工作。我已经创建了一个10x10网格,漫游者可以前后移动并改变方向['N','E','S','W']。因为网格实际上代表一个球形行星,所以漫游者应该包裹在10x10网格上,而不是完全离开。我正试着给包装编码。包含对象以获取更多上下文。我目前正在使用if/else语句来确定漫游者应该包装的情况,但我知道我把它复杂化了。switch语句会更有效吗?或者我可以用一个循环吗?我是Javascript新手。非常感谢 var myRover = { position: [[
var myRover = {
position: [[0],[0]],
direction: 'N',
roverDirections = ['N', 'E', 'S', 'W'],
marsGrid: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
obstacles: [];
};
if (command === 'f') {
if ((myRover.position[[0],[0]]) && (myRover.direction === 'S')) {
myRover.position[[10],[0]];
}
else if ((myRover.position[[0],[0]]) && (myRover.direction === 'W')) {
myRover.position[[0],[10]];
}
if ((myRover.position[[0],[10]]) && (myRover.direction === 'E')) {
myRover.position[[0],[0]];
}
else if ((myRover.position[[0],[10]]) && (myRover.direction === 'S')) {
myRover.position[[10],[10]];
}
if ((myRover.position[[10],[0]]) && (myRover.direction === 'N')) {
myRover.position[[0],[0]];
}
else if ((myRover.position[[10],[0]]) && (myRover.direction === 'W')) {
myRover.position[[10],[10]];
}
if ((myRover.position[[10],[10]]) && (myRover.direction === 'N')) {
myRover.position[[0],[10]];
}
else if ((myRover.position[[0],[0]]) && (myRover.direction === 'E')) {
myRover.position[[10],[0]];
}
}
您可以使用一个对象来计算具有给定方向的漫游者的新位置
directions = {
N: [0, 9], // 9 because length of x - 1 and the positive remainder operator
W: [9, 0], // 9 because length of y - 1
O: [1, 0],
S: [0, 1]
};
然后,您可以使用
direction = 'S';
newPos = [
(oldPos[0] + directions[direction][0]) % 10,
(oldPos[1] + directions[direction][1]) % 10
];
可能会有更多的代码对计数器进行递增和递减,这对它们的走向正确吗?如果是这样的话,如果数字是
>10
或者计数器=10
如果数字是<0
你就有了一些语法错误:roverDirections=
应该是roverDirections:
,删除代码>在障碍物之后
,也就是myRover。位置[[0],[0]]
没有任何意义。您可以定义一个网格点对象,使用指向周围网格点的“指针”,这样您就可以轻松地连接边。因此,当你四处移动时,你会改变漫游者的当前网格点,而不是x,y坐标。你可以用一个一维数组来简化你的位置,如[1,5]
。只需补充一点,你移动N/S的情况对于球形行星表示并不准确。您希望保持Y位置,将X位置移动到最大值的一半,然后反转方向。感谢您的提示。是否有任何方法可以使用for循环或while循环来实现这一点?这取决于您是否希望更改多个位置,您可以选择将上面的内容封装在一个循环中。