1

这是我尝试过的代码。

function main() {
  while (frontIsClear()) {
    //this tells karel to go and put beepers
    putBeeper();
    move();
  }
  if (frontIsBlocked()) {
    //this tells karel to change the direction if there's a wall
    if (facingEast()) {
      turnLeft();
      putBeeper();
      if (frontIsClear()) {
        //and this brings karel to the upper street
        move();
        turnLeft();
      } else {
        turnRight();
      }
    }
    if (facingWest()) {
      turnRight();
      putBeeper();
      if (frontIsClear()) {
        move();
        turnRight();
      } else {
        turnRight();
      }
    }
  }
}

当我运行代码时,它给了我一个错误。它说 ReferenceError: virtualDirection is not defined。请帮忙。谢谢。

是目标。是卡雷尔网站。

4

2 回答 2

1

该代码的问题在于它facingWest()似乎facingEast()不是函数。相反,它们是属性,所以使用facingEastand facingWest(即不带括号使用它们)。这消除了错误,但根据我的测试facingEastfacingWest它永远不会是真的,这意味着你不能让它以此为基础。

所以,我认为你必须编写一些不依赖于facing命令的代码。只要您可以假设卡雷尔从网格的左下角开始,您就可以在前面被挡住时转身,从左开始然后向右交替。像这样的东西应该可以工作,你只需要编辑它以确保它不会告诉你在遍历偶数网格结束时前面被阻塞。

function main(){
   while (leftIsClear()){
      putBeeperRow();
      turnForClearLeftRow();
      putBeeperRow();
      turnForClearRightRow();      
   }
   putBeeperRow();
}

function turnForClearLeftRow() {
   turnLeft();
   move();
   turnLeft();
}

function turnForClearRightRow() {
   turnRight();
   move();
   turnRight();
}

function putBeeperRow() {
   while(frontIsClear()){ 
      putBeeper();
      move();
   }
   putBeeper();
}
于 2020-07-18T11:20:27.420 回答
1

我改变了一点。这是适用于偶数和奇数网格的代码。

function main(){
   while (leftIsClear()){
      putBeeperRow();
      turnForCleanLeftRow();
      putBeeperRow();
      turnForCleanRightRow();
   }
   putBeeperRow();
}
function turnForCleanLeftRow(){
   turnLeft();
   move();
   turnLeft();
}
function turnForCleanRightRow(){
   turnRight();
   if (frontIsClear()){
      move();
      turnRight();
} else {
   turnRight();
   while (frontIsClear()){
      move();
   }
   pickBeeper();
  }
}
function putBeeperRow(){
   while(frontIsClear()){
      putBeeper();
      move();
   }
   putBeeper();
}
于 2020-07-21T16:10:49.933 回答