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

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

?? findpath1.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 );
};
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()
{
	Node *p, *q;
	q = head.next;
	while( q ){
		p = q;
		q = q->next;
		delete p;
	}
}

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;
	}
}

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;
	}
}

//用于擴展節點的輔助數據
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;
		}
		for( i=1; i<MSIZE-1; i++ ){
			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++, fx++ ){
			for( j=1, fx=sx-MSIZE/2+2; j<MSIZE-1; j++, fy++ ){
				if( maze[fy][fx].occupied )
					map[i][j].occupied = 1;
				else
					map[i][j].occupied = 0;
				map[i][j].wayPoint = 0xff;
			}
		}
	}
	else{// clip
		for( i=1, fy=sy-MSIZE/2+2; i<MSIZE-1; i++, fx++ ){
			for( j=1, fx=sx-MSIZE/2+2; j<MSIZE-1; j++, fy++ ){
				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;
				}
			}
		}
	}
	//交換起點與終點
	i = sx; sx = dx; dx = i;
	i = sy; sy = dy; dy = i;

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

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

#undef MSIZE
#undef MaxWayLen

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu亚洲| 国产成人亚洲综合a∨猫咪| 成人蜜臀av电影| 日韩女同互慰一区二区| 免费在线看一区| 91成人在线观看喷潮| 国产精品色婷婷久久58| 国产一区二区在线免费观看| 欧美精品tushy高清| 日本欧美久久久久免费播放网| 国产高清久久久| 久久精品视频在线免费观看| 激情伊人五月天久久综合| 精品成人佐山爱一区二区| 美国av一区二区| 久久久国产午夜精品| 国产成人av电影免费在线观看| 久久久91精品国产一区二区三区| 国产精品一区二区在线看| 亚洲国产经典视频| 不卡在线观看av| 午夜亚洲福利老司机| 久久亚洲私人国产精品va媚药| 国产成人日日夜夜| 一区二区三区四区视频精品免费| 欧美性受xxxx黑人xyx| 日本亚洲电影天堂| 国产精品视频九色porn| 91丨九色丨蝌蚪丨老版| 五月婷婷色综合| 国产精品无遮挡| 日韩欧美电影一区| 色婷婷精品大在线视频| 美女一区二区三区在线观看| 国产精品久久久久9999吃药| 6080yy午夜一二三区久久| www.欧美色图| 国产美女精品人人做人人爽| 性感美女久久精品| 亚洲男人天堂av| 26uuu精品一区二区三区四区在线| 91久久精品日日躁夜夜躁欧美| 国产一区二区视频在线| 亚洲v中文字幕| 一区二区三区欧美视频| 国产精品三级视频| 欧美激情综合在线| 日韩精品一区二区三区视频| 色综合天天综合在线视频| 国产999精品久久久久久绿帽| 日韩综合一区二区| 亚洲伦在线观看| 亚洲欧美日韩在线播放| 一区二区三区资源| 悠悠色在线精品| 午夜精品福利在线| 日本成人在线不卡视频| 理论片日本一区| 国产精品一级在线| 成年人午夜久久久| 色成人在线视频| 91精品国产一区二区三区蜜臀| 色噜噜狠狠成人网p站| 欧美日韩精品一区二区在线播放| 欧美高清www午色夜在线视频| 制服视频三区第一页精品| 精品国产青草久久久久福利| 日韩免费观看2025年上映的电影| 宅男在线国产精品| 久久久久国产精品免费免费搜索| 国产欧美日韩卡一| 亚洲电影第三页| 国产精品456露脸| 欧美日韩国产综合一区二区 | 日本成人在线网站| 国产伦精品一区二区三区视频青涩| 成人免费视频免费观看| 欧美女孩性生活视频| 久久精品一区二区三区不卡 | 欧美激情在线一区二区三区| 亚洲精品一二三四区| 久久91精品国产91久久小草| 成人av一区二区三区| 精品国产亚洲在线| 亚洲国产综合在线| 国产91精品精华液一区二区三区| 91在线云播放| 国产三级欧美三级日产三级99| 夜夜嗨av一区二区三区中文字幕| 国产精品原创巨作av| 欧美精品在线视频| 亚洲一区二区三区在线播放| 高清beeg欧美| 国产亚洲精品久| 久久精品免费看| 日韩精品中文字幕一区二区三区| 亚洲欧美另类图片小说| 成人一级视频在线观看| 欧美极品美女视频| 丁香桃色午夜亚洲一区二区三区| 日韩一区二区三区视频| 人人精品人人爱| 日韩一区二区在线观看| 美国一区二区三区在线播放| 成人黄色国产精品网站大全在线免费观看| 欧美视频一区二| 亚洲 欧美综合在线网络| 在线观看av不卡| 亚洲成人手机在线| 精品国产百合女同互慰| 精品一区二区三区日韩| 欧美韩国日本一区| 色综合久久88色综合天天| 亚洲成在人线在线播放| 日韩欧美中文字幕一区| 日本不卡一区二区三区高清视频| 欧美精品123区| 国内精品伊人久久久久av影院| 久久久亚洲欧洲日产国码αv| 成人午夜电影小说| 日韩国产精品久久久久久亚洲| 精品久久人人做人人爽| 99久久久无码国产精品| 日本三级亚洲精品| 国产精品电影院| 日韩三级av在线播放| 风间由美性色一区二区三区| 亚洲高清不卡在线| 国产精品久久久久影院色老大| 在线免费精品视频| 精品夜夜嗨av一区二区三区| 中文字幕佐山爱一区二区免费| 欧美一区二区视频网站| av毛片久久久久**hd| 激情六月婷婷久久| 日韩精品国产精品| 夜夜嗨av一区二区三区四季av| 国产午夜精品一区二区三区嫩草| 欧美日韩你懂得| 欧美影院精品一区| 97se亚洲国产综合自在线观| 国产成人精品一区二| 国内成人免费视频| 日本大胆欧美人术艺术动态| 亚洲一二三区视频在线观看| 中文字幕一区二区三区四区| 国产午夜精品在线观看| 欧美www视频| 欧美精品一区二区三| 精品久久一二三区| 久久这里只精品最新地址| 日韩欧美国产系列| 精品国产三级电影在线观看| 欧美本精品男人aⅴ天堂| 一本色道久久综合亚洲aⅴ蜜桃| 国产美女娇喘av呻吟久久| 国产精一品亚洲二区在线视频| 免费在线观看成人| 国产一区二区三区四区五区美女 | 中文字幕不卡的av| 国产精品久久久久久久久动漫| 亚洲欧美经典视频| 亚洲一区二区三区美女| 免费一级欧美片在线观看| 国内精品伊人久久久久影院对白| 国产成人夜色高潮福利影视| 成人免费毛片嘿嘿连载视频| 91极品美女在线| 精品国产99国产精品| 综合久久一区二区三区| 五月激情综合色| 国产福利一区二区三区视频在线| 99视频精品免费视频| 日韩一区二区电影网| 国产精品人人做人人爽人人添| 日韩主播视频在线| 蜜桃免费网站一区二区三区| 成人一级片网址| 欧美一级理论性理论a| 亚洲欧美aⅴ...| 国产精一品亚洲二区在线视频| 欧美中文字幕不卡| 国产精品不卡一区| 国产在线播精品第三| 91精品国产综合久久久久久久| 亚洲欧洲av色图| 国产成人亚洲精品狼色在线| 欧美人狂配大交3d怪物一区| 最近日韩中文字幕| 成人综合在线观看| 久久久国产一区二区三区四区小说 | 91免费视频网| 国产精品毛片久久久久久久 | 亚洲精品免费一二三区| 懂色一区二区三区免费观看| 久久女同互慰一区二区三区| 亚洲男人天堂av| 91成人国产精品| 亚洲一区二区在线免费观看视频 | 日韩亚洲欧美在线观看|