游戏算法实践——A星寻路
RudolphHamm
9年前
来自: https://segmentfault.com/a/1190000004503119
先展示效果图:
如图中亮绿色点为起点,蓝点为终点,白色为墙体不可行走。黄色点区域为被试探到的位置,绿色的路径为最后的最短路径。其中这里移动规则是只能上下左右移动。
关于A星算法,大家可以去google。这里展一下本项目A星算法的部分(思路):
+ 创建一个open集合,一个close集合 + 把起点加入close集合,并把它设为Current节点 + 重复如下过程: + 查找Current节点的相邻节点(上下左右) + 如果节点不是墙也不在close集合并且也不在open集合的,计算G值H值,设置Parent为Current节点,然后加入到open集合 + 如果已经加入了open集合,那么查找一下是不是从Current节点到这个节点G值更小,如果是那么改变这个节点的G值为更小值,Parent指针指向Current节点 + 如果节点是终点,那么跳出循环 + 遍历open集合,查找F值最小的节点(F=G+H) + 如果找到了,把这个节点移到close集合 + 如果没有找到,并且open表又为空了,那么表示找不到路径了,跳出循环 + 循环后如果没找不到路径,那么结束 + 如果找到路径,那么从终点开始,在close表中通过parent指针来寻找路径,直到起点
大家可以通过github来参考具体代码。
工程实现了编辑地图,保存地图(为下次打开使用)功能。工程使用cocos2d-x3.x引擎。