javascript - 火星探测器卡塔。可以转弯也可以前进

标签 javascript

我正在做这个 kata,其中我有一个漫游器,我需要能够向 10x10 板内发出指令。 Rover 一次只能进行 1 个 Action 。要么转身,要么前进。

当我console.log提前功能时,我没有得到漫游器在板上的更新位置。我想不通。我写了所有内容并找到了解决方案,但后来我破坏了它并覆盖了某些内容,并且无法弄清楚我删除或更改了什么。

// Rover Object Goes Here
// ======================
let grid;
let rover = {
  direction: "N",
  location: {x:0,y:0},
  // path: [{x:0,y:0}]
}

// ======================

//Turn left function
function turnLeft(rover){
  switch (rover.direction) {
    case "N":
      rover.direction = "W";
      break;
    case "W":
      rover.direction = "S";
      break;
    case "S":
      rover.direction = "E";
      break;
    case "E":
      rover.direction = "N";
      break; 
  }   
  console.log(`turnLeft was called!. Rover is now facing ${rover.direction}` );    
}


//Turn right function
function turnRight(rover){
  switch (rover.direction) {
    case "N":
      rover.direction = "E";
      break;
    case "E":
      rover.direction = "S";
      break;
    case "S":
      rover.direction = "W";
      break;
    case "W":
      rover.direction = "N";
      break;      
  }   
  console.log(`turnRight was called!. Rover is now facing ${rover.direction}` );    
}


//  Function for moving rover
function moveForward(theRover) {
  //Variables
  let locationX = theRover.location.x;
  let locationY = theRover.location.y;
  let roverDir = theRover.direction;
  let roverInfoConsole = `Current rover position is x:${locationX} y:${locationY}
                Current rover direction is ${roverDir} `; 
  // Restricted Moves  
  if ( (roverDir === "N" && locationY <= 0) ||
      (roverDir === "E" && locationX >= 9) ||
      (roverDir === "S" && locationY >= 9) ||
      (roverDir === "W" && locationX <= 0)     ) {

    console.log(`Cannot move in that direction. The rover would move to a restricted area.
                ${roverInfoConsole}`);

  //allowed moves
    //North
   } else if (roverDir === "N" && locationY <= 9) {
      locationY = locationY - 1;
      console.log(`moveForward was called. 
                   Current rover position is x:${locationX} y:${locationY}
                Current rover direction is ${roverDir} `);
    //East
   } else if (roverDir === "E" && locationX < 9) {
      locationX = locationX + 1;      
      console.log(`Current rover position is x:${locationX} y:${locationY}
                Current rover direction is ${roverDir} `);
    //South
   } else if (roverDir === "S" && locationY  < 9) {
      locationY = locationY + 1;
      console.log(`moveForward was called. 
                   Current rover position is x:${locationX} y:${locationY}
                Current rover direction is ${roverDir} `);
    //West
   } else if (roverDir === "W" && locationX < 9) {
      locationX = locationX - 1;      
      console.log(`moveForward was called. 
                   Current rover position is x:${locationX} y:${locationY}
                Current rover direction is ${roverDir} `);
   }
};

console.log(turnRight(rover));
console.log(moveForward(rover));
console.log(moveForward(rover));
console.log(turnRight(rover))
console.log(moveForward(rover));
console.log(moveForward(rover));

我预计最终的输出是:


"Current rover position is x:2 y:2
Current rover direction is S " 

但它没有更新位置。这是我实际得到的整个控制台日志:

"turnRight was called!. Rover is now facing E"
undefined
"Current rover position is x:1 y:0
                Current rover direction is E "
undefined
"Current rover position is x:1 y:0
                Current rover direction is E "
undefined
"turnRight was called!. Rover is now facing S"
undefined
"moveForward was called. 
                   Current rover position is x:0 y:1
                Current rover direction is S "
undefined
"moveForward was called. 
                   Current rover position is x:0 y:1
                Current rover direction is S "
undefined

最佳答案

我认为您必须递增/递减 theRover.location.xtheRover.location.y 而不是您正在使用的临时变量。

关于javascript - 火星探测器卡塔。可以转弯也可以前进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58758656/

相关文章:

javascript - 使用 Grunt 减少 SourceMap 绝对文件路径

javascript - 如何给echarts设置bar stack的label

javascript - Chrome 扩展内容页面的 wicked-good-xpath

javascript - JSP 特殊字符验证不起作用

javascript - 如何在 express 中装饰应用程序方法?

javascript - 有没有办法在 document.ready 之后允许 document.write ?

javascript - 数组和循环中输出的莫名其妙的变化

javascript - 客户端 javascript 可以创建一个太大而无法放入内存的文件下载吗?

c# - 您可以调用 Page.ClientScript.RegisterClientScriptBlock 的绝对最新时间是什么时候?

javascript - 如何在 javascript 中对这个对象数组进行分组或合并?