我正在做火星漫游者的kata挑战。我已经完成了对机器人的编程,以使其绕10x10网格并在遇到边界时停止。
我现在正在对机器人编程,使其在遇到障碍时停止并报告遇到障碍。我创建了一个名为testBoard
的二维数组。我可以轻松添加或更改周围的障碍。我正在尝试编写一个名为obstacles
的函数以将坐标推送到obstaclesList
数组,以便可以对机器人进行编程以针对障碍物的坐标测试其新位置。
let testBoard = [
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,"Bottle",null,null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,"Rock",null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,"Statue",null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null]
];
let obstaclesList = [];
function obstacles(testBoard) {
for(let i = 0; i < testBoard.length; i++){
for(let j = 0; j < testBoard[i].length; j++) {
if(testBoard[i][j] !== null) {
obstaclesList.push("x:" + i + " y:" + j);
}
}
}
}
console.log(obstaclesList);
但是,我无法在obstaclesList
数组中收集协调。请让我知道怎么了吗?
这是我在Mars Rover kata - IronHack Pre-work Exercise上的完整代码
我将完整的代码放在这里:
// Rover Object Goes Here
// ======================
let roverMars = {
direction: "N",
x: 0,
y: 0,
travelLog: ["x:0 y:0"]
};
let testBoard = [
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,"Bottle",null,null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,"Rock",null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,"Statue",null,null],
[null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null]
];
let obstaclesList = [];
function obstacles(testBoard) {
for(let i = 0; i < testBoard.length; i++){
for(let j = 0; j < testBoard[i].length; j++) {
if(testBoard[i][j] !== null) {
obstaclesList.push("x:" + i + " y:" + j);
}
}
}
}
console.log(obstaclesList);
// ======================
function turnLeft(rover){
console.log("turnLeft was called!");
switch(rover.direction) {
case "N": rover.direction = "W";
console.log("Rover is now facing " + rover.direction);
break;
case "W": rover.direction = "S";
console.log("Rover is now facing " + rover.direction);
break;
case "S": rover.direction = "E";
console.log("Rover is now facing " + rover.direction);
break;
case "E": rover.direction = "N";
console.log("Rover is now facing " + rover.direction);
break;
}
}
function turnRight(rover){
console.log("turnRight was called!");
switch(rover.direction) {
case "N": rover.direction = "E";
console.log("Rover is now facing " + rover.direction);
break;
case "W": rover.direction = "N";
console.log("Rover is now facing " + rover.direction);
break;
case "S": rover.direction = "W";
console.log("Rover is now facing " + rover.direction);
break;
case "E": rover.direction = "S";
console.log("Rover is now facing " + rover.direction);
break;
}
}
function moveForward(rover){
console.log("moveForward was called");
switch(rover.direction) {
case "N": if(rover.y <= 0) {
console.log("You can't place the rover outside of the 10x10 grid!");
} else {
rover.y--;
console.log("Rover moved up. The position is now " + rover.x + ", " + rover.y);
}
break;
case "W": if(rover.x <= 0) {
console.log("You can't place the rover outside of the 10x10 grid!");
} else {
rover.x--;
console.log("Rover moved left. The position is now " + rover.x + ", " + rover.y);
}
break;
case "S": if(rover.y >= 10) {
console.log("You can't place the rover outside of the 10x10 grid!");
} else {
rover.y++;
console.log("Rover moved down. The position is now " + rover.x + ", " + rover.y);
}
break;
case "E": if(rover.x >= 10) {
console.log("You can't place the rover outside of the 10x10 grid!");
} else {
rover.x++;
console.log("Rover moved right. The position is now " + rover.x + ", " + rover.y);
}
break;
}
roverMars.travelLog.push("x:" + rover.x + " y:" + rover.y);
}
function moveBackward(rover){
console.log("moveBackward was called");
switch(rover.direction) {
case "N": if(rover.y >= 10) {
console.log("You can't place the rover outside of the 10x10 grid!");
} else {
rover.y++;
console.log("Rover moved down. The position is now " + rover.x + ", " + rover.y);
}
break;
case "W": if(rover.x >= 10) {
console.log("You can't place the rover outside of the 10x10 grid!");
} else {
rover.x++;
console.log("Rover moved right. The position is now " + rover.x + ", " + rover.y);
}
break;
case "S": if(rover.y <= 0) {
console.log("You can't place the rover outside of the 10x10 grid!");
} else {
rover.y--;
console.log("Rover moved up. The position is now " + rover.x + ", " + rover.y);
}
break;
case "E": if(rover.x <= 0) {
console.log("You can't place the rover outside of the 10x10 grid!");
} else {
rover.x--;
console.log("Rover moved left. The position is now " + rover.x + ", " + rover.y);
}
break;
}
roverMars.travelLog.push("x:" + rover.x + " y:" + rover.y);
}
function commandments(roverlist) {
let passRegex = /[lrfb]/g;
var passResult = roverlist.match(passRegex);
for(let i = 0; i < passResult.length; i++) {
switch(roverlist[i]) {
case "l": turnLeft(roverMars);
break;
case "r": turnRight(roverMars);
break;
case "f": moveForward(roverMars);
break;
case "b": moveBackward(roverMars);
break;
}
}
//console.log("passResult: " + passResult);
}
//commandments("bbzbzy");
//turnLeft(roverMars);
//turnRight(roverMars);
//moveForward(roverMars);
//console.log(roverMars.travelLog);