思想:A*寻路,目的是找出最优路径。因此,我们将地图铺成a*b的格子,方便地图的转换,笔者建立一个AStartNode类,代表一个地图块。
在地图上,除了起点和终点外,还会有不允许通过的障碍物。我们使用一个int型二维数组表示int row[XNUM][YNUM]表示路面情况。
计算过程中,我们需要两个容器,openArray和closeArray,用来存储当前的开放列表和闭合列表。
关于A* 算法的思路和方法,我会在代码中加以描述。
计算过程:
1,创建节点类AStartNode (请允许我偷下懒,将节点继承自Object,以便使用封装好的容器__Array,如果愿意,可以封装一个能存储非Object对象的容器,会更加适合,不过使用上并无太大关系)
.h/
class AStartNode : public Ref
{
public:
int m_x;
int m_y;
int m_g;
int m_h;
int m_hx;
int m_hy;
AStartNode(int x = -1,int y = -1);
bool isInArray(__Array* array);//判断节点是否在数组中
bool equalTo(AStartNode* node);//判断两节点是否代表同一位置
private:
};
//cpp//
AStartNode::AStartNode(int x,int y):m_x(x),m_y(y)
{
m_x = x;
m_y = y;
m_g = 0;
m_h = 0;
m_hx = -1;
m_hy = -1;
}
bool AStartNode::isInArray(__Array* array)
{
for (int i = 0; i < array->count(); i ++) {
AStartNode* node = (AStartNode*)array->getObjectAtIndex(i);
if (this->equalTo(node)) {
return true;
}
}
return false;
}
bool AStartNode::equalTo(AStartNode *node)
{
if (m_x==node->m_x&&m_y==node->m_y) {
return true;
}
return false;
}
.h///
//行数
#define XNUM 7
//列数
#define YNUM 6
class AStartMethod
{