dev-develop
dev-developAStar pathfinding implementation in php
MIT
The Development Requires
by Vitalij Mik
AStar path finding implementation in php
A-star is a path finding algorithm, written in PHP. It can find the shortest path between two points in a two dimensional array by using different heuristics., (*2)
composer require blackscorp/astar
first create a two dimensional array for your map, (*3)
$map = [ [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 1, 1], [0, 0, 0, 1, 0], ];
each key represent the x and y position of the map. each value of the array represents the costs, A-star tries to find a way with lowest costs. you can use negative keys if your map requires it., (*4)
next convert the array to a Grid, a Grid is a collection of Nodes., (*5)
$grid = new BlackScorp\Astar\Grid($map);
now you can fetch nodes from the Grid like so, (*6)
$startPosition = $grid->getPoint(3,1); $endPosition = $grid->getPoint(0,0);
at the end pass the grid to the astar and search for the shortests path, (*7)
$astar = new BlackScorp\Astar\Astar($grid); $nodes = $astar->search($startPosition,$endPosition); if(count($nodes) === 0){ echo "Path not found"; }else{ foreach($nodes as $node){ echo $node->getY().'/'.$node->getX().'<br/>'; } }
by default diagonal directions are disabled, they can be enabled like so, (*8)
$astar->enableDiagonal();
as soon as the diagonal option is enabled, the algorithm use the Manhattan heuristic to find the shortest path., (*9)
Manhattan is not precise but the caluclation costs are low, however you can use another heuristics like Diagonal or Euclidean with following code., (*10)
$astar->setHeuristic(new BlackScorp\Astar\Heuristic\Euclidean());
you can also create a custom heuristic., (*11)
there are cases where you want to block a specific path completly, independant of the costs, you can do so with following code, (*12)
astar->blocked([3,2]);
this basicly means that in the initial map, (*13)
$map = [ [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 2, 2, 0, 0], [0, 3, 0, 1, 1], [0, 0, 0, 1, 0], ];
the values 3 and 2 cannot be passed., (*14)
Please feel free to make pull requests, there is still place for improvement, the Grid contains a two dimensional array which might be replaced by an SplFixedArray or something similar., (*15)
Run the tests to be sure nothing break., (*16)
A-Star is free software distributed under the terms of the MIT license., (*17)
AStar pathfinding implementation in php
MIT