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

📄 astarpathfinder.h

📁 用VC6++对A*寻路算法的简单实现,在界面上点击鼠标就行.
💻 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 + -