Okay So I started programming a pathfinding algo in Java. It doesn’t seem to work, I can’t figure out why… Can anyone offer a better way to do it or a fix to this?
public ArrayList<Node> getPath (Node start, Node end) throws Exception
{
int height = Node.MAP[0].length;
int width = Node.MAP.length;
ArrayList<Node> path = new ArrayList ();
Node[] neighbours = new Node[0];
int steps = 0;
Node[][] map = getNodes (height, width);
int endX = end.getX ();
int endY = end.getY ();
map[endX][endY].distance = 0;
while (true)
{
boolean madeProgress = false;
for (Node mainPoint : getAllNodes (height, width))
{
if (mainPoint.isValidMove ())
{
int passHere = mainPoint.distance;
for (Node movePoint : getValidMoves (mainPoint))
{
int newPass = passHere + 1;
int x = movePoint.getX ();
int y = movePoint.getY ();
if (map[movePoint.getX ()][movePoint.getY ()].distance > newPass)
{
map[movePoint.getX ()][movePoint.getY ()].distance = newPass;
madeProgress = true;
}
}
}
}
if (!madeProgress)
{
break;
}
}
int pointX = start.getX ();
int pointY = start.getY ();
while (true)
{
Node lowestNode = null;
int lowest = 10000;
for (Node movePoint : getValidMoves (map[pointX][pointY]))
{
int count = map[movePoint.getX ()][movePoint.getY ()].distance;
if (count < lowest)
{
lowest = count;
lowestNode = movePoint;
}
}
if (lowest != 10000)
{
map[lowestNode.getX ()][ lowestNode.getY ()].isPath = true;
pointX = lowestNode.getX ();
pointY = lowestNode.getY ();
} else
{
break;
}
if (map[pointX][pointY].equals (end))
{
break;
}
}
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
if (map[x][y].isPath)
path.add (map[x][y]);
}
}
return path;
}