⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asuanfa.h

📁 在VC6.0下通过测试的A*算法源码
💻 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 + -