For my current project I’ve been working with A* as a path-finding solution.
Basically it’s a way to get from point A to point B.
This is used for AI in games mostly on tiled based games, It’s very simple to understand and implement.
As A* traverses the graph, it follows a path of the lowest known cost, keeping a sorted priority queue of alternate path segments along the way. If, at any point, a segment of the path being traversed has a higher cost than another encountered path segment, it abandons the higher-cost path segment and traverses the lower-cost path segment instead. This process continues until the goal is reached.
The major choke point is the heuristic used to calculate which node to take next. I’ve started by using Manhattan Distance.
Although it works fast it’s not accurate and if I forced for finding the shortest possible it was rather slow for my 80×44 grid (3520 tiles), sometimes taking 3-4 seconds to find a path.
I decided to take another approach and using Diagonal Shortcut, its primary advantage is that, because it is balanced, it is able to fully consider small modifiers like a turning penalty or influence map modifier like having a non walkable tile, a rock, a tree, whatever. It is a bit slower than the Manhattan method, though.
In case you are wondering the 10 and the 14 are to define if it’s a diagonal or a horizontal/vertical movement since diagonals take longer to traverse than straight lines of course.
It’s not that Manhattan is worse and you shouldn’t use it, it all depends on the application your using.
* On a square grid that allows 4 directions of movement, use Manhattan distance.
This is a video I’ve done using Manhattan distance using tile grids generated from a black and white image.