a 寻路算法 java_A*自动寻路算法—java版

本文详细介绍了如何实现自动寻路算法,通过计算F=G+H来寻找最短路径。文中通过实例展示了从A点到B点的路径搜索过程,并提及了openlist和closedlist的概念,以及如何通过记录父级方块来回溯路径。最后,作者分享了自动寻路的视觉效果,并表示愿意提供源码给有兴趣的读者。
摘要由CSDN通过智能技术生成

前段时间一直在写一个小游戏,需要用到自动寻路,于是就百度了一番,终于完成了,现在将原理及代码展示出来,方便有兴趣的朋友参考。

136039238_1_20180617120457223

说明一下,本次只展示了上下左右四个方向的移动。

如图:

136039238_2_20180617120457301

如果从A点走到B点,有很多条路线,如何自动找到路线,以及如何找到最短的路线,就是这次要解决的问题。

首先,需要讲解一下计算的公式,F=G+H,主要用于判断最佳路线。

G:(左上角数值)起点到当前点的消耗(即步数),比如C点,与A点是一个单位的距离,所以C点的G值为:1(D点的G值为:2)。

H:(左下角数值)当前点到终点的消耗,还是以C点为例,和B点的距离为5,所以C点的H值为:5(D点的H值为:4)。

F:(中间数值)F值为权益值,值为G+H,越小越好(用于最短路径的判断)。C点的F值为:6(D点的F值为:6)。

其次,需要定义两个集合,openlist(开启集合,需要向外扩散的点)和closedlist(关闭集合,已经扩散过的点)。

136039238_3_20180617120457363

①、先找到A点方块的上下左右四个方块,计算出各个方块的GHF值,然后将A方块放入closedlist中(已经扩散过了),将A方块的上下左右四个方块放入openlist中(需要继续向外扩散)。然后遍历openlist集合,向外扩散。

②、以C点方块为例,找到C点方块的上下右三个点(其中左边的A点方块已经在closedlist中,所以不考虑),计算出GHF值后,将上下右三个方块放入openlist中,将C点方块放入closedlist中。

PS:一定要注意,G的值,一定是前一个点的G值+1得到的。

一直向外扩散,当K点方块向外扩散的时候,周围方块包括了终点,将K点方块放入closedlist中,再将B点方块也放入closedlist中。。

此时的closedlist中,必然包括了从A点到B点的路线。那么,接下来就是如何取路线。

在第①步的时候,找到了A点方块的上下左右四个方块,在将这四个方块放入openlist之前添加一步:将这四个方块的父级方块设置为A方块。

在第②步的时候,找到了C点方块的上下右三个方块,也将这三个方块的父级方块设置为C方块,然后再放入openlist中。

同样,每次根据中心方块找到四周的方块的时候,都将四周的方块的父级方块设置为这个中心方块。那么在根据K方块找到四周方块的时候,你会发现,终点B方块的父级方块是K方块。

此时遍历closedlist,找到终点B方块,放入autowaylist中,然后再遍历closedlist,找到B方块的父级方块,让如autowaylist中。一直循环,直到找到起点A方块,放入autowaylist中,那么这个autowaylist集合就是路线。

以上就是自动寻路的原理,其实很简单,不要把它想的很难,多看两遍都能看懂的。

下面给大家看一下自动寻路的样式(灰色的障碍物是随机生成的)。

136039238_4_20180617120457426

没有格式的代码,实在是不好看,所以我这里发出来代码截图。如果有朋友想要源码的,可以留下邮箱,我会发给你的。

136039238_5_20180617120457973

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值