📄 asuanfa.h
字号:
#ifndef Asuanfa_H
#define Asuanfa_H
// 从上面#ifndef开始到#endif结束是头文件内容
typedef unsigned long ADWORD;
class AstarPathFind
{
protected:
struct TAstarNode
{
ADWORD Pos; // 该点的坐标(16,16)的模式保存(y,x)
short ActualCost; // 保存从起点到该节点的实际开销
short EstimateCost; // 保存此点的估价开销
short SumCost; // 上面两者之和
TAstarNode *Father; // 此点的父节点
TAstarNode *Prev; // 在Open或者Next中的上一个节点
TAstarNode *Next; // 在Open或者Next链表中的下一个节点
char Modified; // 该节点是否被修改过,记录而备清除1空,2 Open,4 Close
short DirWalked; // 有字节点的方向(未用)
short DirFrom; // 从哪个方向来的(未用)
};
TAstarNode **Node; // 对应地图中每个节点
TAstarNode *Open; // 保存没有处理的按估计值排序的节点
TAstarNode *Close; // 保存处理过的节点
TAstarNode **Modify; // 保存修改过的节点
int height; // 地图的高度
int width; // 地图的宽度
ADWORD MaxSize; // 最大面积即height*width
ADWORD ModifyPoint; // Modify数组的指针
ADWORD OpenCount; // Open队列中的节点数目
ADWORD CloseCount; // Close队列里面的节点数目
ADWORD OpenLimited; // Open队列最多节点数目
ADWORD CloseLimited; // Close队列最多节点数目
short DirMask; // 要搜索方向的标志,0-7位为从上开始顺时针七个方向
ADWORD MinPos; // 终点或最接近终点的节点
short TargetX; // 终点坐标
short TargetY;
char (*MoveAble)(short x,short y); // 检查地图是否可以移动函数指针
short (*JudgeCost)(short,short,short,short); // 取得估计值的函数指针
char AddToOpenQueue(TAstarNode *node); // 将节点排序加入Open队列
char GetFromOpenQueue(); // 从Open队列取出最小的并放入Close队列
char PopCloseStack(); // 取出Close队列中的节点
void ClearModified(); // 清除所有搜索记录
char TryTile(short x,short y,TAstarNode *Father,char FromDir);
public:
int Create(int map_w,int map_h,char (*MoveCheck)(short x,short y),short (*JudgeFun)(short x,short y,short dx,short dy));
int Release();
virtual int FindPath(short startx,short starty,short endx,short endy);
int GetPosPath(short *PosXY,int maxpos);
int GetDirPath(char *Dirs,int maxpos);
void SetJudgeFun(short (*JudgeFun)(short,short,short,short));
void SetMapCheck(char (*MapCheck)(short,short));
void SetOpenLimited(long OpenLimited);
void SetCloseLimited(long CloseLimited);
void SetDirMask(long DirMask);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -