我遇到了探路者的问题(这是我的第一个,所以这是意料之中的):它并不总是采用最短的方式。例如,如果我想向下走一格,路径将是:向左一格,向下一格,向右一格。
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”的箱子,即障碍物。