本系列为笔者初学c/c++和游戏AI开发的学习过程,算法为主,不涉及到具体的游戏开发软件学习(如unity,虚幻4等),若有错误请在评论区留下批评意见。
对于图来说,广度优先搜索的过程也是一样的。直到把一个节点的全部子节点遍历完,才会进行下一个节点的遍历。
广度优先搜索的实现可归纳为以下几个步骤:
对应在游戏场景中,整个分割后的地图就是一个个节点组成的图(数学上),每个节点的子节点就是该节点周围的8个节点。
因此,与A*算法类似,我们用一个openList存储未遍历的节点,closeList存储遍历过的节点,并且返回closeList列表当做需要渲染的搜索路径。
这里笔者犯了个错误,应该先讲BFS再讲A*算法,因为A*算法是BFS算法的改良,很多概念应该先理解了BFS才更好。
我们用指针来记录从起始节点A到目标节点B的路径节点,并返回一个列表:

在算法主体 findPath()方法中实现BFS:
在代码实现过程中,我们因为项目需求而将BFS算法的步骤做了简单的拆解,不仅记录全部的搜索过程,还记录了一条从A到B的路径。
当然,图里的步骤 2.1 需要消耗大量的计算资源,后面如果有需要可以再进一步的优化。
由于我们之前在Game类中编写大地图的时候,已经为项目拓展留下了空间,因此只要在原来的基础上加入新的模块,用来获取BFS算法返回的结果即可。
参考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/141000.html