a-star算法

a-star搜索算法可以针对map-tiled类游戏中的任务的寻路提供一个比较快,搜索结果比较短的计算发法

原理

从起点开始,向周围的tile扩展,并且周围tile身上存储为parent,那有8个,到底下一步移到哪个里面,有三个值,F,G,H,G是当前的tile到起点的距离,H是当前tile到终点的距离(这个是估算距离),F=G+H,然后通过每次都选取F最小的tile,这样,这个tile距起点和终点距离最近,通过不断选取,可以得到一条路径

路径在哪里

通过tile->parent->parent->parent.......这样不断的获得parent,可以得到一条完整的路径

步骤分解

1,设置格子,并且选好起点终点
a-star算法_第1张图片

2,设置一些墙/障碍物

a-star算法_第2张图片

3,不断点击go按钮,就可以不断扩展了

a-star算法_第3张图片

如图,可见绿色为openlist,紫色边框为closelist,每个tile左上角是F,左下角是G,右下角是H,G的计算才用水平竖直取10,斜着的取14,H是预测值才用霍夫曼算法并且*50

算法描述

   1,把起始格添加到开启列表。
   2,重复如下的工作:
      a) 寻找开启列表中F值最低的格子。我们称它为当前格。
      b) 把它切换到关闭列表。
      c) 对相邻的8格中的每一个?
          * 如果它不可通过或者已经在关闭列表中,略过它。反之如下。
          * 如果它不在开启列表中,把它添加进去。把当前格作为这一格的父节点。记录这一格的F,G,和H值。
          * 如果它已经在开启列表中,用G值为参考检查新的路径是否更好。更低的G值意味着更好的路径。如果是这样,就把这一格的父节点改成当前格,并且重新计算这一格的G和F值。如果你保持你的开启列表按F值排序,改变之后你可能需要重新对开启列表排序。

      d) 停止,当你
          * 把目标格添加进了关闭列表(注解),这时候路径被找到,或者
          * 没有找到目标格,开启列表已经空了。这时候,路径不存在。
   3.保存路径。从目标格开始,沿着每一格的父节点移动直到回到起始格。这就是你的路径。


代码

=0;$i--){
	for($j=0;$j<20;$j++){
		echo 	"
".'
'; echo ''.'
'; echo ''.'
'; echo ''.'
'; echo '
'.'
'; } echo '
'; } ?>




	
		
		
	
	
		
0 0 0



















你可能感兴趣的:(a-star算法)