📄 findpath.h
字号:
#ifndef _FINDPATH_H_
#define _FINDPATH_H_
#include <windows.h>
#include <windowsx.h>
// 宽度优先树节点的结构
typedef struct NODE
{
int x, y; // 地图上的位置
int number; // 地图上位置的代号
NODE *child[8]; // 八个方向
NODE *parent; // 指向上一个节点的指针
}*LPNODE;
// 堆栈的结构
typedef struct STACK
{
LPNODE node; // 指向节点的指针
STACK *next;
}*LPSTACK;
class CFindPath
{
private:
LPNODE Root; // 宽度优先树根节点的指针
LPSTACK Stack1, Stack2; // 两个堆栈用于存储已扩展和待扩展的节点
int *Map, *MapBak; // 指向地图的指针和地图备份
int SrcPoint, DestPoint; // 起始点和目标电
int Width, Height; // 地图的宽和高
int TileCount; // Tile的总数
BOOL FindOk; // 查找成功标志
LPNODE DestNode; // 指向目的地节点的指针
int Step; // 路径有多少步
LPSTACK Path; // 存放路径的堆栈
LPSTACK Nodes; // 存放树中的每一个节点的地址,以便快速释放
public:
BOOL SetMap(int *m, int range1, int range2);
BOOL PopPath(int &x, int &y);
int GetTileCount() {return TileCount;};
int GetHeight() {return Height;};
int GetWidth() {return Width;};
int GetStep() {return FindOk ? Step : 0;};
void FreeAll();
BOOL GetPath();
BOOL CreateNode8(LPNODE n);
LPNODE Pop();
void Push(LPNODE n);
BOOL CreateNode();
BOOL FindPath(int sx, int sy, int dx, int dy);
int *GetTilePtr(int x, int y) {return Map + y * Width + x;};
int GetTileType(int x, int y) {return *(Map + y * Width + x);};
int GetTileNum(int x, int y) {return y * Width + x;};
CFindPath(int *m, int w, int h, int range1, int range2);
virtual ~CFindPath();
};
#endif // !defined(_FINDPATH_H_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -