A * Pathfinding java无法正常工作

时间:2014-09-12 08:58:05

标签: java android algorithm graph-algorithm path-finding

我正在用java创建一个迷宫游戏,并希望添加一个聪明的幽灵(如Pacman),向用户位置移动以抓住他。对于聪明的幽灵我选择了A * PathFinding算法,并在下面找到了实现这个算法的链接:

https://code.google.com/p/a-star/source/browse/trunk/java/PathFinder.java?r=8

https://code.google.com/p/a-star/source/browse/trunk/java/AStar.java?r=8

但代码并没有完全正常工作,我的意思是代码似乎只能找到从左上角到右下角的路径,而不是例如左 - 右 - 左 - 左下。

例如:

如果

 source = (0,0)
 Destination = (8,8)     // works perfectly..

如果

  source = (8,8)
  Destination = (0,0)     // doesn't  work :(

请帮我纠正此代码或提供有用的链接以实现此目的。

1 个答案:

答案 0 :(得分:3)

我认为问题出在代码的这一部分:

protected List<Node> generateSuccessors(Node node){
                List<Node> ret = new LinkedList<Node>();
                int x = node.x;
                int y = node.y;
                if(y < map.length - 1 && map[y+1][x] == 1)
                                ret.add(new Node(x, y+1));

                if(x < map[0].length - 1 && map[y][x+1] == 1)
                                ret.add(new Node(x+1, y));

                return ret;
}

此代码返回当前节点的邻居列表,但它只会向下和向右尝试。尝试为您要遵循的任何其他路线添加相应的代码,例如

if(y > 0 && map[y-1][x] == 1)
                ret.add(new Node(x, y-1));
if(x > 0 && map[y][x-1] == 1)
                ret.add(new Node(x-1, y));