所以基本上我想做的是用左手规则创建一个迷宫求解算法,但我遇到了一个我似乎无法通过的问题。
前两个代码是我正在使用的代码,我遇到的问题是,当我尝试循环 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