创建 A* 节点¶
首先,定义一个空的 AStarNode 类,如下所示:
这段代码定义 AStarNode 类,以及名为 AStarNodePtr 的 std::shared_ptr 类型定义,让创建指向类的安全指针更容易。
接下来,在类的公共作用域中,声明节点 x 位置、y 位置、成本和节点分数的成员变量:
此外,你需要一个引用父节点的 AStarNodePtr 类型的公共成员:
声明完所有成员变量后,声明一个在创建实例时初始化它们的公共构造函数,如下所示:
AStarNode(int x, int y, int cost, AStarNodePtr p,
int score = 0)
: x(x), y(y), g(cost), score(score), parent(p)
{}
现在,为了让创建安全指针更容易,添加一个这样的静态辅助函数:
static AStarNodePtr makePtr(
int x, int y, int cost,
AStarNodePtr p,
int score = 0)
{
return AStarNodePtr(new AStarNode(x, y, cost,
p, score));
}
这个 makePtr() 函数创建 AStarNode 的新实例,并返回包装在 AStarNodePtr 中的实例。
让我们回顾一下。AStarNode 类有成员变量 x、y、g、score 和 parent。类构造时,所有这些成员都用传给构造函数的值初始化,score 除外,它是可选的(因为你只在复制 AStarNode 实例时使用它),未提供时设为 0。
接下来,定义目标坐标时计算启发式的公共成员函数: