私は Maze ソルバー アルゴリズムで作業していますが、行き止まりになり、このようにループに陥るまで、すべてが正常に機能しています。問題は、向きを変えたいときに十分なスペースがなく、正面の壁に面しているため、代わりに別の向きを変えて無限ループに陥ることのようです。
ここに私が取り組んでいる 2 つのコードがありますが、最初のコードが最も関連性の高いものです。
SimpleWindow
は、すべてが描画されるメイン ウィンドウなどです。クラスは、迷路とmaze
値(これらはすべてブール値)を生成するファイルです。wallAtLeft
wallInFront
atExit
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(4);
Turtle t = new Turtle(w, m.getXEntry(), m.getYEntry());
int x1 = m.getXEntry();
int y1 = m.getYEntry();
int dir = t.getDirection();
t.penDown();
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);
SimpleWindow.delay(10);
}
x1 = t.getX();
y1 = t.getY();
dir = t.getDirection();
System.out.println("X: " + x1 + "Y: " + y1);
}
}
}
すべてを描画するプログラムは次のとおりです。
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(4);
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