查找网格中的障碍物的坐标

时间:2019-08-14 00:51:05

标签: javascript arrays multidimensional-array

我正在做火星漫游者的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);

1 个答案:

答案 0 :(得分:0)

我认为您不是在打电话给您函数。您刚刚声明了它。在您的console.log(obstaclesList)之前尝试调用以下函数:

obstacles(testBoard);
console.log(obstaclesList);

enter image description here

如果您可以尝试更改障碍函数中的参数testBoard或具有相同名称的变量的名称,则cuz可能会使您感到困惑。 :)