迷宫求解器循环问题java

时间:2012-11-07 19:45:02

标签: java maze

所以基本上我要做的就是用左手规则创建一个迷宫求解算法但是我遇到了一个我似乎无法通过的问题。

前两个代码是我正在使用的代码,我遇到的问题是,当我尝试循环if语句时,它只是继续绘制直线而不是向左转(在这种情况下)然后然后循环回到开头并画一条直到它再次碰到一堵墙。请注意,我知道这不是最终产品,我只是想确保改变第一个左转弯并且循环正常工作。

import se.lth.cs.ptdc.window.SimpleWindow;
import se.lth.cs.ptdc.maze.*;

public class MazeTurtle extends Turtle {
protected int Maze;

public MazeTurtle(SimpleWindow w, int x, int y) {
    super(w, x, y);
}

public void walk(Maze maze) {
    Maze m = new Maze(1);
    Turtle t = new Turtle(w, m.getXEntry(), m.getYEntry());
    t.penDown();


    while(true){
        if(m.wallAtLeft(getDirection(), getX(), getY())){
            t.forward(1);
        }

        if(m.wallAtLeft(getDirection(), getX(), getY())){

            t.left(90);
        }


            /** The "wallInFront" could be ignored for now */
        if(m.wallInFront(getDirection(), getX(), getY())) {

            t.left(-90);
        }
        if(m.wallInFront(getDirection(), getX(), getY())){
            t.forward(1);
        }

         SimpleWindow.delay(10);
    }
}
}

这是试图用给定算法解决迷宫的“测试”:

import se.lth.cs.ptdc.window.SimpleWindow;
import se.lth.cs.ptdc.maze.*;

public class MazeTest {

public static void main(String args[]) {

    Maze m = new Maze(1);
    SimpleWindow w = new SimpleWindow(600, 600, "MazeTest");
    MazeTurtle t = new MazeTurtle(w, m.getXEntry(), m.getYEntry());
    t.penDown();
    m.draw(w);
    t.walk(m);
}

}

这是我正在努力的迷宫课程: http://pastebin.com/gxSeEc2U

我正在使用的龟类: http://pastebin.com/0RqbVudn

5 个答案:

答案 0 :(得分:1)

我很确定现在应该可以解决这个问题

while ((m.atExit(x1, y1)) == false) {
        if (m.wallAtLeft(dir, x1, y1) == true) {
            t.forward(1);
            SimpleWindow.delay(10);
        }

        else if (m.wallAtLeft(dir, x1, y1) == false) {
            t.left(90);
            t.forward(1);
            SimpleWindow.delay(10);
        }

        if (m.wallInFront(dir, x1, y1) == true) {
            t.left(-90);
            t.forward(1);
        }

答案 1 :(得分:0)

尝试以下方法。这应该检查左边是否有墙,如果有,则前进1。如果左侧没有墙,它将向左转90度并向前移动1。

if(m.wallAtLeft(getDirection(), getX(), getY())){
    t.forward(1);
} else {
    t.left(90);
    t.forward(1);
}

答案 2 :(得分:0)

我对Java很新,但我会尝试这样的事情

for (int i=0; i<500; i++) {
        SimpleWindow.delay(10);

        if (m.wallInFront(getDirection(), getX(), getY()) == false) {
            t.forward(1);   
        }

        if (m.wallInFront(getDirection(), getX(), getY()) == true) {
            t.left(90);
        }
}

不要撞到墙上

答案 3 :(得分:0)

    while (true) {
        if (m.wallAtLeft(getDirection(), getX(), getY())) {
            if (m.wallInFront(getDirection(), getX(), getY())) {
                t.left(-90);
            } else {
                t.forward(1);
                SimpleWindow.delay(10);
            }
        } else {
            t.left(90);
            t.forward(1);
            SimpleWindow.delay(10);
        }
    }

答案 4 :(得分:0)

你很困惑,因为“左边的墙”给出了相对于龟面临的地方的答案。

使用您当前的算法......

  • 如果左边有一面墙,你会向前走。
  • 然后,如果左边有一面墙,则向左转90度。
  • (此时你将面对墙壁。)
  • 然后,因为你面前有一面墙,你会向右转90度。
  • 如果你面前有一面墙,你就会向前走。
  • 永远重复。

任何一次你向左转,因为左边有一面墙,你会立即右转,因为墙现在就在你面前。