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