魔塔添加新的功能!
上一节我们做到了寻找可行走路径,但是不够
因为魔塔中充斥着各色各样的怪物,门。我们可行走的路径实在太少了!
现在我们作为一名玩家,想通关游戏,我们大概每层要做两件事情
- 用损血最少的方式找到所有宝物
- 用损血最少的方式到达下一层
第一件事情可能要用到我们的强化学习去弄了
所以这里我们关注的是第二件事情
我们想到下一层,再细化一下程序需要做什么?
- 找到下一层的路径
- 判断每条路径的损失(消耗血量、钥匙、陷阱等)
这里回到我们上一节的算法,做到第一步很简单,做到第二步需要添加比对条件,一旦地形复杂了速度就很慢!
所以我们需要一个新的算法来实现这个功能。
这里我们采用A算法来实现它(A也是除3D游戏外的主流寻路算法之一)
A*算法介绍
这里参考了A*介绍
这里就简单的概括一下,有兴趣的朋友可以参考上面的网站学习。
上一节我们介绍过Dijkstra算法,主要就是维护两个表open list和close list.然后通过松弛open list一步一步向外扩散标记每个点的最短路径。
A*算法就是在此之上进行改造,在标记最短路径的时候从(a>b)这种比较方式变成了(价值(a)> 价值(b))。
再简单一点说就是
这个价值:F = G + H
G可以简单理解成是之前的路径数,走到这里耗费的成本(步数或者加上血量损失之类的)
这个H就是预估成本,就是估算到终点的成本,这个预估成本纯度很高,通过调整H可以提高算法的效率。高效率才能让算法及时反应在操作上,谁也不想点一下、卡一下对吧?
A*算法实现
施工中
H实现
施工中