www.pudn.com > back.rar > cwayai.h
#ifndef _CWayAi_H_
#define _CWayAi_H_
/**************************************************************************/
/* NODE */
/**************************************************************************/
struct NODE {
int f,h;
int g,tmpg;
int x,y;
int NodeNum;
struct NODE* Parent;
struct NODE* Child[8];
struct NODE* NextNode;
} ;
/**************************************************************************/
/* STACK */
/**************************************************************************/
typedef struct STACK {
struct NODE* NodePtr;
struct STACK* NextStackPtr;
} AI_STATIC;
////////////////////////////////////////////////////////////////////////////////
// ±æÃ£±â Ŭ·¡½º...
class CWayAi {
private:
// char TileAi[20000]; // ±æÃ£±â ÇÒ Å¸ÀÏ ¼³Á¤.
// ŸÀÏ °ª 0-°¡´Â±æ, 1-¸ø°¡´Â±æ.
int COLS, ROWS; // ½ÇÀç ¸ÊÀÇ °¡·Î ¼¼·Î Å©±â.
char DEPTH; // ±æÃ£±âÀÇ ÇѰ踦 µÐ´Ù...
// true ÀÌ¸é °¡´É...
// false ÀÌ¸é ³Ê¹« ±æ°Å³ª ÇÏ¿© ºÒ°¡´É...(ºÒ°¡´ÉÇϸé->Á÷¼±À¸·Î ³ª¾Æ°£´Ù...)
// ºÒ°¡´ÉÇѰæ¿ì(1.Depthº¸´Ù ±æ´Ù. 2.¸ø°¡´Â Áö¿ªÀ» Ŭ¸¯Çß´Ù...)
MAP* tmap;
public:
bool bWayPossibled; // ±æÃ£±â°¡ °¡´ÉÇѰ¡ ºÒ°¡´ÉÇѰ¡ ÆÇ´Ü...
public:
NODE *OPEN; // ±æÃ£±â °Ë»öÀÇ ½ÃÀÛÀ§Ä¡...
NODE *CLOSED; // ±æÃ£±â °Ë»öÀÇ ³¡ À§Ä¡...
AI_STATIC *Stack; // ±æÃ£±âÀÇ static...???
public:
/***************************** STACK *******************************/
void Push(NODE *Node);
NODE *Pop(void);
public:
/**************************************************************************/
/***************************** A* Algorithm *******************************/
/**************************************************************************/
void PropagateDown(NODE *Old);
void Insert(NODE *Successor);
NODE* CheckOPEN(int tilenum);
NODE* CheckCLOSED(int tilenum);
void GenerateSucc(NODE *BestNode,int x, int y, int dx, int dy);
void GenerateSuccessors(NODE *BestNode,int dx,int dy);
NODE* ReturnBestNode(void);
NODE* FindPath(int sx,int sy,int dx,int dy, NPC_STATUS status);
bool isTile( int x, int y );
NODE* BigSearchWay( int x, int y, int dx, int dy, NPC_SIZE size, int nPos, bool bSummon );
NODE* BigFindPath( int sx, int sy, int dx, int dy, NPC_SIZE size, int nPos, bool bSummon );
void BigGenerateSucc(NODE *BestNode,int x, int y, int dx, int dy, NPC_SIZE size, int nPos, bool bSummon );
void BigGenerateSuccessors(NODE *BestNode,int dx,int dy, NPC_SIZE size, int nPos, bool bSummon );
bool BigisTile( int x, int y, NPC_SIZE size, int nPos, bool bSummon );
NODE* WPSearchWay( int x, int y, int dx, int dy );
NODE* WPFindPath( int sx, int sy, int dx, int dy );
void WPGenerateSucc(NODE *BestNode,int x, int y, int dx, int dy );
void WPGenerateSuccessors(NODE *BestNode,int dx,int dy );
bool WPisTile( int x, int y );
public:
/**************************************************************************/
/***************************** USE APP *******************************/
/**************************************************************************/
NODE* SearchWay( int x, int y, int dx, int dy, NPC_STATUS status ); // 2Á¡ »çÀ̸¦ ã´Â´Ù.
void DeleteWay( void ); // ÇÒ´ç Çß´ø ±æÃ£±â ±¸Á¶Ã¼¸¦ Áö¿î´Ù.
bool CheckPossablePoint( int dx, int dy ); // ¸¶¿ì½º·Î ÂïÀº Á¡ÀÌ °¥¼ö ÀÖ´ÂÁöÀÇ ÆÇ´Ü...
// °ªÀº bWayPossibled·Î ÁöÁ¤ÇÑ´Ù.
// 3-21
// int Return_Distance( int x, int y, int dx, int dy ); // ¿ø°Å¸® ¸¶¹ýµîÀ» ÇÒ¶§ »ç¿ë
DWORD Return_Distance( int x, int y, int dx, int dy ); // ¿ø°Å¸® ¸¶¹ýµîÀ» ÇÒ¶§ »ç¿ë
DWORD FindPath_Distance(int sx,int sy,int dx,int dy ); // Á¤»óÀûÀ϶§´Â ļö. Áß°£ÀÌ ¸·ÇûÀ¸¸é ¸·Èù ŸÀϹøÈ£
void GenerateSuccMy(NODE *BestNode,int dx,int dy);
bool isTileMy( int x, int y );
public:
CWayAi(int mapx, int mapy, char Depth, MAP *map)
{
tmap = map;
COLS = mapx;
ROWS = mapy;
DEPTH = Depth;
// Stack=( AI_STATIC *)calloc(1,sizeof(AI_STATIC)); // setup the Stack.
// OPEN=(NODE *)calloc(1,sizeof( NODE ));
// CLOSED=(NODE *)calloc(1,sizeof( NODE ));
OPEN = NULL;
CLOSED = NULL;
Stack = NULL;
Exe = false;
}
~CWayAi() { // Ŭ·¡½º ÆÄ±«...
if( Exe == true )
{
if( OPEN != NULL )free( OPEN );
if( CLOSED != NULL )free( CLOSED );
if( Stack != NULL ) free( Stack );
OPEN = NULL;
CLOSED = NULL;
Stack = NULL;
}
}
bool Exe;
};
// ¿ÜºÎ Ŭ·¡½º·Î µî·Ï...
extern CWayAi* g_CWayAi;
#endif