亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? findpath.cpp

?? 游戲c++開發簡例
?? CPP
字號:
#include "gengine.h"

#define MSIZE		34
/*
class Path{
	BYTE wayPoint[MaxWayLen];
	int len;
	int head;

public:
	Path();
	bool IsEmpty( void ){
		return head == len;
	};

	int GetWayPoint( void ){
		return wayPoint[head++];
	};

	int FindPath( int sx, int sy, int dx, int dy );
};*/

struct Node{
	int x, y;
	int g, h;
	Node *prev, *next;

	Node( int X, int Y, int G, int H );
	Node();
};

struct Rally{
	Node head;

	Rally();
	~Rally();

	bool IsEmpty( void );
	void AddNode( Node* node );
	void DelNode( Node* node );
	Node* GetLeastCostNode( void );
	void Free( void );
};
static Rally Open, Closed;

struct Map{
	unsigned short wayPoint;
	unsigned short occupied;
	Node* node;
};
static Map map[MSIZE][MSIZE];

Path::Path( )
{
	len = 0;
	head = 0;
}


Node::Node( int X, int Y, int G, int H )
{
	x = X; y = Y;
	g = G; h = H;
	next = prev = NULL;
}

Node::Node()
{
	next = prev = NULL;
}

Rally::Rally()
{
	head.next = head.prev = NULL;
}

Rally::~Rally()
{
	Free();
}

inline bool Rally::IsEmpty( void )
{
	return head.next == NULL;
}

void Rally::AddNode( Node* node )
{
	if( node ){
		node->next = head.next;
		node->prev = &head;
		if( head.next )head.next->prev = node;
		head.next = node;
	}
}

void Rally::DelNode( Node* node )
{
	if( node ){
		node->prev->next = node->next;
		if( node->next )
			node->next->prev = node->prev;
	}
}

void Rally::Free( void )
{
	Node *p, *q;
	q = head.next;
	head.next = NULL;
	while( q ){
		p = q;
		q = q->next;
		delete p;
	}
}

Node* Rally::GetLeastCostNode( void )
{
	Node *p = head.next, *found = head.next;
	int cost = 10000;
	while( p ){
		if( p->g + p->h < cost ){
			cost = p->g + p->h;
			found = p;
		}
		p = p->next;
	}
	DelNode( found );
	return found;
}

//到當前點的耗散值
static inline int CostG( int g, int dir )
{
	if( dir & 1 ){
		if((dir - 1) % 4 )
			return g + 10 + 10;
		else
			return g + 10;
	}
	else
		return g + 12;
}

//估計耗散值
static inline int CostH( int sx, int sy, int dx, int dy )
{
	int deltax, deltay, c;
	deltax = dx - sx;
	deltay = dy - sy;
	if( deltax * deltay < 0 )
		c = 10 + 10;
	else
		c = 10 + 2;
	deltax = ABS( deltax );
	deltay = ABS( deltay );
	if( deltax > deltay ){
		deltax -= deltay;
		return deltay * c + deltax * 10;
	}
	else{
		deltay -= deltax;
		return deltax * c + deltay * 10;
	}
}

//用于擴展節點的輔助數據
static int adjacent[8][2] = {{ -1, 0 }, { -1, -1 }, { 0, -1 }, { 1, -1 }, 
					{ 1, 0 }, { 1, 1 }, { 0, 1 }, { -1, 1 }};
static bool mapInited = false;
//路徑搜索,返回路徑上的點數, 以sx,sy為中心點,搜索半徑MSIZE/2-1
int Path::FindPath( int sx, int sy, int dx, int dy )
{
	int i, j;
	int fx, fy, g, h;
	Node *current, *pnode;
	//int count = 0;

	if( !mapInited ){	//已經畫出邊框?
		for( i=0; i<MSIZE; i++ ){
			map[0][i].occupied = 1;
			map[MSIZE-1][i].occupied = 1;
			map[i][0].occupied = 1;
			map[i][MSIZE-1].occupied = 1;
		}
		mapInited = true;
	}
	// copy maze to map
	if( sx > MSIZE/2 && sx - MSIZE/2 < MAZE_SIZE - MSIZE
		&& sy >= MSIZE/2 && sy - MSIZE/2 < MAZE_SIZE - MSIZE*2 ){
		// no clip
		for( i=1, fy=sy-MSIZE/2+2; i<MSIZE-1; i++, fy++ ){
			for( j=1, fx=sx-MSIZE/2+2; j<MSIZE-1; j++, fx++ ){
				map[i][j].occupied = maze[fy][fx].occupied;
				map[i][j].wayPoint = 0xff;
				//map[i][j].node = NULL;
			}
		}
	}
	else{// clip
		/*int i1, j1;

		fx = sx-MSIZE/2+2;
		fy = sy-MSIZE/2+2;
		g = h = MSIZE - 2;
		i = j = 1;
		if( fx < 0 ){
			i = -fx+1; g -= i; fx = 0;
			for( j=1; j<MSIZE-1; j++ )
				map[j][i-1].occupied = 1;
		}
		if( fx + g > MAZE_SIZE ){
			g = MAZE_SIZE - fx;
			for( i1=1; i1<MSIZE-1; i1++ )
				map[i1][i+g].occupied = 1;
		}

		if( fy < 0 ){
			j = -fy+1; h -= j; fy = 0;
			for( i1=1; i1<MSIZE-1; i1++ )
				map[j][i1].occupied = 1;
		}
		if( fy + h >= MAZE_SIZE ){
			h = MAZE_SIZE - fy;
			for( i1=1; i1<MSIZE-1; i1++ )
				map[j+h][i1].occupied = 1;
		}

		for( i1=i; */
		for( i=1, fy=sy-MSIZE/2+2; i<MSIZE-1; i++, fy++ ){
			for( j=1, fx=sx-MSIZE/2+2; j<MSIZE-1; j++, fx++ ){
				if( fx<0 || fx>MAZE_SIZE-1 || fy<0 || fy>MAZE_SIZE-1){
					map[i][j].occupied = 1;
				}
				else{
					map[i][j].occupied = maze[fy][fx].occupied;
					map[i][j].wayPoint = 0xff;
					//map[i][j].node = NULL;
				}
			}
		}
	}
	//交換起點與終點
	i = dx - sx + MSIZE/2-1;	sx = dy - sy + MSIZE/2-1;
	sy = i;
	dx = MSIZE/2-1;				dy = MSIZE/2-1;

	// start to search
	current = new Node( sx, sy, 0, CostH( sx, sy, dx, dy ));
	map[sx][sy].node = current;
	map[sx][sy].wayPoint = 0;
	Open.AddNode( current );

	while( !Open.IsEmpty()){
		//count ++;
		current = Open.GetLeastCostNode();
		//adjacentand current node;
		for( i=0; i<8; i++ ){
			fx = current->x + adjacent[i][0];
			fy = current->y + adjacent[i][1];
			if( map[fx][fy].occupied )
				continue;
			g = current->g;
			h = current->h;
			if( map[fx][fy].wayPoint > 7 ){
				//hasn't been adjacentanded
				map[fx][fy].wayPoint = i;
				if( fx == dx && fy == dy ) 
					goto success;
				map[fx][fy].node = new Node( fx, fy, CostG( g, i ), CostH(fx, fy, dx, dy));
				Open.AddNode( map[fx][fy].node );
			}
			else{// has been adjacentanded
				if(( map[current->x][current->y].wayPoint + 4) % 8 == i )
					// parent node
					continue;
				pnode = map[fx][fy].node;
				if( pnode->g + pnode->h > h + CostG( g, i )){
					map[fx][fy].wayPoint = i;
					pnode->g = CostG( g, i );
				}
				else if( CostG(pnode->g, i) < g ){ 
					current->g = CostG(pnode->g, i);
					map[current->x][current->y].wayPoint = (i+4)%8;
				}
			}
		}
		Closed.AddNode( current );
	}
	//failed, Open is empty
	return 0;

success:
	head = len = 0;
	while( !(fx == sx && fy == sy) && len < MaxWayLen ){
		i = map[fx][fy].wayPoint;
		map[fx][fy].wayPoint = 8;
		wayPoint[len++] = (i+3) % 8;
		i = ( i+4 ) % 8;
		fx += adjacent[i][0];
		fy += adjacent[i][1];
	}
	Open.Free();
	Closed.Free();
#ifdef _DEBUG
/*	FILE* fp = fopen( "path.txt", "wt" );
	if( fp ){
		for( i=0;i<MSIZE; i++ ){
			for( j=0; j<MSIZE; j++ ){
				if( map[i][j].occupied )
					fputc( '8', fp );
				else if( map[i][j].wayPoint == 8 )
					fputc( '*', fp );
				else
					fputc( ' ', fp );
			}
			fprintf( fp, "\n" );
		}
		for( i=0; i<=len; i++ )
			fprintf( fp, "%d, ", wayPoint[i] );
		fclose( fp );
	}*/
#endif
	return len;
}

#undef MSIZE
#undef MaxWayLen

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久久中文字幕久| 国产一区在线视频| 美国av一区二区| 91色porny蝌蚪| 日韩一区二区三区三四区视频在线观看| 国产精品伦理在线| 亚洲精品免费在线观看| 激情av综合网| 欧美色图一区二区三区| 久久久精品国产免费观看同学| 亚洲午夜国产一区99re久久| 国产不卡在线视频| 精品99一区二区| 喷白浆一区二区| 欧美在线制服丝袜| 亚洲欧美电影院| 成人午夜精品在线| 2019国产精品| 国精品**一区二区三区在线蜜桃| 欧美精品xxxxbbbb| 亚洲已满18点击进入久久| 丰满少妇久久久久久久| 国产三级精品三级在线专区| 看片的网站亚洲| 欧美一区二区三区成人| 亚洲午夜在线观看视频在线| 91在线观看视频| 国产精品天干天干在线综合| 国产白丝网站精品污在线入口| 精品美女一区二区| 蜜桃av一区二区在线观看| 欧美疯狂做受xxxx富婆| 亚洲综合免费观看高清完整版| 色哟哟在线观看一区二区三区| 成人欧美一区二区三区1314| 91在线看国产| 日韩毛片在线免费观看| 97se亚洲国产综合在线| 亚洲欧美国产高清| 色av成人天堂桃色av| 亚洲综合激情网| 91麻豆精品国产| 精品综合久久久久久8888| 26uuuu精品一区二区| 国产成人午夜高潮毛片| 国产精品美女久久久久久久久| av电影天堂一区二区在线观看| 国产精品二三区| 久久久九九九九| 日本道免费精品一区二区三区| 久久伊99综合婷婷久久伊| 国产成人精品三级麻豆| 国产欧美久久久精品影院| 成人免费精品视频| 一区二区三区精品视频| 制服丝袜成人动漫| 国产一区二区三区综合| 国产精品国模大尺度视频| 欧美午夜精品久久久| 久久99久久精品| 国产精品入口麻豆原神| 欧美天堂亚洲电影院在线播放| 日韩在线观看一区二区| 久久精品水蜜桃av综合天堂| 色婷婷综合久久久久中文一区二区 | 91免费在线看| 视频一区二区欧美| 日本一区二区视频在线| 在线欧美小视频| 黄一区二区三区| 亚洲精品免费视频| 日韩免费看的电影| 99久久精品免费观看| 天堂午夜影视日韩欧美一区二区| 久久青草国产手机看片福利盒子| 在线视频综合导航| 精品一区二区在线看| 亚洲人快播电影网| 久久亚洲综合色| 欧美三级资源在线| 成人涩涩免费视频| 久久精品国产亚洲高清剧情介绍| 国产精品久久免费看| 日韩欧美三级在线| 色94色欧美sute亚洲13| 高清国产一区二区| 麻豆精品新av中文字幕| 亚洲线精品一区二区三区八戒| 国产日韩欧美a| 国产精品理论在线观看| 九九精品一区二区| 亚洲激情自拍视频| 久久久欧美精品sm网站| 91精品婷婷国产综合久久性色 | 欧美tickling挠脚心丨vk| 一本大道久久a久久精二百| 国产一区二区导航在线播放| 日本在线不卡视频一二三区| 夜夜嗨av一区二区三区| 国产精品久久久久久久久免费樱桃| 日韩精品一区二| 日韩一区二区三区视频| 91精品国产综合久久久久久久久久| 色一区在线观看| 99精品视频中文字幕| 国产suv一区二区三区88区| 九九国产精品视频| 精品在线免费观看| 日韩**一区毛片| 蜜桃视频在线一区| 日韩在线观看一区二区| 日韩精品一区第一页| 亚洲无线码一区二区三区| 亚洲影院免费观看| 一区二区理论电影在线观看| 亚洲女女做受ⅹxx高潮| 亚洲另类春色校园小说| 一区二区三区四区激情| 亚洲成av人综合在线观看| 午夜精品一区二区三区三上悠亚| 亚洲电影第三页| 免费成人美女在线观看| 久久精品国产一区二区| 欧美肥妇毛茸茸| 亚洲视频在线观看三级| 日韩一卡二卡三卡国产欧美| 日韩一级二级三级| 2021国产精品久久精品| 国产精品福利一区| 亚洲婷婷综合久久一本伊一区| 一区二区三区国产精品| 午夜精品久久久久久久99水蜜桃| 婷婷开心久久网| 日本最新不卡在线| 国产精品一区二区视频| 99综合影院在线| 欧美色图片你懂的| 精品国一区二区三区| 欧美国产在线观看| 一区二区三区四区不卡视频| 日本欧美肥老太交大片| 国产在线一区观看| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美在线观看视频一区二区三区| 欧美人伦禁忌dvd放荡欲情| 精品国产一区二区国模嫣然| 亚洲国产成人一区二区三区| 欧美在线免费观看亚洲| 欧美日韩国产首页在线观看| 欧美日免费三级在线| 欧美日韩不卡一区二区| 91极品视觉盛宴| 欧美精品1区2区3区| 日本在线不卡视频| 老司机一区二区| 丁香亚洲综合激情啪啪综合| 欧美日韩国产在线观看| 国产亚洲一区二区三区| 亚洲一区日韩精品中文字幕| 精品一区二区三区日韩| 日本乱人伦一区| 久久影院午夜论| 亚洲国产aⅴ成人精品无吗| 国产一区美女在线| 欧美日韩激情在线| 国产日韩av一区| 美女一区二区在线观看| 色域天天综合网| 国产欧美一区二区三区鸳鸯浴| 亚洲成人在线免费| 99国产精品久久久| 国产女主播在线一区二区| 中文字幕一区二区三区在线不卡| 亚洲一区二区三区四区中文字幕| 黄色资源网久久资源365| 欧美另类一区二区三区| 亚洲色欲色欲www在线观看| 激情亚洲综合在线| 欧美日韩高清一区二区三区| 亚洲四区在线观看| 高清不卡一二三区| 日韩免费高清av| 天天综合色天天| 欧美日韩综合不卡| 国产精品久久久久久亚洲毛片 | 欧美大片顶级少妇| 性久久久久久久| 在线观看亚洲精品视频| 日韩伦理电影网| 国产成人午夜高潮毛片| 久久亚洲综合色| 精品一区二区av| 精品国产91亚洲一区二区三区婷婷| 亚洲成人动漫在线观看| 欧美日韩精品一区二区三区四区| 亚洲国产日韩精品| 欧美日韩在线免费视频| 偷拍日韩校园综合在线| 欧美性极品少妇| 精品视频1区2区3区|