A*搜索算法原理与控制台坦克大战AI实现

        最近在给自己的坦克大战升级AI  .让坦克具有AI那就要牵扯到自动寻路。寻路里面又分最优路径(距离最短)和最快路径(计算量最少 但可能会绕路)这两种本文都会讲到。第一种主流的就是A*算法了第二种网上叫Best First Search 最佳优先搜索。
          下面就开始讲讲A*理论上的一些东西。这些百度一下很多。但是看了很多都是模糊的理论没有代码,要么就是代码错误BUG一堆没法玩。没办法只能自己动手了。先上一张动图  程序最终样子。本程序带地图编辑器功能 ,可以自己绘制 边界   终点目标点 障碍。然后选择  A*算法还是BFS算 。进行演示。
                                                       
       在这个图中我们定义了一个[7x8]的矩形空间   起点 Start A点黄色坐标(1,3)    目标点Des B点坐标(5,4)
                                                     
                                                    A*里面最核心的公式  F=G+H;  
       G是什么? G就是每走一步代价。啥意思呢,就是你给你每走一步定义一个值。以上图  A点四周上下左右随便移动一格就是一步代价A本身G=0。这个值定多少随你。一般方便计算都取10,也就是移动一格G就+10。
                                                    
对于八方向的也同理 (本文讲四方向)斜角方向取G值√2倍(正方形的对角线长是边长的√2倍)方便计算一般取14。
       H是什么?,H叫估价函数。也就是起点到A点大概多远估计一下。A*搜索算法是一种启发式算法。之所以叫启发是因为它有一种策略指引它去寻找目标点。而不是像其他算法无目的的全遍历找到目标。这个估算函数怎么表示  有很多种曼哈顿法 欧氏法等。一般都是曼哈顿法。名字高大上 其实就是两个坐标点的 (x相减的绝对值+y相减的绝对值)  两点间的横向距离加上纵向距离   参照这个方法 A到B的H值就是|1-5|+|3-4|=5.一般实际计算时再乘10 和G值配合好计算。看下代码
 

//计算G值,G=从起点 A 移动到指定方格的移动代价,沿着到达该方格而生成的路径
//参数1 要去的节点
//参数2  目前在的节点
int Astar::CalcG(NODE *cur,NODE *pcur)
{
        //当前点移动到该点的代价 定义为10
        if (cur->x== pcur->x || cur->y== pcur->y)
                return 10;
        return 20;
}
//估值H  
//普通曼哈顿法   取(当前点x-目标x 的绝对值) +  (当前点y-目标点y的绝对值)  两者相加乘10
int Astar::CalcH(NODE *cur)
{   //控制台画方格是占两个字节 所以这边除以2
        return ((abs(cur->x -
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值