我正在用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 :(
请帮我纠正此代码或提供有用的链接以实现此目的。
答案 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));