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

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

?? maze.cpp

?? 迷宮探險算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

void Maze::GenerateMaze()
{
	int w,n,e,s;
	direction dir;
	Point pos(rand()%width,rand()%height);
	TwoDimensionArray temp(width,height);
	temp.Set(pos.x,pos.y,1); /* mark the position */
	for (;;)
	{
		pos=FindExtendablePosition(temp);

		if (pos.x==-1&&pos.y==-1) break; /* constructing maze complete */
		for (;;)
		{

			w=ExtendableInDir(temp,pos, west);
			n=ExtendableInDir(temp,pos,north);
			e=ExtendableInDir(temp,pos, east);
			s=ExtendableInDir(temp,pos,south);
			dir=RandDirection(w,n,e,s);

			switch(dir)
			{
			case  west:
				pos.x-=1;
				maze.Set(pos.x,pos.y,2);
				break;
			case north:
				pos.y-=1;
				maze.Set(pos.x,pos.y,1);
				break;
			case  east:
				if (maze.Get(pos.x,pos.y)==0)
					maze.Set(pos.x,pos.y,2);
				else
					maze.Set(pos.x,pos.y,3);
					pos.x+=1;
				break;
			case south:

				if (maze.Get(pos.x,pos.y)==0)
					maze.Set(pos.x,pos.y,1);
				else
					maze.Set(pos.x,pos.y,3);
				pos.y+=1;
			}
			temp.Set(pos.x,pos.y,1); /* mark the position */
			if (!Extendable(temp,pos))
				break;
		}
	}
}

void Maze::GeneratePath()
{
	Point cur=start;
	int success=0;
	path.Set(cur.x,cur.y,1); /* mark start position */
	DetectPath(path,cur,success);

}
void Maze::DetectPath(TwoDimensionArray & ta,Point & cur,int & success)
{
	if (cur.x==end.x&&cur.y==end.y)
	{
		success=1;
		return;
	}
	if (cur.x>0 && (maze.Get(cur.x-1,cur.y) & 0x2) && (ta.Get(cur.x-1,cur.y)==0)) /* west */
	{
		cur.x-=1;
		ta.Set(cur.x,cur.y,1);
		DetectPath(ta,cur,success);
		if (success) return;
		ta.Set(cur.x,cur.y,0);
		cur.x+=1;
	}
	if (cur.y>0 && (maze.Get(cur.x,cur.y-1) & 0x1) && (ta.Get(cur.x,cur.y-1)==0)) /* north */
	{
		cur.y-=1;
		ta.Set(cur.x,cur.y,1);
		DetectPath(ta,cur,success);
		if (success) return;
		ta.Set(cur.x,cur.y,0);
		cur.y+=1;
	}
	if ((maze.Get(cur.x,cur.y) & 0x2) && (ta.Get(cur.x+1,cur.y)==0)) /* east */
	{
		cur.x+=1;
		ta.Set(cur.x,cur.y,1);
		DetectPath(ta,cur,success);
		if (success) return;
		ta.Set(cur.x,cur.y,0);
		cur.x-=1;
	}
	if ((maze.Get(cur.x,cur.y) & 0x1) && (ta.Get(cur.x,cur.y+1)==0)) /* south */
	{
		cur.y+=1;
		ta.Set(cur.x,cur.y,1);
		DetectPath(ta,cur,success);
		if (success) return;
		ta.Set(cur.x,cur.y,0);
		cur.y-=1;
	}
}
void DrawSize(int width,int height)
{
	int left=textwidth(prompt2)+24;
	char w[]="Width:";
	char h[]=" Height:";
	char buffer[8];
	setfillstyle(SOLID_FILL,BGCOLOR);
	bar(left,472,left+textwidth(w)+textwidth(h)+textwidth(" ")*6,479);
	settextjustify(LEFT_TEXT,CENTER_TEXT);
	setcolor(GREEN);
	outtextxy(left,476,w);
	sprintf(buffer,"%3d",width);
	left+=textwidth(w);
	setcolor(BGCOLOR);
	outtextxy(left,476,"   ");
	setcolor(YELLOW);
	outtextxy(left,476,buffer);
	left+=textwidth(buffer);
	setcolor(GREEN);
	outtextxy(left,476,h);
	left+=textwidth(h);
	setcolor(BGCOLOR);
	outtextxy(left,476,"   ");
	sprintf(buffer,"%3d",height);
	setcolor(YELLOW);
	outtextxy(left,476,buffer);
}
void Draw()
{
	int style,size;
	settextjustify(CENTER_TEXT, CENTER_TEXT);
	cleardevice();
	size = 1;
	style=TRIPLEX_FONT;
	settextstyle(style, HORIZ_DIR, size);
	outtextxy(320,9,caption);
	style=DEFAULT_FONT;
	settextstyle(style, HORIZ_DIR, size);
	settextjustify(LEFT_TEXT, CENTER_TEXT);
	outtextxy(24,467,prompt1);
	outtextxy(24,476,prompt2);
}
void DrawMaze(const Maze & m)
{
	int style,size,i,j,border;
	int mw,mh,left,top;
	setfillstyle(SOLID_FILL,BGCOLOR);
	bar(0,24,639,456);
	mw=m.GetWidth();
	mh=m.GetHeight();
	left=LEFT;
	top=TOP;
	setcolor(MAZECOLOR);
	line(left,top,left+mw*MAZE_CELL_SIZE,top);
	line(left,top,left,top+mh*MAZE_CELL_SIZE);
	for (j=0;j<mh;j++)
		for (i=0;i<mw;i++)
		{
			border=m.GetMaze(i,j);
			border=~border;
			if ( border & 0x1) /* bottom */
				line(left+(i+0)*MAZE_CELL_SIZE,
					top+(j+1)*MAZE_CELL_SIZE,
					left+(i+1)*MAZE_CELL_SIZE,
					top+(j+1)*MAZE_CELL_SIZE);
			if ( border & 0x2) /* right */
				line(left+(i+1)*MAZE_CELL_SIZE,
					top+(j+0)*MAZE_CELL_SIZE,
					left+(i+1)*MAZE_CELL_SIZE,
					top+(j+1)*MAZE_CELL_SIZE);
		}
}

void DrawPath(const Maze & m)
{
	int i,j;
	int mw,mh,left,top;
	mw=m.GetWidth();
	mh=m.GetHeight();
	left=LEFT;
	top=TOP;

	setcolor(PATHCOLOR);
	for (j=0;j<mh;j++) /* horz */
		for (i=0;i<mw-1;i++)
		{
			if (m.GetPath(i,j)&&m.GetPath(i+1,j)&& (m.GetMaze(i,j) & 0x2 ) )
				line(left+(i+0)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
					top+(j+0)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
					left+(i+1)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
					top+(j+0)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2);
		}
	for (j=0;j<mh-1;j++)
		for (i=0;i<mw;i++)
		{
			if (m.GetPath(i,j)&&m.GetPath(i,j+1)&& (m.GetMaze(i,j) & 0x1 ) )
				line(left+(i+0)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
					top+(j+0)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
					left+(i+0)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
					top+(j+1)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2);
		}
}

int TraceMaze(TwoDimensionArray & tr,Point & cur,const Maze & m,direction dir)
{
	int left,top;
	left=(639-m.GetWidth()*MAZE_CELL_SIZE)/2;
	top=(479-m.GetHeight()*MAZE_CELL_SIZE)/2+2;;
	switch(dir)
	{
	case west:
		if (cur.x>0 && (m.GetMaze(cur.x-1,cur.y) & 0x2))
		{
			if (tr.Get(cur.x-1,cur.y)==0)
			{
				tr.Set(cur.x-1,cur.y,1);
				setcolor(TRACECOLOR);
			}
			else
			{
				tr.Set(cur.x,cur.y,0);
				setcolor(BADCOLOR);
			}
			line(left+((cur.x-1))*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				top+cur.y*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				left+cur.x*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				top+cur.y*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2);
			cur.x-=1;
		}
		break;
	case north:
		if (cur.y>0 && (m.GetMaze(cur.x,cur.y-1) & 0x1))
		{
			if (tr.Get(cur.x,cur.y-1)==0)
			{
				tr.Set(cur.x,cur.y-1,1);
				setcolor(TRACECOLOR);
			}
			else
			{
				tr.Set(cur.x,cur.y,0);
				setcolor(BADCOLOR);
			}
			line(left+cur.x*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				top+(cur.y-1)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				left+cur.x*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				top+cur.y*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2);
			cur.y-=1;
		}
		break;
	case east:
		if (cur.x<m.GetWidth() && (m.GetMaze(cur.x,cur.y) & 0x2))
		{
			if (tr.Get(cur.x+1,cur.y)==0)
			{
				tr.Set(cur.x+1,cur.y,1);
				setcolor(TRACECOLOR);
			}
			else
			{
				tr.Set(cur.x,cur.y,0);
				setcolor(BADCOLOR);
			}
			line(left+(cur.x+1)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				top+cur.y*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				left+cur.x*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				top+cur.y*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2);
			cur.x+=1;
		}
		break;
	case south:
		if (cur.y<m.GetHeight() && (m.GetMaze(cur.x,cur.y) & 0x1))
		{
			if (tr.Get(cur.x,cur.y+1)==0)
			{
				tr.Set(cur.x,cur.y+1,1);
				setcolor(TRACECOLOR);
			}
			else
			{
				tr.Set(cur.x,cur.y,0);
				setcolor(BADCOLOR);
			}
			line(left+cur.x*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				top+(cur.y+1)*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				left+cur.x*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2,
				top+cur.y*MAZE_CELL_SIZE+MAZE_CELL_SIZE/2);
			cur.y+=1;
		}
		break;
	}
	if (cur.x==m.GetEnd().x&&cur.y==m.GetEnd().y)
	{
		sound(700);
		delay(100);
		nosound();
		return 1;
	}
	return 0;
}


int main(void)
{
	int mazewidth=8,mazeheight=6,success=0;
	int oldw,oldh;
	randomize();
	TwoDimensionArray trace(mazewidth,mazeheight);
	Point cur(0,0);
	Maze m(mazewidth,mazeheight);
	int i,j,key;



	trace.Set(0,0,1);

	Draw();
	DrawMaze(m);
	DrawSize(m.GetWidth(),m.GetHeight());
	for(;;)
	{
		oldw=mazewidth;
		oldh=mazeheight;
		while (bioskey(1)==0);
		key=bioskey(0);
		switch(key)
		{
		case ESC:
			goto exit;
		case F1:
			DrawPath(m);
			break;
		case F2:
			m.SetSize(mazewidth,mazeheight);
		case F3:
			DrawMaze(m);
			trace.SetSize(mazewidth,mazeheight);
			trace.Set(0,0,1);
			cur.x=0;
			cur.y=0;
			success=0;
			break;
		case HOME:
			if (mazewidth>2) mazewidth--;
			break;
		case END:
			if (mazewidth<MAZE_MAX_WIDTH) mazewidth++;
			break;
		case PAGEUP:
			if (mazeheight>2) mazeheight--;
			break;
		case PGDOWN:
			if (mazeheight<MAZE_MAX_HEIGHT) mazeheight++;
			break;
		case LEFTKEY:
			if (!success)
				success=TraceMaze(trace,cur,m,west);
			break;
		case UPKEY:
			if (!success)
				success=TraceMaze(trace,cur,m,north);
			break;
		case RIGHTKEY:
			if (!success)
				success=TraceMaze(trace,cur,m,east);
			break;
		case DOWNKEY:
			if (!success)
				success=TraceMaze(trace,cur,m,south);
			break;
		}
		if (oldw!=mazewidth||oldh!=mazeheight)
			DrawSize(mazewidth,mazeheight);
	}
	exit:

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久色在线视频| 精品视频在线视频| 国产性色一区二区| 国产成都精品91一区二区三| 国产三区在线成人av| 91一区在线观看| 午夜精品成人在线视频| 日韩精品中文字幕一区二区三区 | 亚洲欧洲无码一区二区三区| 成人性生交大合| 亚洲三级电影网站| 3d成人h动漫网站入口| 国产麻豆一精品一av一免费| 中文字幕一区二区不卡| 7777精品久久久大香线蕉| 久久av资源站| 亚洲视频中文字幕| 欧美成人video| 成人av网址在线观看| 亚洲成精国产精品女| 久久这里只有精品6| 91免费观看在线| 日韩国产欧美在线视频| 国产精品婷婷午夜在线观看| 欧美喷潮久久久xxxxx| 国产精品1024| 亚洲国产日韩a在线播放| 欧美电视剧在线看免费| 91麻豆国产自产在线观看| 免费看日韩a级影片| 中文字幕一区二区不卡| 欧美videos大乳护士334| 91在线国产福利| 久久成人免费电影| 依依成人综合视频| 久久精品综合网| 欧美视频日韩视频在线观看| 粉嫩嫩av羞羞动漫久久久| 亚洲成人av一区二区三区| 国产午夜亚洲精品不卡| 欧美嫩在线观看| 99久久精品国产一区| 狠狠色丁香婷婷综合| 亚洲成人三级小说| 亚洲欧美一区二区三区国产精品| 制服丝袜亚洲色图| 在线观看网站黄不卡| 国产精品中文字幕日韩精品| 日韩中文字幕1| 亚洲女女做受ⅹxx高潮| 国产婷婷一区二区| 欧美成人一级视频| 91麻豆精品国产自产在线观看一区| 成人激情午夜影院| 国产精品综合二区| 狠狠色狠狠色综合| 免费成人结看片| 性欧美大战久久久久久久久| 成人欧美一区二区三区视频网页 | 日本一区二区动态图| 日韩欧美中文字幕一区| 欧美亚洲动漫精品| 色偷偷88欧美精品久久久| 成人app软件下载大全免费| 国产一区二区不卡老阿姨| 久久国产夜色精品鲁鲁99| 日韩在线播放一区二区| 伊人婷婷欧美激情| 亚洲免费在线观看| 亚洲免费三区一区二区| 中文字幕一区二区三区精华液 | 亚洲婷婷综合色高清在线| 久久精品网站免费观看| 久久久青草青青国产亚洲免观| 欧美一级理论性理论a| 在线成人免费观看| 欧美一区二区三区四区在线观看 | 麻豆91免费看| 极品美女销魂一区二区三区免费| 久久国产精品99久久久久久老狼 | 国产精品久久久久久久裸模 | www久久久久| 久久久精品免费观看| 日本一区二区动态图| 国产精品乱人伦一区二区| 欧美国产禁国产网站cc| 亚洲图片激情小说| 亚洲一区二区三区四区在线 | 久久久一区二区三区捆绑**| 久久丝袜美腿综合| 国产精品乱码人人做人人爱| 亚洲欧洲精品一区二区三区不卡| 一区二区三区**美女毛片| 亚洲国产精品嫩草影院| 免费观看日韩av| 国产一区二区三区最好精华液| 国产精品亚洲专一区二区三区 | 亚洲第一成人在线| 免费在线观看一区| 成人综合在线视频| 色一情一乱一乱一91av| 欧美人狂配大交3d怪物一区| 日韩亚洲欧美中文三级| 国产调教视频一区| 亚洲制服欧美中文字幕中文字幕| 日韩中文字幕不卡| 成人免费毛片高清视频| 91黄视频在线| 久久亚洲影视婷婷| 一区二区视频在线看| 日本成人在线看| 成人激情图片网| 日韩三级电影网址| 亚洲欧洲综合另类| 免费在线视频一区| 99久久综合狠狠综合久久| 欧美另类videos死尸| 国产欧美一区二区三区沐欲| 一区二区三区小说| 国产一区二区三区免费观看| 日本韩国欧美在线| 26uuu亚洲| 午夜久久久影院| 波多野结衣中文字幕一区| 欧美日本韩国一区二区三区视频| 久久久精品国产99久久精品芒果| 亚洲电影视频在线| 不卡av在线免费观看| 精品美女被调教视频大全网站| 亚洲精品国产精华液| 国产麻豆午夜三级精品| 这里只有精品视频在线观看| 亚洲人成亚洲人成在线观看图片| 国内外成人在线| 欧美久久一二区| 亚洲毛片av在线| 大陆成人av片| 国产亚洲欧洲997久久综合 | 亚洲chinese男男1069| 粉嫩一区二区三区在线看| 欧美一级理论片| 亚洲成人自拍一区| 色噜噜狠狠成人中文综合| 国产精品免费丝袜| 国产激情一区二区三区| 日韩美女视频在线| 天堂成人国产精品一区| 欧美专区日韩专区| 亚洲欧美另类综合偷拍| www.爱久久.com| 中文字幕第一区综合| 国产电影一区二区三区| 久久网站最新地址| 国产乱人伦偷精品视频不卡| 日韩欧美高清在线| 美美哒免费高清在线观看视频一区二区 | 老司机午夜精品99久久| 欧美理论电影在线| 婷婷六月综合亚洲| 911国产精品| 香蕉乱码成人久久天堂爱免费| 欧美在线不卡视频| 亚洲不卡av一区二区三区| 欧美日韩中字一区| 日日摸夜夜添夜夜添国产精品| 欧美人牲a欧美精品| 午夜精品福利一区二区三区av | 日韩一区欧美二区| 67194成人在线观看| 日韩av一区二区三区| 91精品国产91久久久久久最新毛片| 亚洲国产精品一区二区久久恐怖片| 欧美中文字幕不卡| 日本在线不卡一区| 欧美电视剧免费全集观看| 激情五月播播久久久精品| 亚洲精品在线观看视频| 国产iv一区二区三区| 中文字幕av一区 二区| 不卡av免费在线观看| 亚洲在线视频网站| 欧美一区二区成人6969| 精品系列免费在线观看| 国产亚洲综合色| 99re66热这里只有精品3直播| 伊人色综合久久天天| 51精品秘密在线观看| 国产精品综合一区二区三区| 国产精品国产三级国产有无不卡| 日本精品一区二区三区四区的功能| 午夜视频在线观看一区| 久久婷婷国产综合国色天香| 北条麻妃国产九九精品视频| 亚洲小少妇裸体bbw| 日韩亚洲欧美中文三级| av午夜精品一区二区三区| 一区二区免费看| 欧美不卡一区二区三区四区| av一区二区三区四区| 午夜精品福利在线|