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

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

?? createmap.cpp

?? 兔子走迷宮
?? CPP
字號:
#include"stdafx.h"
#include"CreateMap.h"
#include<stdlib.h>  
#include<time.h>  
//====================================================================================
int		g_MazeWidth;		//迷宮地圖寬度
int		g_MazeHeight;		//迷宮地圖高度
int		g_MazeMap[MAX_MAZE_WIDTH+1][MAX_MAZE_HEIGHT+1]={0};	//迷宮地圖數(shù)組
//=======================迷宮地圖的隨機(jī)創(chuàng)建模塊==========================================================
typedef struct 
{
	int tag;   						//在數(shù)組里標(biāo)記的數(shù)字
	int x,y;						//在數(shù)組中的位置g_MazeMap[x][y];
	int vx,vy;  					//x,y的移動方向
	int step;   					//在一個方向上連續(xù)挖地圖的長度
	int maxX;						//x的最大值
	int maxY;						//y的最大值
}SDigMap;
//====================================================================
void ClearMap(int w,int h)//將表示迷宮地圖的數(shù)組置零
{
	g_MazeWidth=w;
	g_MazeHeight=h;
	int i,j;
	for(i=0;i<=w;i++)
		for(j=0;j<=h;j++)
		{
			g_MazeMap[i][j]=0;
		}
		srand(time(0));
}
//=====================================================================================
void DigIt(SDigMap *p)//將該處挖掉,即打標(biāo)記
{
	g_MazeMap[	p->x  ][ p->y  ] = p->tag;
}
//=====================================================================================
void Walk(SDigMap *p)//挖地圖的坐標(biāo)前移
{
	    p->x	+=	p->vx;
    	p->y	+=	p->vy; 
}
//=====================================================================================
int  IsNextDigged(int x,int y,int vx,int vy,SDigMap *p)//判斷下一個坐標(biāo)是否被給該對象挖掉
{
	if( g_MazeMap[	x + vx  ][ y + vy ]	==	p->tag ) return 1;
	else 	return 0;
}
//==========================================================================================
void HitWall(SDigMap *p)//挖地圖的坐標(biāo)如撞墻,則反向
{
	    if( p->x + p->vx < 1 || p->x + p->vx > p->maxX) 
			p->vx = -p->vx;
    	if( p->y + p->vy < 1 || p->y + p->vy > p->maxY)  
    		p->vy = -p->vy;
}
//======================================================================================
int  CanNextBeDigged(SDigMap *p)//檢測下一個點是否可以挖
{
	   int x = p->x + p->vx;
	   int y = p->y + p->vy;             //下一點的坐標(biāo)
       int vx = p->vy;					//與原方向轉(zhuǎn)彎的方向
       int vy = p->vx;
	   //判斷當(dāng)前點的下一個點的三個鄰點是否被自己挖過,如果被自己挖過,下一點不能挖了,否則把自己挖通了
       if( IsNextDigged( x, y, p->vx, p->vy, p ) ) return 0;//前一點是否被挖 
       if( IsNextDigged( x, y, vx, vy, p ) ) return 0;//左一點是否被挖 
       if( IsNextDigged( x, y, -vx, -vy, p ) )	return 0;//右一點是否被挖  
       return 1;		//周圍都沒被挖,看來可以被挖
}
//====================================================================================
void Jump(SDigMap *p)//跳過下一點,跳到下一點的周圍三個點上
{
    	int vx=p->vy;
    	int vy=p->vx;	//與原方向轉(zhuǎn)彎的兩個方向
 	    Walk(p);		//先走到下一點上
        if( IsNextDigged( p->x, p->y, p->vx, p->vy, p ) )  //前一點被挖,走過去
        {
        	Walk(p);   
        }
        else if(IsNextDigged( p->x, p->y, vx, vy, p ))  //左一點被挖,走過去
        {
           	p->x += vx;    
        	p->y += vy;   
        }
        else if(IsNextDigged( p->x, p->y, -vx, -vy, p))  //右一點被挖,走過去
        {
           	p->x -= vx;
        	p->y -= vy;  
        }
}
//=====================================================================================
int  IsLinked(SDigMap *p)//檢查是否挖通
{
       	int vx=p->vy;
       	int vy=p->vx;//與原方向轉(zhuǎn)彎的兩個方向
       	//如果改點的三個鄰點,既不是自身標(biāo)記又不是0,則該點被別的SDigMap挖過,既已經(jīng)挖通了
    	if( g_MazeMap[ p->x+vy ][ p->y+vx ] != p->tag && g_MazeMap[ p->x+vy ][p->y+vx ] !=0 )  return 1;  //前一個點是否被別的挖
    	if( g_MazeMap[ p->x+vx ][ p->y+vy ] != p->tag && g_MazeMap[ p->x+vx ][ p->y+vy ] != 0 ) return 1; //左一個點是否被別的挖	 
    	if( g_MazeMap[ p->x-vx ][ p->y-vy ] != p->tag && g_MazeMap[ p->x-vx ][ p->y-vy ] != 0 ) return 1;//右一個點是否被別的挖
    	return 0; 
}
//=====================================================================================
void RandomVxy(SDigMap *p)//產(chǎn)生隨機(jī)方向
{
	    int vx=p->vy;
    	int vy=p->vx;
		int k=rand()%50;
    	//將隨機(jī)數(shù)3個空間,原方向必將改變
    	if( 0<=k && k<10 )// 反方向的概率為發(fā)生轉(zhuǎn)彎的概率一半
    	{    p->vx = -vx;
    		p->vy = -vy;
    	} 
    	if( 10<=k && k<30 )//右向
    	{
     		p->vx = -vy;
    		p->vy = -vx;
    	} 
    	if( 30<=k && k<50 )//向左    
    	{
    		p->vx = vy;
    		p->vy = vx;
    	}
}
//=====================================================================================
int  ContinuouslyDig( SDigMap *p )//連續(xù)挖
{
    	int i=0; 
    	RandomVxy( p );//產(chǎn)生一個隨機(jī)方向
 		p->step =1+rand()%2;//隨機(jī)產(chǎn)生在該方向上挖的連續(xù)步長
    	while( i<p->step )
    	{
			 HitWall( p );  //首先檢測是否撞墻,如果撞墻方向取反
			 //對于下一點的三種策略:1走過 2走過去挖掉 3跳過去
			if(IsNextDigged(p->x,p->y,p->vx,p->vy,p))//檢測下一點是否被自己挖過
				Walk(p);//已經(jīng)被挖,走過去
			 else if( CanNextBeDigged( p ) )//沒有被挖,是否可以挖
				{
					Walk( p );//可以挖,走過去,
        			DigIt( p );//挖掉
        			if( IsLinked( p ) ) return 1;//如果挖通,跳出循環(huán),并返回	
				}
			 else Jump( p );//不可以挖,跳過去	
			i++;
    	}
    	 return 0;
}
//=====================================================================================
int bSeed(int x,int y)//是否可以作為種子
{	//改點和四個鄰點都沒被挖,則可以從該點開始挖地圖
	if( g_MazeMap[x][y] != 0 )		return 0;
	if( g_MazeMap[x-1][y] != 0 )	return 0;
	if( g_MazeMap[x][y-1] != 0 )	return 0;
	if( g_MazeMap[x+1][y] != 0 )	return 0;
	if( g_MazeMap[x][y+1] != 0 )	return 0;
	return 1;
}
//=====================================================================================
void ImproveMap(int w,int h)//改善迷宮
{
	int		i,j;
	int 	tag=3;
	int		bLink=0;       //判斷地圖是否挖通
	//SDigMap:	tag	x	y	vx	vy	step	maxX	maxY
	SDigMap m={ 3,	1,	1,	1,	0,	1,		w-2,	h-2};//標(biāo)號為1,從坐標(biāo)(1,1)開始挖
	for( i=1; i<w-1; i++ )
		for( j=1; j<h-1; j++ )
		{
             if(bSeed( i, j )==1)
			 {
				m.tag=tag;
				m.x=i;
				m.y=j;
				tag++;
				DigIt(&m);
				bLink=0;
				while( !bLink )
                     bLink=ContinuouslyDig( &m );
			 }
		}
}
//=====================================================================================
void RandomExit(SDigMap *p,int w,int h,POINT* pExit)//pExit返回迷宮出口
{	//設(shè)置隨即出口,隨機(jī)出口位置可為左上角,坐下角,右上角
	int k=rand()%60;
	if( 0<=k && k<30 )//出口在左上角,概率最大
	{
		p->x=1;
		p->y=1;
		pExit->x=0;
		pExit->y=1;		
	}
	else if( 30<=k && k<45 )//左下角
	{
		p->x=1;
		p->y=h-2;
		pExit->x=0;
		pExit->y=h-2;		
	}
	else if( 45<=k && k<60 )//右上角
	{
		p->x=w-2;
		p->y=1;
		pExit->x=w-2;
		pExit->y=0;
	}
	g_MazeMap[pExit->x][pExit->y]=1;//先將迷宮出口挖掉
}
//========================================================================================
void CreateMap(int w,int h,POINT* pExit)//創(chuàng)建迷宮地圖,地圖大小為w*h,pExit返回出口坐標(biāo)
{
	//SDigMap:		tag		x		y		vx		vy		step	maxX		maxY
	SDigMap m1={ 	1,		1,		1,		1,		0,		1,		w-2,		h-2};//標(biāo)號為1,從坐標(biāo)(1,1)開始挖
	SDigMap m2={ 	2,		w-2,	h-2,	-1,		0,		1,		w-2,		h-2};//標(biāo)號為2,從坐標(biāo)(N,N)開始挖
	int		bLink=0;       //判斷地圖是否挖通
	ClearMap(w,h);//首先,全部清零			
	RandomExit(&m1,w,h,pExit);//隨機(jī)設(shè)置老鼠出口
	DigIt( &m1 );  	//初始點先挖掉    
	DigIt( &m2 );//老鼠在右下角
	while( !bLink )//從兩邊同時挖,先挖出從開始處到出口的通路
	{  
		bLink	=	ContinuouslyDig( &m1 );//從入口開始的挖圖對象,隨機(jī)方向,隨機(jī)步長,返回是否挖通
		if(!bLink)	bLink=ContinuouslyDig( &m2 );//從迷宮最深處開始的挖圖對像
	}
	ImproveMap(w,h);//改進(jìn)地圖,將大片沒被挖的地方,多挖出一些通道,讓地圖更加迷人,嘿嘿!
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡一二三区首页| 欧美激情一区在线观看| 亚洲一区二区高清| 欧美日韩一区在线| 亚洲一区二区黄色| 在线播放91灌醉迷j高跟美女 | 欧美影视一区在线| 久久99热这里只有精品| 久久精品在这里| 欧美日韩精品是欧美日韩精品| 日韩国产欧美在线视频| 欧美变态tickle挠乳网站| 18成人在线观看| 欧美色网站导航| 国产在线国偷精品免费看| 国产精品久久久久久久午夜片| 色综合天天天天做夜夜夜夜做| 亚洲国产一区二区a毛片| 欧美一卡在线观看| 99精品偷自拍| 日本成人中文字幕在线视频| 国产精品欧美久久久久无广告 | 91极品美女在线| 麻豆国产精品视频| 中文字幕日本乱码精品影院| 在线成人av影院| 91麻豆swag| 国产精品一线二线三线精华| 午夜免费久久看| 欧美激情在线看| 久久精品视频免费观看| 在线观看三级视频欧美| 成人禁用看黄a在线| 国产一本一道久久香蕉| 亚洲一区二区3| 夜夜亚洲天天久久| 国产日韩av一区| 26uuu国产在线精品一区二区| 91成人免费在线| 性久久久久久久久久久久| 综合久久久久久| 国产精品久久久久影院亚瑟 | 调教+趴+乳夹+国产+精品| 国产精品久久久久久久岛一牛影视 | 欧美mv日韩mv亚洲| 日韩精品一区二区三区蜜臀 | 国产精品一区专区| 美女爽到高潮91| 狠狠色狠狠色综合日日91app| 麻豆精品在线视频| 日韩成人免费看| 美女视频一区二区三区| 狠狠色丁香久久婷婷综合_中 | 秋霞午夜av一区二区三区| 午夜精品福利久久久| 亚洲精品国产品国语在线app| 亚洲激情中文1区| 日韩福利电影在线观看| 日韩成人av影视| 蜜桃视频在线观看一区| 精品在线你懂的| 99国产精品视频免费观看| 91麻豆精东视频| 久久久亚洲高清| 亚洲综合色婷婷| 国产福利91精品一区| 国产v综合v亚洲欧| 在线观看www91| 国产亚洲视频系列| 亚洲高清免费视频| 99精品1区2区| 久久免费看少妇高潮| 中文字幕一区二区三区不卡在线| 精品午夜一区二区三区在线观看| av一二三不卡影片| 国产欧美日韩亚州综合| 色综合色狠狠天天综合色| 欧美一区二区三区四区五区| 亚洲图片欧美一区| 在线一区二区视频| 欧美mv和日韩mv国产网站| 亚洲成年人影院| 亚洲午夜久久久久久久久电影网| 日本不卡视频在线观看| 国产成人免费在线视频| 欧美精品v日韩精品v韩国精品v| 91色九色蝌蚪| 日韩欧美激情一区| 国产宾馆实践打屁股91| 中文字幕在线播放不卡一区| 欧美日韩国产在线观看| 日韩成人av影视| 91麻豆精品国产91久久久更新时间| 亚洲韩国一区二区三区| 欧日韩精品视频| 亚洲va国产va欧美va观看| 91精品国产综合久久久久久| 天使萌一区二区三区免费观看| 色狠狠色狠狠综合| 日韩国产欧美在线播放| 欧美性猛交一区二区三区精品| 亚洲国产成人av网| 欧美一级欧美三级在线观看| 精品一区二区三区av| 亚洲私人影院在线观看| 在线观看欧美精品| 香蕉久久夜色精品国产使用方法| 欧美一级在线免费| 国产精品一区二区三区四区| 亚洲激情图片一区| 国产亚洲一区二区三区四区 | 韩日av一区二区| 国产日本一区二区| 91成人在线观看喷潮| 午夜精品一区在线观看| 26uuu国产电影一区二区| 成人sese在线| 六月丁香综合在线视频| 久久女同精品一区二区| 色综合久久综合网| 成人性生交大合| 日韩高清不卡在线| 亚洲国产精品一区二区久久| 国产精品午夜免费| 欧美激情中文字幕一区二区| 国产性天天综合网| 久久综合九色综合97婷婷| 日韩一区二区三区四区五区六区| 欧美日韩精品一区二区三区| 99精品在线观看视频| 激情欧美日韩一区二区| 午夜欧美视频在线观看 | 国产精品久久久久一区| 久久久久久久综合日本| 日韩精品一区二区在线观看| 精品婷婷伊人一区三区三| 一本在线高清不卡dvd| 国产a久久麻豆| 国内一区二区视频| 老色鬼精品视频在线观看播放| 午夜精品福利在线| 五月婷婷另类国产| 日韩在线卡一卡二| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲成精国产精品女| 亚洲国产精品久久久久婷婷884| 洋洋av久久久久久久一区| 亚洲欧美日韩电影| 丝袜诱惑亚洲看片 | 国产精品无人区| 亚洲欧美综合色| 亚洲精品老司机| 婷婷成人综合网| 国产乱码精品一区二区三区av| 国产夫妻精品视频| 一本大道久久a久久综合| 欧美艳星brazzers| 日韩亚洲欧美中文三级| 久久精品亚洲乱码伦伦中文| 国产精品乱人伦中文| 亚洲国产欧美日韩另类综合| 在线播放欧美女士性生活| 欧美日韩一卡二卡三卡| 日韩一区二区三区av| 欧美xxxxx牲另类人与| 中文字幕免费不卡| 婷婷中文字幕一区三区| 成人性生交大片免费看在线播放| 日本道在线观看一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 免费成人性网站| 成人性色生活片免费看爆迷你毛片| 色悠久久久久综合欧美99| 欧美不卡在线视频| 亚洲一区二区在线观看视频| 国产一区二区福利| 69堂国产成人免费视频| 亚洲精品菠萝久久久久久久| 精品一区二区免费| 欧美日韩国产在线观看| 亚洲精品日韩一| 成人av在线看| 国产女人aaa级久久久级| 麻豆国产精品官网| 日韩一区二区免费在线电影| 天天操天天干天天综合网| 91猫先生在线| 一区二区久久久| 91国偷自产一区二区三区成为亚洲经典 | 丁香亚洲综合激情啪啪综合| 精品国产网站在线观看| 日韩和欧美的一区| 欧美精品乱码久久久久久按摩| 一区二区三区蜜桃| 欧美三级日韩三级| 日韩和欧美一区二区| 欧美r级电影在线观看| 麻豆91在线播放| 久久先锋影音av鲁色资源| 丁香六月综合激情|