1

所以我的代码是

function start(){
    while(frontIsClear()) {
        move();
    }
    yesWall();
    noWall();
}


function placeBall() {
    putBall();
}

function yesWall() {
    while (frontIsBlocked()) {
        putBall();
        turnLeft();
        move();
        turnRight();
    }
}


function noWall() {
    while (frontIsClear()) {
        turnLeft();
        move();
        turnRight();
        yesWall();
    }
}

这使得 Karel the Dog 在 frontIsBlocked 并向上移动时放置一个球。当前面清理干净后,他向上移动并重复yesWall功能。但是我在最后他放置球然后移动时遇到了麻烦。我不希望他这样做。我希望他向左转。我已经放置了一个 GIF 来显示正在发生的事情。 在此处输入图像描述

我只是不知道现在该怎么办。我知道使用 frontIsBlocked 条件不是一个好主意,但这是我能想到的最好的方法。

4

4 回答 4

0

你可以试试这个:

function start(){
    while(frontIsClear()) {
        move();
    }
    turnLeft();
    while(frontIsClear()){
        if(rightIsBlocked()){
             putBall();
            move();
        }else{
            move(); 
        }
    }
    putBall();
}
于 2019-03-03T00:52:24.010 回答
0
function start(){
    while(frontIsClear()){
        move();
    }   
    turnLeft();

    while(frontIsClear()){

        if(rightIsBlocked()){
            putBall();
            move();
            while(rightIsClear()){
                move();
            }

        }
        if(frontIsBlocked()){
            putBall();
        }
    }
}
于 2018-03-24T17:27:58.493 回答
0

如果你走到墙边,然后左转,然后直走,放球……可能会有所帮助……像这样:

function start() {
    moveToWall();
    decorateFence();
}

function moveToWall() {
    while(frontIsClear()) {
        move();
    }
}

function decorateFence() {
    while(frontIsClear()){ //Since karel should not bump into the wall at any cost, put this while  front is clear first
        if(rightIsBlocked()) {
            putBall();
            move();
        }else{
            move(); //this way, karel is already pointing north, and if the right is blocked(if there's a fence) then a ball is put and karel moves, if there is no fence there, then karel moves anyway. 
    }
}

希望这有帮助!

于 2017-09-27T01:36:05.980 回答
0

在 Karel 碰壁的地方,放一个 if 语句。

function yesWall() {
    while (frontIsBlocked()) {
        putBall();
        turnLeft();
        if(frontIsBlocked()){
            break;
        }
        move();
        turnRight();
    }
}
于 2017-03-03T16:54:28.127 回答