Release: March 2013
Genre: Code Example
Made with: LibGDX (Java)
Compatible with: PC
So the basic story of this one is that a colleague of mine who also studies games programming was trying to work on his own A* Implementation as well, but was struggling on parts of the algorithm. So I figured I’d try myself, since I too haven’t attempted to write my own version for some time. My first attempt at it was back in first year University, and due to the poor resources I ended up giving up. It’s also very worthwhile that I at least get a working implementation done since Secret of Escape also uses pathfinding for some of the enemies.
After about two days of looking through online resources (I highly recommend anyone interesting in building their own to read this article) and help from some very helpful folks on Twitter, I successfully got a working implementation!
The source code is up online (click the view source link), the application was built using LibGDX but with a bit of tweaking the pathfinder and node classes could be used for other Java based engines. The classes are commented with all the steps for clarity.
How to ignore diagonal paths
If you go into PathFinder.java and look at the function SetOpenList, it checks all eight possible directions. If you want to ignore diagonal paths, you would instead do four directions (Up, Down, Left, Right) and ignore any that check two boolean if statements (e.g. if (ignoreUp & ignoreLeft)).
your library is great, thank you for sharing. How can I apply a pre-determined start and end point?
In GameState.java I set the nodes with the PathFinder’s SetGridNode function:
pathFinder.SetGridNode(screenX, screenY, GridNode.GridType.START);
pathFinder.SetGridNode(screenX, screenY, GridNode.GridType.END);
Where screenX and screenY are X and Y coordinates on the screen, should note that at this point it’s only limited to the size of the screen.
Hope that helps. 🙂
Thank you very much for your help, it’s appreciated. Now to add a background image instead of the white background. 🙂