NAME
   AI::Pathfinding::AStar - Perl implementation of the A* pathfinding
   algorithm

SYNOPSIS
     package My::Map::Package;
     use base AI::Pathfinding::AStar;

     # Methods required by AI::Pathfinding::AStar
     sub getSurrounding { ... }

     package main;
     use My::Map::Package;

     my $map = My::Map::Package->new or die "No map for you!";
     my $path = $map->findPath($start, $target);
     print join(', ', @$path), "\n";

     #Or you can do it incrementally, say 3 nodes at a time
     my $state = $map->findPathIncr($start, $target, undef, 3);
     while ($state->{path}->[-1] ne $target) {
             print join(', ', @{$state->{path}}), "\n";
             $state = $map->findPathIncr($start, $target, $state, 3);
     }
     print "Completed Path: ", join(', ', @{$state->{path}}), "\n";

DESCRIPTION
   This module implements the A* pathfinding algorithm. It acts as a base
   class from which a custom map object can be derived. It requires from
   the map object a subroutine named "getSurrounding" (described below) and
   provides to the object two routines called "findPath" and "findPathIncr"
   (also described below.) It should also be noted that
   AI::Pathfinding::AStar defines two other subs ("calcF" and "calcG")
   which are used only by the "findPath" routines.

   AI::Pathfinding::AStar requires that the map object define a routine
   named "getSurrounding" which accepts the starting and target node ids
   for which you are calculating the path. In return it should provide an
   array reference containing the following details about each of the
   immediately surrounding nodes:

   * Node ID
   * Cost to enter that node
   * Heuristic

   Basically you should return an array reference like this: "[ [$node1,
   $cost1, $h1], [$node2, $cost2, $h2], [...], ...];" For more information
   on heuristics and the best ways to calculate them, visit the links
   listed in the *SEE ALSO* section below. For a very brief idea of how to
   write a getSurrounding routine, refer to the included tests.

   As mentioned earlier, AI::Pathfinding::AStar provides two routines named
   "findPath" and "findPathIncr". "findPath" requires as input the starting
   and target node identifiers. It is unimportant what format you choose
   for your node IDs. As long as they are unique, and can be distinguished
   by Perl's "exists $hash{$nodeid}", then they will work. "findPath" then
   returns an array (or reference) of node identifiers representing the
   least expensive path to your target node. An empty array means that the
   target node is entirely unreacheable from the given source.
   "findPathIncr" on the other hand allows you to calculate a particularly
   long path in chunks. "findPathIncr" also takes the starting and target
   node identifiers but also accepts a "state" variable and a maxiumum
   number of nodes to calculate before returning. "findPathIncr" then
   returns a hash representing the current state that can then be passed
   back in for further processing later. The current path can be found in
   "$state-"{path}>.

PREREQUISITES
   This module requires Heap (specifically Heap::Fibonacci and Heap::Elem)
   to function.

SEE ALSO
   <http://www.policyalmanac.org/games/aStarTutorial.htm>,
   <http://xenon.stanford.edu/~amitp/gameprog.html>

AUTHOR
   Aaron Dalton - [email protected] This is my very first CPAN contribution
   and I am not a professional programmer. Any feedback you may have, even
   regarding issues of style, would be greatly appreciated. I hope it is of
   some use.

COPYRIGHT AND LICENSE
   Copyright (c) 2004 Aaron Dalton. All rights reserved. This library is
   free software; you can redistribute it and/or modify it under the same
   terms as Perl itself.