📄 astarpathfinder.h
字号:
// AstarPathFinder.h: interface for the CAstarPathFinder class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ASTARPATHFINDER_H__9CD1C151_DCBF_4CE4_8A40_BF43B94FF4DD__INCLUDED_)
#define AFX_ASTARPATHFINDER_H__9CD1C151_DCBF_4CE4_8A40_BF43B94FF4DD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//地图中的节点,
struct NODE
{
int f,g,h,NodeNum;
int x,y;
NODE *pNextNode;
NODE *pParent;
NODE *Child[8];
};
struct STACK
{
NODE *NodePtr;
STACK *NextStackPtr;
};
//*
#define ROWCOUNT 21 //X坐标的最大值
#define COLCOUNT 12 //Y坐标的最大值
#define MAXRECT 30 //随机产生填充方块的最大数
//*/
//test
/*
#define ROWCOUNT 4
#define COLCOUNT 4
#define MAXRECT 8
//*/
#define TITLE 1
const int MW=32,SW=1; //
const int BWA=MW+SW*2; //一个方格的大小
const int XC[1]={BWA/2}; //画方格的X坐标
const int YC[1]={BWA/2}; //画方格的Y坐标
class CAstarPathFinder
{
private:
NODE *OPEN; //保存所有已生成而未考察的节点
NODE *CLOSED; //保存已访问过的节点
NODE *PATH; //保存路径
STACK *Stack;
private:
bool isPath; //判断是否存在路径
int *m_nMap; //地图
public:
CAstarPathFinder();
virtual ~CAstarPathFinder();
private:
//寻路函数
BOOL FindPath(int sx, int sy, int dx, int dy);
//释放节点
void FreeNodes();
//生成子节点,八个方向
void GenerateChildren(NODE *pBestNode, int dx, int dy);
//生成单个子节点
void GenerateChild(NODE *pBestNode,int x, int y, int dx, int dy,int step);
//更新节点中所以的估计值
void PropagateDown(NODE *pOld,int step);
//
void Push(NODE *pNode);
//插入一个新节点
void Insert(NODE *pNew);
//判断是否在OPEN表中
NODE* CheckOPEN(int tileNum);
//判断是否在CLOSED表中
NODE* CheckCLOSED(int tileNum);
//取得一个最佳的节点
NODE* ReturnBestNode();
//
NODE* Pop();
//取得节点在地图中的位置
int GetMapIndex(int x, int y);
//判断节点是否存在障碍物
int FreeTile(int x,int y);
public:
//取得路径节点
void PathNextNode(void) {PATH=PATH->pParent;}
//取得路径节点的坐标
int GetNodeX(void) {return PATH->x;}
int GetNodeY(void) {return PATH->y;}
//生成一个路径
BOOL NewPath(int sx,int sy,int dx,int dy);
//初始化地图
void InitMap(const int *bMap);
};
#endif // !defined(AFX_ASTARPATHFINDER_H__9CD1C151_DCBF_4CE4_8A40_BF43B94FF4DD__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -