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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bestfirst.cpp

?? 路徑探索算法
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
// this transfers the world map from Setup.cpp to the internal state here.
void BestFirst::UpdateWorld()
{
	LARGE_INTEGER tmp1;
	QueryPerformanceCounter(&tmp1);
	
	//
	for(int y=0;y<HEIGHT;y++)
	{
		for(int x=0;x<WIDTH;x++)
		{
			WORD yx=(y<<YSHIFT)+x;
			world[yx].terrain_cost=vSetup->world[y][x].terrain_cost;
			world[yx].state=(world[yx].terrain_cost==IMPASSABLE_TERRAIN_COST); //?IMPASSABLE:UNKNOWN;
		}
	}
	
	//
	LARGE_INTEGER tmp2;
	QueryPerformanceCounter(&tmp2);
	bigtick.QuadPart += tmp2.QuadPart - tmp1.QuadPart;
}

// this transfers the all the settings in Setup.cpp to here.
void BestFirst::UpdateSettings()
{
	startyx=vSetup->starty*WIDTH+vSetup->startx;
	endyx=vSetup->endy*WIDTH+vSetup->endx;
	
	endx=endyx&XMASK;
	endy=(endyx>>YSHIFT);
	
	distance_method=vSetup->distance_method;
	
	iterations_per_frame=vSetup->iterations_per_frame;
	
	directions=vSetup->directions;
}



///////////////////////////////////////////////////////////////////////////
// TYPE B
void BestFirst::PackRoute()
{
	if(pathing_state&NO_PATH)
	{
		airoute->count=0;
		return;
	}
	
	//
	memset(airoute->route,0,MAX_ROUTES); //clear routes
	
	//
	airoute->active=1;
	airoute->compression=0;
	
	//
	WORD yx=endyx;
	int start=MAX_ROUTES-1;
	BYTE route=NO_ROUTE;
	while(yx!=startyx)
	{
		//		route=DXY[world[yx].route].route;
		route=world[yx].route;
		yx+=DXY[DXY[route].route].yx;
		airoute->route[start]=route;
		if(--start<0) start=MAX_ROUTES-1;
	};
	
	airoute->start=start+1;
	airoute->count=MAX_ROUTES-airoute->start;
	
	//
	airoute->startyx=startyx;
	airoute->endyx=endyx;
	
	//
	airoute->walk_point=airoute->start;
	airoute->walk_runlength_step=0;
	
	//     
	if(airoute->start==0) airoute->count=0;
}







///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
/*
This is the function that paints the graphics to the screen.
Called by PathFinder.
Localized to respective Setup classes v1.6.
*/
//
void BestFirst::Paint(LPBYTE pwBits, HDC hdc,HWND hWnd)
{
	if(pwBits)
	{
		//
		RECT rt;
		GetClientRect(hWnd, &rt);
		int clientwidth = (rt.right-rt.left);
		
		COLORREF background;
		COLORREF foreground;
		vSetup->get_colorscheme_colors(background,foreground);
		HBRUSH hbrBkGnd = CreateSolidBrush(background);
		FillRect(hdc, &rt, hbrBkGnd);
		DeleteObject(hbrBkGnd);
		SetBkColor(hdc,background);
		SetTextColor(hdc,foreground);
		
		//
		int starty=startyx>>YSHIFT;
		int startx=startyx&XMASK;
		int endy=endyx>>YSHIFT;
		int endx=endyx&XMASK;
		
		TCHAR szStatusLine[1024];
		_RGBA *p,*ppush;
		_RGBA *pbegin=(_RGBA *)pwBits;
		const int yxmax=WIDTH*HEIGHT;
		int y,x;
		int yx;
		int node;
		int count;
		int n;
		register _RGBA *tmp;
		
		//
		int used_nodes=0;
		float smallest_h = 1048576.0f;
		float largest_h = 0.0001f;
		for(node=1;node<=free_node;node++)
		{
			if(nodes[node].h>largest_h) largest_h=nodes[node].h;
			if(nodes[node].h<smallest_h) smallest_h=nodes[node].h;
			used_nodes++;
		}
		
		//
		int length=0;
		p=pbegin;
		yx=nodes[best_node].yx;
		while(yx!=startyx && yx>0 && yx<yxmax)
		{
			yx+=DXY[DXY[world[yx].route].route].yx;
			length++;
			if(length>MAX_NODE) break;
		}
		
		
		// stats
		GetClientRect(hWnd, &rt);
		sprintf(szStatusLine,
			"-- Best-First --\nh %f ... %f\n\nstruct size %d bytes\n(nodes %d B)\n(heap %d B)\n(world %d B)\n[used node %d B]\n[used heap %d B]\n\nMAX NODES %d\nBest Node %4d\nh %f\nClosed Node %4d\nh %f\n\npath found? %s\nlength= %d\n\nstart -> current\nh %f -> %f\n",
			smallest_h, largest_h,
			sizeof(nodes) + sizeof(world) + sizeof(heap),
			sizeof(nodes),
			sizeof(heap),
			sizeof(world),
			used_nodes*(sizeof(_NODES)),
			last_heap_leaf*(sizeof(WORD)),
			MAX_NODE,
			best_node,
			nodes[best_node].h,
			closed_node,
			nodes[closed_node].h,
			pathing_state&NO_PATH?"NO PATH!":(pathing_state&PATH_FOUND?"YES!":"Not yet..."),
			length,
			nodes[1].h,nodes[closed_node].h
			);
		DrawText(hdc, szStatusLine, strlen(szStatusLine), &rt, DT_RIGHT);
		
		
		//shortest-path w/ terrain
		GetClientRect(hWnd, &rt);
		rt.top=HEIGHT;
		rt.right=WIDTH;
		sprintf(szStatusLine,"shortest path w/terrain");
		DrawText(hdc, szStatusLine, strlen(szStatusLine), &rt, DT_CENTER);
		p=ppush=pbegin;
		for(y=0;y<HEIGHT;y++)
		{
			for(x=0;x<WIDTH;x++)
			{
				BYTE b=(BYTE)(255-(world[y*WIDTH+x].terrain_cost<<4));
				p->red=b; p->green=b; p->blue=b;
				p++;
			}
			ppush+=clientwidth;
			p=ppush;
		}
		for(y=-1;y<=1;y++) //starting point
		{
			for(x=-1;x<=1;x++)
			{
				tmp=(pbegin+(starty+y)*clientwidth+startx+x);
				tmp->red=255;
				tmp->green=0;
				tmp->blue=0;
			}
		}
		for(y=-1;y<=1;y++) //end/goal point
		{
			for(x=-1;x<=1;x++)
			{
				tmp=(pbegin+(endy+y)*clientwidth+endx+x);
				tmp->red=0;
				tmp->green=255;
				tmp->blue=0;
			}
		}
		p=pbegin;
		yx=nodes[best_node].yx;
		while(yx!=startyx && yx>0 && yx<yxmax)
		{
			tmp=(p+(yx>>YSHIFT)*clientwidth+(yx&XMASK));
			tmp->red=255;
			tmp->green=0;
			tmp->blue=0;
			yx+=DXY[DXY[world[yx].route].route].yx;
			if(length>MAX_NODE) break;
		}
		
		
		// h
		GetClientRect(hWnd, &rt);
		rt.top=HEIGHT;
		rt.left=WIDTH+4;
		rt.right=WIDTH+4+WIDTH;
		sprintf(szStatusLine,"h (red closed/blue open)");
		DrawText(hdc, szStatusLine, strlen(szStatusLine), &rt, DT_CENTER);
		p=pbegin+(WIDTH+4);
		count=MAX_NODE;
		for(node=1;node<=free_node;node++)
		{
			tmp=(p+(nodes[node].yx>>YSHIFT)*clientwidth+(nodes[node].yx&XMASK));
			tmp->red=(BYTE)((nodes[node].h/largest_h)*255.0f);
			tmp->green=0;
			tmp->blue=0;
		};
		for(n=1;n<=last_heap_leaf;n++)
		{
			node=heap[n];
			tmp=(p+(nodes[node].yx>>YSHIFT)*clientwidth+(nodes[node].yx&XMASK));
			tmp->red=0;
			tmp->green=0;
			tmp->blue=(BYTE)((nodes[node].h/largest_h)*255.0f);
		}
		
		
		// open
		int levels=0;
		{
			int b=1;
			int sum=b;
			while(b<=last_heap_leaf)
			{
				b=b<<1;
				sum+=b;
				levels++;
			}
		}
		GetClientRect(hWnd, &rt);
		rt.top=HEIGHT*2+16;
		rt.left=0;
		rt.right=WIDTH;
		sprintf(szStatusLine,"open nodes %d (%d heap levels)",last_heap_leaf,levels);
		DrawText(hdc, szStatusLine, strlen(szStatusLine), &rt, DT_CENTER);
		p=pbegin+(HEIGHT+16)*clientwidth;
		for(n=1;n<=last_heap_leaf;n++)
		{
			node=heap[n];
			
			BYTE h=(BYTE)((nodes[node].h/largest_h)*255.0f);
			tmp=(p+(nodes[node].yx>>YSHIFT)*clientwidth+(nodes[node].yx&XMASK));
			tmp->red=h;
			tmp->green=0;
			tmp->blue=0;
		}
		
		
		// closed
		GetClientRect(hWnd, &rt);
		rt.top=HEIGHT*2+16;
		rt.left=WIDTH+4;
		rt.right=WIDTH+4+WIDTH;
		sprintf(szStatusLine,"closed nodes %d",closed_nodes);
		DrawText(hdc, szStatusLine, strlen(szStatusLine), &rt, DT_CENTER);
		p=pbegin+WIDTH+4+(HEIGHT+16)*clientwidth;
		for(node=1;node<=free_node;node++)
		{
			BYTE h=(BYTE)((nodes[node].h/largest_h)*255.0f);
			tmp=(p+(nodes[node].yx>>YSHIFT)*clientwidth+(nodes[node].yx&XMASK));
			tmp->red=h;
			tmp->green=0;
			tmp->blue=0;
		}
		for(n=1;n<=last_heap_leaf;n++) //erase
		{
			node=heap[n];
			DWORD *tmp=((DWORD *)p+(nodes[node].yx>>YSHIFT)*clientwidth+(nodes[node].yx&XMASK));
			*tmp=(DWORD)background;
		}
		
		
		// state
		GetClientRect(hWnd, &rt);
		rt.top=HEIGHT;
		rt.left=(WIDTH+4)*2;
		rt.right=(WIDTH+4)*2+WIDTH;
		sprintf(szStatusLine,"state (g=open b=closed r=impass)");
		DrawText(hdc, szStatusLine, strlen(szStatusLine), &rt, DT_CENTER);
		p=pbegin+(WIDTH+4)*2;
		for(y=0;y<HEIGHT;y++)
		{
			for(x=0;x<WIDTH;x++)
			{
				yx=y*WIDTH+x;
				tmp=(p+y*clientwidth+x);
				tmp->green=(BYTE)((world[yx].state==OPEN)?255:0);
				tmp->blue=(BYTE)((world[yx].state==CLOSED)?255:0);
				tmp->red=(BYTE)((world[yx].state==IMPASSABLE)?255:0);
			}
		}
		
		
		//routing
		GetClientRect(hWnd, &rt);
		rt.top=HEIGHT*2+16;
		rt.left=(WIDTH+4)*2;
		rt.right=(WIDTH+4)*2+WIDTH;
		sprintf(szStatusLine,"routes");
		DrawText(hdc, szStatusLine, strlen(szStatusLine), &rt, DT_CENTER);
		p=pbegin+(WIDTH+4)*2+(HEIGHT+16)*clientwidth;
		for(y=0;y<HEIGHT;y++)
		{
			for(x=0;x<WIDTH;x++)
			{
				tmp=(p+y*clientwidth+x);
				switch(world[(y<<YSHIFT)+x].route)
				{
				case 0: tmp->red=0;		tmp->green=0;	tmp->blue=255;	break; // n
				case 1: tmp->red=127;	tmp->green=0;	tmp->blue=255;	break; // e
				case 2: tmp->red=255;	tmp->green=0;	tmp->blue=0;	break; // s
				case 3: tmp->red=255;	tmp->green=0;	tmp->blue=127;	break; // w pink
				case 4: tmp->red=0;		tmp->green=255;	tmp->blue=255;	break; // ne
				case 5: tmp->red=127;	tmp->green=255;	tmp->blue=255;	break; // se
				case 6: tmp->red=255;	tmp->green=255;	tmp->blue=0;	break; // sw
				case 7: tmp->red=255;	tmp->green=255;	tmp->blue=127;	break; // nw
				};
			}
		}
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
喷水一区二区三区| 国产一区二区三区日韩| 久久久噜噜噜久久中文字幕色伊伊| av不卡免费在线观看| 亚洲观看高清完整版在线观看| 久久久久久9999| 欧美一区二区视频在线观看2020| 成人免费高清在线观看| 久久不见久久见免费视频1| 亚洲丝袜精品丝袜在线| 亚洲精品在线观看网站| 欧美区视频在线观看| 不卡欧美aaaaa| 国产高清无密码一区二区三区| 亚洲国产精品精华液网站| 国产精品久久久爽爽爽麻豆色哟哟| 欧美一区二区三区视频免费| 色噜噜夜夜夜综合网| 成人在线一区二区三区| 久久99久久精品| 日韩精品午夜视频| 亚洲国产一二三| 一区二区三区加勒比av| 亚洲桃色在线一区| 国产精品美女www爽爽爽| 久久久精品日韩欧美| 日韩精品一区二区在线| 日韩一区和二区| 欧美军同video69gay| 欧美色男人天堂| 欧美中文字幕一区| 欧美午夜在线观看| 在线国产亚洲欧美| 欧美三级资源在线| 欧美三级欧美一级| 欧美人妖巨大在线| 欧美精品一卡二卡| 欧美一区二区久久| 欧美大肚乱孕交hd孕妇| 日韩免费高清av| 久久蜜臀中文字幕| 国产精品无人区| 综合色中文字幕| 亚洲综合色网站| 午夜精品影院在线观看| 日日摸夜夜添夜夜添亚洲女人| 视频在线在亚洲| 蜜臀久久99精品久久久久宅男| 经典一区二区三区| 国产99久久久国产精品免费看| 成人18精品视频| 色视频一区二区| 欧美三级电影精品| 欧美不卡一区二区| 欧美激情综合网| 亚洲欧美日韩久久| 天堂一区二区在线| 狠狠色丁香久久婷婷综合丁香| 韩国v欧美v日本v亚洲v| 成熟亚洲日本毛茸茸凸凹| 99久久免费精品高清特色大片| 色综合色狠狠天天综合色| 欧美日本一道本| 久久久久亚洲综合| 亚洲色图一区二区| 三级久久三级久久| 激情综合色丁香一区二区| 国产a级毛片一区| 欧美三级电影网| 久久久99精品久久| 亚洲免费观看视频| 免费视频一区二区| 成人sese在线| 欧美狂野另类xxxxoooo| 国产喂奶挤奶一区二区三区| 亚洲毛片av在线| 蜜桃久久av一区| 成人高清在线视频| 911精品国产一区二区在线| 久久亚洲精品小早川怜子| 亚洲美女区一区| 国产一区亚洲一区| 欧美性三三影院| 国产午夜精品久久久久久久| 亚洲一区精品在线| 国产a久久麻豆| 3d成人动漫网站| 亚洲欧洲www| 蜜臂av日日欢夜夜爽一区| 91美女视频网站| 337p日本欧洲亚洲大胆色噜噜| 亚洲激情校园春色| 国产做a爰片久久毛片| 欧美在线色视频| 日本一区二区三区四区在线视频| 午夜欧美2019年伦理| 99久久精品国产一区| 日韩午夜在线影院| 一区二区三区国产精华| 国产成a人亚洲| 精品欧美乱码久久久久久| 一区二区三区 在线观看视频| 国产精品88888| 日韩精品一区在线观看| 亚洲五码中文字幕| av一区二区不卡| 久久久久久9999| 久久99精品久久久久久动态图| 欧美三级日韩在线| 一区二区三区在线免费播放| 国产精品99久| 久久蜜桃av一区二区天堂| 老司机免费视频一区二区三区| 欧美色视频一区| 亚洲午夜羞羞片| 在线观看一区日韩| 亚洲精品久久7777| 91在线视频播放| 国产精品久久久久一区| 国产一区 二区 三区一级| 日韩一区二区三区三四区视频在线观看| 亚洲免费观看高清完整版在线观看| 国产成人免费9x9x人网站视频| 欧美成人官网二区| 蜜臀av一区二区| 日韩欧美一级片| 男人的天堂亚洲一区| 欧美一区欧美二区| 美国av一区二区| 日韩欧美国产精品一区| 日韩成人伦理电影在线观看| 欧美日韩国产一级| 五月婷婷久久丁香| 欧美人狂配大交3d怪物一区| 亚洲五码中文字幕| 884aa四虎影成人精品一区| 亚洲va欧美va国产va天堂影院| 欧美图区在线视频| 亚洲国产另类精品专区| 欧美影院一区二区三区| 亚洲国产精品一区二区久久 | 亚洲免费伊人电影| 99re6这里只有精品视频在线观看| 国产精品久久久久久户外露出 | 久久精品国产一区二区三区免费看| 欧美一区三区二区| 国产一区二区三区精品视频| 337p日本欧洲亚洲大胆色噜噜| 国产高清精品久久久久| 中文一区在线播放| 91久久精品一区二区三| 午夜影视日本亚洲欧洲精品| 7777女厕盗摄久久久| 国内精品嫩模私拍在线| 国产人久久人人人人爽| 色综合咪咪久久| 午夜精品视频一区| 日韩精品一区二区三区视频| 国产精品99久久久久久似苏梦涵 | 日韩欧美国产高清| 国产91高潮流白浆在线麻豆| 亚洲女人的天堂| 欧美一区二区三区视频在线 | 日韩精品最新网址| 国产sm精品调教视频网站| 综合久久久久综合| 欧美日本在线一区| 国产精品18久久久久久久久| 国产精品久久久久aaaa| 欧美日韩国产经典色站一区二区三区| 美女一区二区视频| 1000部国产精品成人观看| 欧美精品九九99久久| 国产成人aaa| 午夜视频久久久久久| 国产欧美一区二区在线观看| 在线免费精品视频| 国产一区二区不卡老阿姨| 亚洲精品日日夜夜| 26uuu久久天堂性欧美| av电影天堂一区二区在线| 肉色丝袜一区二区| 日韩码欧中文字| 欧美成人精精品一区二区频| 色婷婷综合视频在线观看| 日本在线观看不卡视频| 国产精品久久久久一区二区三区| 91麻豆精品国产91| 99久久er热在这里只有精品66| 日韩精品免费专区| 亚洲欧洲精品天堂一级| www日韩大片| 欧美日精品一区视频| 成人av电影在线观看| 麻豆91在线观看| 亚洲一级片在线观看| 国产精品美女一区二区在线观看| 91麻豆精品国产91久久久久久久久 | 亚洲国产美国国产综合一区二区| 国产日韩欧美精品在线|