A*寻路算法——一种寻找从起点A到终点B的有效路径的算法,游戏设计中的角色移动经常会采用这种算法来实现。
说明:由于是初学者,对算法的理解还不够透彻,下面的分析过程,只考虑最简单的情况——平面四个方向(上,下,左,右)的搜索。
下图中的 S 代表起点(start), E 代表终点(E),中间有填充色的区域为 障碍 ——不可穿过,需绕行。
1、[ 开始分析算法前,先了解几个算法中要用到的量 ]
- 1、下图中每一个 方格 定义为一个节点,每个节点包含以下几个属性
- 横向的 x 坐标(左上角方格为 0,横向移动x不变,纵向移动x进行加减 1)
- 纵向的 y 坐标(左上角方格为 0,纵向移动y不变,横向移动y进行加减 1)
- F的值---> F=G+H ,这个F的值,用来判断接下来要选择哪个方格来走的作用。
- G的值--->当前点距离起点的步数,也就是当前点从起点出发已经走了的步数。
-
G的计算规则:由 方格(节点)A 移动到 方格(节点)B ===> G=G+1
-
- H的值--->当前点距离终点的步数,也就是当前点到终点的话,接下来可能会走的步数。
-
H的计算规则:由 方格(节点)A 移动到 方格(节点)B ===> H=H+1
-
- parent--->用来存储当前节点的父亲节点,作用是为后续的寻路结果做标记。
- 2、利用两个链表来分别存储 [ 已经走过的方格(节点) ] 和 [ 将要选择经过的方格(节点) ]