Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Javascript在网格上包装对象?_Javascript_Loops_If Statement - Fatal编程技术网

如何用Javascript在网格上包装对象?

如何用Javascript在网格上包装对象?,javascript,loops,if-statement,Javascript,Loops,If Statement,我目前正在火星探测车Kata上工作。我已经创建了一个10x10网格,漫游者可以前后移动并改变方向['N','E','S','W']。因为网格实际上代表一个球形行星,所以漫游者应该包裹在10x10网格上,而不是完全离开。我正试着给包装编码。包含对象以获取更多上下文。我目前正在使用if/else语句来确定漫游者应该包装的情况,但我知道我把它复杂化了。switch语句会更有效吗?或者我可以用一个循环吗?我是Javascript新手。非常感谢 var myRover = { position: [[

我目前正在火星探测车Kata上工作。我已经创建了一个10x10网格,漫游者可以前后移动并改变方向['N','E','S','W']。因为网格实际上代表一个球形行星,所以漫游者应该包裹在10x10网格上,而不是完全离开。我正试着给包装编码。包含对象以获取更多上下文。我目前正在使用if/else语句来确定漫游者应该包装的情况,但我知道我把它复杂化了。switch语句会更有效吗?或者我可以用一个循环吗?我是Javascript新手。非常感谢

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循环来实现这一点?这取决于您是否希望更改多个位置,您可以选择将上面的内容封装在一个循环中。