У меня проблемы с путеводителем (это мой первый, так что этого следовало ожидать): он не всегда выбирает кратчайший путь. Например, если я хочу перейти на один квадрат вниз, путь будет таким: один квадрат влево, один вниз, один вправо.
public void getSquares(){
actPath = new String[Map.x][Map.y];
isDone = new boolean[Map.x][Map.y];
squareListener = new SquareListener[Map.x][Map.y];
getSquares2(x,y,0,new String());
}
public void getSquares2(int x, int y, int movesused, String path){
boolean test1 = false;
boolean test2 = false;
test1 = (x < 0 || y < 0 || x > Map.x || y > Map.y);
if(!test1){
test2 = Map.landTile[y][x].masterID != 11;
}
if(movesused <= 6 && (test1 || test2)){
addMoveSquare2(x,y, path);
getSquares2(x+1,y,movesused+1,path+"r");
getSquares2(x,y+1,movesused+1,path+"d");
getSquares2(x,y-1,movesused+1,path+"u");
getSquares2(x-1,y,movesused+1,path+"l");
}
}
public void addMoveSquare2(int x, int y, String path){
if(x >= 0 && y>=0 && x < Map.x && y < Map.y && (actPath[x][y] == null || actPath[x][y].length() > path.length())){
if(squareListener[x][y] == null){
actPath[x][y] = new String();
actPath[x][y] = path;
JLabel square = new JLabel();
square.setBounds(x*16,y*16,16,16);
square.setIcon(moveSquare);
squareListener[x][y] = new SquareListener(x,y,path);
square.addMouseListener(squareListener[x][y]);
Map.cases.add(square);
}
else{
squareListener[x][y].path = path;
}
}
}
SquareListener — это простой MouseListener, который печатает местоположение квадрата и путь к нему. Map.x, Map.y — размер карты. getSquares2 вызывается с начальной точкой и рисует все квадраты, которые находятся на расстоянии 6 шагов, и рассматривает каждый случай со значением «11» как препятствие.
Не могли бы вы помочь мне найти, что я сделал неправильно?
Вот скриншот результата: http://img808.imageshack.us/img808/96/screen.gif Возможная цель — красные квадраты. Настоящий будет определен только тогда, когда игрок нажмет на один квадрат (MouseListener является SquareListener, он должен знать путь). Дома - это ящики со значением «11», препятствия.