Liquid Digital Lab

Pathfinding in Games - Using A* in Director

Posted 2 years, 9 months ago by Simon

 

Path finding is the art, or is it theory, of calculating the best route from A to B. This isn’t always straightforward, particularly when solid obstacles are placed in the way.

The A* algorithm is one of the most commonly used methods in games these days, and to avoid this web page turning into a book, I’ll keep this overview of the techniques involved as simplistic as possible - in doing so, I may take a few liberties with some of the more in-depth stuff so please excuse me if I miss anything out.

The little demo game above shows my experiment in using A*. To test it, you simply drag the green target to a new location and click the ‘GO TO TARGET >’ button. The little yellow dot will then speed off, making its way to the target.

How does this work? Well, for a start the dot sees the maze as a grid made up of squares - in this case each square is 5 x 5 pixels. A higher resolution (e.g. 1 x 1) would have led to greater accuracy, and 8 x 8 might have satisfied the true tile-game traditionalists, but 5 x 5 it is. The lack of resolution adds to the retro feel, and also helps to show that there is actually a grid involved here, giving slightly clunky turns around corners.

The grid is referenced, as in all tile-games, as a list (or array). Within the list are sub-lists. This grid is 128 squares wide x 96 squares high (640 x 480 pixels divided into 5 px segments). The list has 96 items (one for each row), and each item is in turn a list of 128 items (one for each unit in the row). Examining item [10][128] for instance would reveal the value stored in the last item of the 10th sub list. The values stored in the list are either 10 or -1, representing clear space (black) or solid walls (red) respectively.

When you click ‘GO’ the little dot starts to calculate the best way to the target. In simple terms it will start from it’s own location, and move out a square at a time, either accepting them as possible moves, or rejecting them either because they’re a solid wall or they ‘cost’ too much. It calculates the expense of a square by adding 10 points for each square it would travel from the starting point to get there, and also adding 10 for each additional square it ‘thinks’ there will be left for it to reach the target point following the current path (this is essentially a well-educated guess - google heuristic’ and you will find plenty of people who can explain it better than I can). It will do this until it reaches the target square. By this point it’ll have several likely routes to take, so it does a quick track backwards with the same calculation and arrives at the start point having decided the ‘cheapest’ route. All of this without moving at all! Once a list of squares to visit on the journey is ready, the dot simply travels through them.

You might wonder why I bothered giving clear squares a value of ten, when one would have done just as well. The reason is to allow scope to introduce other types of squares, which may have a lower cost when used on the journey, paths for instance as opposed to rough terrain would have a lower cost and therefore a lower value assigned to them. It’s using the algorithm in this slightly more advanced way that makes games more interesting and, when workload allows, I’ll work up a more game-like example of path finding across different terrains, as well as tidy up my code a little to avoid some of the slight errors of judgement that the dot makes occasionally.

Comments on 'Pathfinding in Games - Using A* in Director'


Very impressive will have to give this a try :o)

Richard Blackmore - 3 July 2008

Leave a Comment

Three D Clock

Classic clock built in processing

Posted by Lloyd - Comments (0)

This Happened #5

Lloyd gets chance to go along to the 5th gathering of This Happened

Posted by Lloyd - Comments (0)

Tom survives in one piece!

Tom makes it back to the office through 19 peaks over 149 miles, 60 flood warnings, 60mph gusts and 48hours of torrential rain, all in the name of MS Society, Wheels4Life and a weekend to remember!

Posted by Tom - 3 Comments (3)

Liquid goes Coast to Coast

Inspired by his managers previous fundraising wetsuit exploits, our newest designer Tom will be tackling the coast to coast bike ride this September.

Posted by Tom - Comments (1)

Liquid Artwork

Have a look at the artwork we created for the front office

Posted by Lloyd - 3 Comments (3)

Decisions, decisions… A Bit More Game AI

Game AI goes a few steps forwards, and 2000 years into the past…

Posted by Simon - 3 Comments (3)

Ever Won The Lottery?

Winning The Big One!
I recently read somewhere that winning the UK national lottery is easy. All you have to do is …

Posted by Simon - Comments (1)

3DS Max - Basics and Blueprints

The start of a series of tutorials in 3ds max from Liquids latest addition to the creative team.

Posted by Lloyd - 9 Comments (9)

Sound Reactive Sketch

We created this experimental Music Visualiser in processing & minim sound library.

Posted by Lloyd - 2 Comments (2)

Pathfinding in Games - Using A* in Director

Discover the joys of the A* pathfinding algorithm in our retro Director maze

Posted by Simon - Comments (1)

Colour Clock Screensaver

We’ve made an animated clock screensaver. You can have it too.

Posted by Ben - 2 Comments (2)

Using the Flash Tween Class

Trying to create realistic bouncing balls or elastic objects in Flash? Ben Stevens shows us the easy way to code motion using the Flash Tween Class.

Posted by Ben - 6 Comments (6)

A Jungle Jumble Using Lists in Director

What do you get if you cross a monkey, an elephant and a giant chicken-thing? Simon Edwards tries to explain using lists in Director.

Posted by Simon - 3 Comments (3)

Lloyd Survives the 2007 London Triathlon

Liquid’s very own budding triathlete successfully completes the Michelob ULTRA London Triathlon in a time of 2 hours and 42 minutes. Find out how he got on.

Posted by Lloyd - Comments (1)

Simple AI in Director

Simon Edwards discusses some of the techniques that developers call upon when programming games, particularly for defining logic that the computer will use for taking a turn in a 2-player game scenario.

Posted by Simon - Comments (0)

Ruby on Rails Tutorial - An Online DVD Catalogue

John Cove takes us through the process of making an online catalogue using RoR.

Posted by John - Comments (0)

Why write an ActiveX control?

Howard Peters discusses the advantages of using ActiveX, and explains how to create your own simple ActiveX control.

Posted by Howard - Comments (0)

Nichola’s Placement Year

Nichola, our resident student placement, has now been with us for a whole year and will be leaving us soon. So we asked her what it’s been like to work with the Liquid team.

Posted by Nichola - Comments (0)

Kinetica Soundwaves Exhibition

Exhibition visit

Posted by Ben - Comments (0)

PHP Tutorial - Creating a Quiz

John Cove explains how to use HTML and PHP to create an online quiz.

Posted by John - Comments (0)

Director Tutorial - Vector Font Outlines

Simon Edwards demonstrates an undocumented Director feature enabling you to map out a string of text in a vector cast member.

Posted by Simon - Comments (0)

HDR Photography

HDR (High Dynamic Range), is a software based, photographic technique that extracts tonal information from multiple exposures of the same shot. If you exposure bracket the same shot, you can merge all 3 images into one, then, using the data from all 3, create one output file which preserves accurate details from all exposures, bringing out highlights from the shadows.

Posted by Darren - Comments (0)

Happy Birthday To Us!

Liquid Digital Ltd has reached the end of its first financial year. There’s no time for cake and a candle though - there are some big things on the horizon for the first quarter of Year 2. Watch this space for news soon.

Posted by Simon - Comments (0)

Director Tutorial - Counting Down To A Launch Date

Tutorial written by our resident Director Guru, Simon Edwards.

Posted by Simon - Comments (0)

Lloyd in a wetsuit

Our creative leader will be braving the elements by competing in the Michelbob ULTRA London Triathlon on 4th August 2007.

Posted by Ben - Comments (0)