A*寻路原理可查看之前的文章:游戏AI中的寻路算法(A*算法)
上面的是C#,下面是用C++实现的Astart类(大致一样),main函数就要自己构造地图和随机:
//Astart.h
//路径的节点
struct Node
{
int x; //坐标
int y;
int G; //从起点到当前位置的值
int H; //从当前位置到终点预估的值
int getF(){
return G + H; } //和值 F=(G+H)
Node *parent; //指向前面的节点,找到终点可以退回到起点
Node(int x, int y, int G, int H, Node *p = nullptr)
:x(x), y(y), G(G), H(H), parent(p){
}
};
//坐标类
struct Vec2
{
int x;
int y;
Vec2(int x = 0, int y = 0) :x(x), y(y){
}
};
//A星寻路
class Astart
{
private:
vector<Node*> openList; //准备要走的路径
vector<Node*> closeList; //正在走的路径或已经走过的路径
Vec2 end; //终点
/*计算当前位置到终点位置预估的值
*@now 当前的位置
*@return 计算出H的值
*/
int getH(Vec2 now)