基于A*搜索算法迷宫游戏开发
迷宫游戏分解:分为三部分,迷宫的自动随机生成,迷宫行走的轨迹设定,A*迷宫自动搜索路径。
(该图为其他博主的图,拷贝学习)
随机生成迷宫可以用到多种算法,包括深度优先遍历、随机prim算法、递归回溯算法:
DNF深度优先遍历算法:深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,一般用堆数据结构来辅助实现DFS算法。其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。(按照一定的顺序遍历树,然后将数据放入栈中,结束遍历后弹出栈内所有元素,结束算法)
BFS广度优先遍历算法:Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。BFS属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。一般用队列数据结构来辅助实现BFS算法。
A*算法:(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,公式表示为: f(n)=g(n)+h(n), 其中, f(n) 是从初始状态经由状态n到目标状态的代价估计, g(n)是在状态空间中从初始状态到状态n的实际代价, h(n) 是从状态n到目标状态的最佳路径的估计代价。保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取(或者说h(n)的选取)。
我们以d(n)表达状态n到目标状态的距离,那么h(n)的选取大致有如下三种情况:
- 如果h(n)<d(n)到目标状态的实际距离,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。
- 如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。
- 如果h(n)>d(n),搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。
A算法的特点:A算法在理论上是时间最优的,但是也有缺点:它的空间增长是指数级别的。
IDA算法:这种算法被称为迭代加深A算法,可以有效的解决A*空间增长带来的问题,甚至可以不用到优先级队列。
可以利用二维数组绘制地图,二维数组在游戏里面也应用很多,比如贪吃蛇和俄罗斯方块,其原理就是移动数组方块。很多游戏也将二维数组铺满整个地面。