终于把AStar搞定
哈哈,现在我已经把AStar搞定了哈,经过几天的努力,现在的寻路基本没问题了。谢谢老师的帮忙,也谢谢一位新朋友Jonlee的帮忙。哈哈,我已经把他的BLOG设为了友情。
现在要实现动态地图转换,剩下的东西还有很多,单方面的寻路搞定了,还要把Monster结合起来。呵呵,事情有时候没有我想的那样简单,还是自己一步一步的做吧。
呵呵,开发的时间我和同事们建立了一个WOW的私人服务器,哈哈在办公室内玩。昨天又和永存打乒乓,最近他技术进步好大哦。
时间在一天一天的过去,项目的工程也进展的得好快好快。但剩下的时间不多了,我想好好的过一个大年,所以,只有在这之前多忙乎吧。
在AStar中,我大概提供了如下方法:
namespace GamePlay
{
//地图节点类型枚举
enum asPointType
{
OPEN, //属于open表
CLOSE, //属于close表
UNKNOWN, //未知
};
//简单坐标结构
struct asPoint
{
int x,y;
};
//地图节点结构
struct asMapNode
{
int px,py; //父节点坐标
int x,y; //坐标
bool blocked; //是否是“墙”
asPointType type; //节点类型
int f,g,h; //总的估价,起点到该点的实际代价,终点到该点的估计代价
bool step; //是否是最终路径一部分
};
typedef struct AsPath
{
int x[256];
int y[256];
int step;
}AsPath;
/////////////////////////////
//AStar类的声明
class AStar
{
public:
public:
AStar();
//读取地图
void SetMap(bool _map[8][8]);
//显示最终路径
AsPath GetPath();
//设置起点
void SetStartPoint(int x,int y);
//设置终点
void SetEndPoint(int x,int y);
//计算路径
bool JudgePath(bool _useEightAround/*搜寻8个方向*/);
//显示最终路径节点
AsPath ShowPath();
private:
//在Open表中查找估价值最小的节点
asPoint FindBestPath();
//计算并设置节点估价值
void SetASEvaluating(int y,int x,int cg,asPoint pr);
//估价函数
int GetEvaluatingH(int x,int y);
//设置周围8个节点的估价值
void Set_Around(bool _eight = false);
//地图宽
int m_iMapWith;
//地图高
int m_iMapHeight;
//起点
asPoint m_asPStart;
//终点
asPoint m_asPEnd;
//当前节点
asPoint m_asPCurrent;
AsPath _t;
//当前节点需要的步数
int m_iCurrent_g;
//当前x坐标
int m_iCurrent_x;
//当前y坐标
int m_iCurrent_y;
//当前Open表中估价最小的点
asPoint m_asPBestNode;
//地图
asMapNode* m_map[1000];
};
}
具体的实现等我把整个进行封装后将提供在我的引擎内。
加油吧~~~
Categories: Garfield's Diary