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

时间:2017-01-06 21:15:18

标签: javascript loops if-statement

我目前正在研究Mars Rover Kata。我已经创建了一个10x10网格,漫游者可以向前和向后移动并改变方向['N','E','S','W']。因为网格实际上代表一个球形行星,漫游者应该在10x10网格上包裹而不是完全脱离。我正在尝试编写包装。包含更多上下文的对象。我目前正在使用if / else语句来确定流动站应该包装的情况,但我知道我过度复杂了。切换声明会更有效吗?或者我可以以某种方式使用循环?我是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]];
}


}

1 个答案:

答案 0 :(得分:1)

您可以使用一个物体来计算具有给定方向的流动站的新位置。

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
];