つまり、基本的に私がやろうとしているのは、左側のルールを使用して迷路を解くアルゴリズムを作成することですが、私は合格できないように見える問題に直面しています。
最初の2つのコードは私が使用しているコードであり、私が抱えている問題は、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