请这样回答面试官:什么是A星寻路

引言

本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。

很多小伙伴一听到A星算法,第一反应就是它就是个寻路的算法,我会。的确是,掌握了算法的人,自然觉得容易。但是对于游戏开发新人或者刚接触A星算法的人,这个算法还是很难很复杂的。而且让掌握的人在游戏项目中运用,也不一定能第一时间敲出来。下面跟随笔者一起来看看。

本文源码和源工程在文末获取,小伙伴们自行前往。

什么是A星算法?

A星算法(A-star algorithm)是一种广泛应用的路径规划算法,它被设计用来在图形或网络中寻找两个节点之间的最短路径。

A星算法的原理

A星算法是一种启发式搜索算法,结合了广度优先搜索和最佳优先搜索的特点。其核心思想是通过评估每个可能的路径,以找到从起点到目标节点的最佳路径。在A星算法中,每个节点都有两个关键值:

  1. G值(代价):表示从起点到当前节点的实际代价,即已经走过的路径长度。
  2. H值(启发式值):表示从当前节点到目标节点的估计代价,即预计还需要走多远才能达到目标。

A星算法的步骤

简单列举一下A星算法的步骤,大家写代码时可以根据算法的步骤直接"翻译"过来就行:

  1. 创建一个开放列表和一个关闭列表,用于存储待探索和已探索的节点。
  2. 将起点添加到开放列表,并将其G值设为0。
  3. 重复以下步骤直到找到目标节点或开放列表为空: a. 从开放列表中选择F值最小的节点(通常是H值+G值最小的节点)。 b. 将该节点从开放列表移至关闭列表。 c. 对该节点的邻居节点进行遍历,计算它们的G值和H值。 d. 如果邻居节点不在开放列表中,将其添加到开放列表,并更新其G值和父节点。 e. 如果邻居节点已在开放列表中,检查当前路径是否更短,如果更短则更新G值和父节点。
  4. 当找到目标节点或开放列表为空时,搜索结束。

A星算法的优势

  1. 完备性:如果存在可行解,A*算法能够找到最佳路径。
  2. 启发式搜索:通过使用启发式估计值,A*算法可以在大型图形中高效搜索,减少搜索空间。
  3. 适应性:A*算法可以根据不同问题的需求和启发式函数进行定制。
  4. 广泛应用:A*算法在多个领域都有成功的应用记录,因此被广泛使用。

A星算法实践

1.打开上一篇文章的工程

如下图,笔者已经编辑好整个地图的阻挡信息(红色部分),蓝色原点是起点位置。绿色的是终点位置。白色的是路径点。

2.根据地图信息抽象化数据

创建网格,并且根据地图信息标记阻挡格子不可行走。

请这样回答面试官:什么是A星寻路_第1张图片

3.创建AStar类

创建一个开放列表和一个关闭列表,用于存储待探索和已探索的节点。并且将起点加入Open集设置G值为0。

请这样回答面试官:什么是A星寻路_第2张图片

4.检索路径

重复以下步骤直到找到目标节点或开放列表为空: a. 从开放列表中选择F值最小的节点(通常是H值+G值最小的节点)。 b. 将该节点从开放列表移至关闭列表。 c. 对该节点的邻居节点进行遍历,计算它们的G值和H值。 d. 如果邻居节点不在开放列表中,将其添加到开放列表,并更新其G值和父节点。 e. 如果邻居节点已在开放列表中,检查当前路径是否更短,如果更短则更新G值和父节点。直到到达终点检索结束。

请这样回答面试官:什么是A星寻路_第3张图片

5.构建路径

通过链表反向形成路径。

请这样回答面试官:什么是A星寻路_第4张图片

6.编写测试代码

依旧通过cc.Graphics去绘制起点、终点、路径和阻挡。

请这样回答面试官:什么是A星寻路_第5张图片

每次点击地图之后重新生成路径并且重新绘制。

请这样回答面试官:什么是A星寻路_第6张图片

7.结果演示

总结

A星算法是一种强大的路径规划算法,通过综合考虑实际代价和启发式估计,能够在游戏寻路中中寻找最佳路径。它的原理简单但功能强大,为解决许多游戏中的导航和规划问题提供了有力的工具。

本文的重点内容主要有以下几点,不知道小伙伴们是否已经理解:

AD:笔者已经上线的小游戏《填色之旅》《贪吃蛇掌机经典》《重力迷宫球》大家可以自行点击搜索体验。

感兴趣的小伙伴记得关注"亿元程序员"哦,一位有着8年游戏行业经验的主程。学习游戏开发不迷路。感谢您的关注,希望能给到您帮助, 也希望通过您能帮助到大家。

喜欢的可以点个、点个在看哦!请把该文章分享给你觉得有需要的其他小伙伴。谢谢。

你可能感兴趣的:(前端cocos游戏开发寻路算法)