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

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

?? maze.cpp

?? 迷宮探險(xiǎn)算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
#include <graphics.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <bios.h>
#include <dos.h>

#define MAZE_MAX_WIDTH  48
#define MAZE_MAX_HEIGHT 36
#define MAZE_TOP        24
#define MAZE_CENTER    320
#define MAZE_CELL_SIZE  12
#define LEFT (639-mw*MAZE_CELL_SIZE)/2;
#define TOP	 (479-mh*MAZE_CELL_SIZE)/2+2;
#define BGCOLOR     BLACK
#define MAZECOLOR   WHITE
#define PATHCOLOR  YELLOW
#define TRACECOLOR  GREEN
#define BADCOLOR      RED

#define ESC      283
#define F1     15104
#define F2     15360
#define F3     15616
#define HOME   18176
#define END    20224
#define PAGEUP 18688
#define PGDOWN 20736
#define LEFTKEY  19200
#define UPKEY    18432
#define RIGHTKEY 19712
#define DOWNKEY  20480

char caption[]="Maze 2002  http://shchenchang.top263.net";
char prompt1[]="F1=Show Path  F2=New Maze  F3=Redraw Maze  ArrowKeys=Move  Esc=Exit";
char prompt2[]="Home/End=Change Width  PageUp/PageDown=Change Height  ";

enum direction {west,north,east,south};

class Point
{
public:
	int x,y;
	Point();
	~Point(){}
	Point(int,int);
	Point & operator=(const Point &);
};
Point::Point()
{
	x=y=0;
}
Point::Point(int ax,int ay)
{
	x=ax;
	y=ay;
}
Point & Point::operator=(const Point &p)
{
	x=p.x;
	y=p.y;
	return *this;
}

class TwoDimensionArray
{
private:
	int width,height;
	int **pM,*spM;
	void Clear();
public:
	TwoDimensionArray();
	TwoDimensionArray(int,int);
	~TwoDimensionArray();
	int SetSize(int,int);
	int Get(int,int) const ;
	int Set(int,int,int);
	int GetWidth() const {return width;}
	int GetHeight() const {return height;}
};
TwoDimensionArray::TwoDimensionArray()
{
	width=height=0;
	spM=NULL;
	pM=NULL;
}
TwoDimensionArray::~TwoDimensionArray()
{
	Clear();
}
int TwoDimensionArray::SetSize(int w,int h)
{
	int i,j;
	Clear();
	width=w;
	height=h;
	spM=new int[w*h];
	if (spM==NULL)
	{
		printf("Not enough memory!\n");
		exit(1);
		return 0;
	}
	pM=new int* [w];
	if (pM==NULL)
	{
		delete []spM;
		printf("Not enough memory!\n");
		exit(1);
		return 0;
	}
	for (j=0;j<w;j++)
		pM[j]=spM+j*h;
	for (i=0;i<w;i++)
		for (j=0;j<h;j++)
			pM[i][j]=0;

	return 1;
}
TwoDimensionArray::TwoDimensionArray(int w,int h):spM(NULL),pM(NULL)
{
	SetSize(w,h);
}
void TwoDimensionArray::Clear()
{
	if (pM!=NULL)
		delete []pM;
	if (spM!=NULL)
		delete []spM;
	width=height=0;
}
int TwoDimensionArray::Get (int x,int y) const
{
	return pM[x][y];
}
int TwoDimensionArray::Set(int x,int y,int v)
{
	pM[x][y]=v;
	return v;
}


class Graph
{
public:
	Graph();
	~Graph();
};
Graph G;
Graph::Graph()
{
	int gdriver = VGA, gmode=VGAHI, errorcode;

	errorcode = registerbgidriver(EGAVGA_driver);

	/* report any registration errors */
	if (errorcode < 0)
	{
		printf("Graphics error: %s\n", grapherrormsg(errorcode));
		printf("Press any key to halt:");
		getch();
		exit(1); /* terminate with an error code */
	}
	errorcode = registerbgifont(triplex_font);
	/* report any registration errors */
	if (errorcode < 0)
	{
		printf("Graphics error: %s\n", grapherrormsg(errorcode));
		printf("Press any key to halt:");
		getch();
		exit(1); /* terminate with an error code */
	}


   /* initialize graphics mode */
   initgraph(&gdriver, &gmode, "e:\\tc\\bgi");

   /* read result of initialization */
   errorcode = graphresult();

   if (errorcode != grOk)  /* an error occurred */
   {
	  printf("Graphics error: %s\n", grapherrormsg(errorcode));
	  printf("Press any key to halt:");
	  getch();
	  exit(1);             /* return with error code */
   }

}
Graph::~Graph()
{
	closegraph();
}

class Maze
{
private:
	int width,height;
	Point start,end;
	TwoDimensionArray maze,path;
	int ExtendableInDir(const TwoDimensionArray &,const Point &,direction);
	int Extendable(const TwoDimensionArray &,const Point &);
	Point FindExtendablePosition(const TwoDimensionArray &);
	direction RandDirection(int,int,int,int);
	void GenerateMaze();
	void GeneratePath();
	void DetectPath(TwoDimensionArray &,Point &,int &);

public:
	Maze();
	Maze(int,int);
	int SetSize(int,int);
	void SetStart(const Point &);
	void SetEnd(const Point &);
	const Point & GetStart() const;
	const Point & GetEnd() const;

	int GetMaze(int,int) const;
	int GetPath(int,int) const;
	int GetWidth() const{return width;}
	int GetHeight()const{return height;}
};
Maze::Maze()
{
	width=height=0;
}
int Maze::GetMaze(int x,int y) const
{
	return maze.Get(x,y);
}
int Maze::GetPath(int x,int y) const
{
	return path.Get(x,y);
}
int Maze::SetSize(int w,int h)
{
	int i;
	if (w<=1||h<=1)
	{
		printf("Meanless size!");
		return 0;
	}
	if (w>MAZE_MAX_WIDTH)
	{
		printf("Width is too large!");
		return 0;
	}
	if (h>MAZE_MAX_HEIGHT)
	{
		printf("Height is too large!");
		return 0;
	}
	width=w;
	height=h;
	start.x=0;
	start.y=0;  /* entrance of the maze is at upper left corner */
	end.x=w-1;
	end.y=h-1;  /* exit of the maze is at lower right corner */
	maze.SetSize(w,h);
	path.SetSize(w,h);

	GenerateMaze();
	GeneratePath();


	return 1;
}
Maze::Maze(int w,int h)
{
	SetSize(w,h);
}

void Maze::SetStart(const Point &p)
{
	start=p;
}
void Maze::SetEnd(const Point &p)
{
	end=p;
}
const Point & Maze::GetStart() const
{
	return start;
}
const Point & Maze::GetEnd() const
{
	return end;
}

int Maze::ExtendableInDir(const TwoDimensionArray & ta,const Point & p,direction dir)
{
	switch (dir)
	{
	case west:
		if (p.x>0 && (ta.Get(p.x-1,p.y)==0))
			return 1;
		return 0;
	case north:
		if (p.y>0 && (ta.Get(p.x,p.y-1)==0))
			return 1;
		return 0;
	case east:
		if (p.x<(ta.GetWidth()-1) && (ta.Get(p.x+1,p.y)==0))
			return 1;
		return 0;
	default: /* south */
		if (p.y<(ta.GetHeight()-1) && (ta.Get(p.x,p.y+1)==0))
			return 1;
	}
	return 0;
}

int Maze::Extendable(const TwoDimensionArray & ta,const Point & p)
{
	if ( ((ExtendableInDir(ta,p, west)) ||
		(ExtendableInDir(ta,p,north)) ||
		(ExtendableInDir(ta,p, east)) ||
		(ExtendableInDir(ta,p,south))) && ta.Get(p.x,p.y) )
		return 1;
	return 0;
}
Point Maze::FindExtendablePosition(const TwoDimensionArray & ta)
{
	int i,j,w,h,select;
	Point *tp,rp;
	int count=0;

	w=ta.GetWidth();
	h=ta.GetHeight();

	tp=new Point[w*h];

	for (i=0;i<w;i++)
		for (j=0;j<h;j++)
		{
			if ( Extendable(ta,Point(i,j)) )
			{
				tp[count].x=i;
				tp[count].y=j;
				count++;
			}
		}
	if (count==0)
		rp.x=rp.y=-1;
	else
	{
		select=rand()%count;
		rp=tp[select];
	}
	delete []tp;

	return rp;
}

direction Maze::RandDirection(int w,int n,int e,int s)
{
	direction dir[4];
	int count=0,select;
	if (e)
	{
		dir[count]=east;
		count++;
	}
	if (w)
	{
		dir[count]=west;
		count++;
	}
	if (s)
	{
		dir[count]=south;
		count++;
	}
	if (n)
	{
		dir[count]=north;
		count++;
	}


	select=rand()%count;
	return dir[select];
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷综合视频在线观看| 色噜噜久久综合| 欧美伊人久久久久久午夜久久久久| 国产成人免费视频一区| 91色视频在线| 91精品国产色综合久久ai换脸 | 久久精品国产秦先生| 美美哒免费高清在线观看视频一区二区| 国产一区二区三区四区五区入口| www.av精品| 337p亚洲精品色噜噜噜| 国产片一区二区三区| 亚洲午夜电影网| 国产a精品视频| 欧美精品1区2区| 中文字幕一区不卡| 蜜臀a∨国产成人精品| 波多野洁衣一区| 欧美成人伊人久久综合网| 亚洲人一二三区| 国产一区二区在线观看免费| 一本久久a久久免费精品不卡| 欧美tickling网站挠脚心| 亚洲欧洲精品天堂一级| 日本伊人午夜精品| 色哟哟一区二区| 久久久一区二区| 日本欧美久久久久免费播放网| 99久久精品国产麻豆演员表| 日韩亚洲欧美在线观看| 日韩伦理av电影| 国产一区二区伦理| 3atv一区二区三区| 夜夜嗨av一区二区三区| 成人高清免费在线播放| 日韩一级成人av| 亚洲大片在线观看| 一本大道久久a久久精品综合| 久久精品视频免费| 久久精品久久久精品美女| 欧美在线三级电影| 综合婷婷亚洲小说| 成人性视频网站| 久久久久久久久久看片| 美女尤物国产一区| 欧美精三区欧美精三区| 夜夜揉揉日日人人青青一国产精品| 粉嫩在线一区二区三区视频| 欧美成人精品福利| 日韩黄色免费网站| 欧美日韩精品一区二区三区| 日韩一区在线免费观看| 国产99久久久精品| 久久一二三国产| 久久er精品视频| 日韩欧美精品在线视频| 日本美女一区二区| 欧美一区二区视频免费观看| 亚洲一二三区不卡| 欧美亚洲综合久久| 亚洲国产一区二区三区 | 国产白丝精品91爽爽久久| 欧美一区二区三区四区久久| 亚洲成人777| 欧美日韩国产综合视频在线观看| 一区二区三区欧美视频| 在线观看免费视频综合| 亚洲欧美偷拍卡通变态| 成人一区二区三区在线观看| 国产日本欧洲亚洲| 成人福利在线看| 亚洲色图一区二区| 色伊人久久综合中文字幕| 一区二区三区波多野结衣在线观看 | 91一区二区三区在线观看| 久久美女艺术照精彩视频福利播放| 国内一区二区在线| 国产喷白浆一区二区三区| 丁香网亚洲国际| 国产精品理伦片| 91丨九色丨黑人外教| 亚洲精品网站在线观看| 在线观看亚洲成人| 日韩**一区毛片| 精品国产乱码久久久久久久| 国产一区二区成人久久免费影院| 国产欧美在线观看一区| 成人免费高清在线| 亚洲尤物在线视频观看| 欧美剧情片在线观看| 奇米精品一区二区三区在线观看| 欧美成人精精品一区二区频| 国产精品正在播放| 亚洲三级理论片| 欧美日韩免费电影| 狠狠色狠狠色综合系列| 国产精品美女一区二区| 色久优优欧美色久优优| 日韩**一区毛片| 国产肉丝袜一区二区| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲成人激情综合网| 欧美mv日韩mv| 91在线免费视频观看| 婷婷综合另类小说色区| 久久久久久久久久久99999| 91尤物视频在线观看| 日韩激情视频网站| 国产欧美日韩另类一区| 日本韩国欧美一区二区三区| 日韩精品91亚洲二区在线观看| 久久久久久久久岛国免费| 色哟哟国产精品| 精品一区二区三区的国产在线播放 | 三级一区在线视频先锋| 欧美精品一区二区不卡| 99久久免费国产| 蜜臂av日日欢夜夜爽一区| 国产成人精品影视| 一级日本不卡的影视| 久久影音资源网| 欧亚洲嫩模精品一区三区| 国模一区二区三区白浆| 亚洲少妇屁股交4| 精品第一国产综合精品aⅴ| 92国产精品观看| 国内一区二区在线| 亚洲第一成年网| 国产精品国产三级国产aⅴ原创| 在线播放亚洲一区| proumb性欧美在线观看| 久久精品国产99国产精品| 日本韩国视频一区二区| 91福利精品第一导航| 欧美日韩激情一区二区三区| 在线播放日韩导航| 久久综合久久久久88| 亚洲精品日韩综合观看成人91| 亚洲综合图片区| 久久99精品国产麻豆婷婷| 国产99久久久国产精品潘金网站| 99国产精品视频免费观看| 欧美午夜精品久久久| 久久久久久久久一| 天天色 色综合| 成人高清免费观看| 日韩一区二区不卡| 亚洲一区在线观看视频| 久久99国产精品久久| 欧美性大战久久| 欧美国产日韩一二三区| 国产成人欧美日韩在线电影| 91精品综合久久久久久| 日本中文字幕不卡| 国产欧美一二三区| 国产精品主播直播| 日韩毛片视频在线看| 欧美日韩精品免费| 久久成人18免费观看| 日韩久久精品一区| 久久久久国色av免费看影院| 综合电影一区二区三区 | 国产精品美女久久久久aⅴ国产馆| 欧美日韩国产在线观看| 91福利在线免费观看| 91在线云播放| 99久久精品一区| 不卡电影一区二区三区| 懂色av中文一区二区三区| 88在线观看91蜜桃国自产| 欧美午夜精品理论片a级按摩| 色94色欧美sute亚洲13| 91在线免费视频观看| 99视频在线精品| 99久久免费国产| 色诱亚洲精品久久久久久| 91在线porny国产在线看| 91在线观看免费视频| 91香蕉视频污在线| 色嗨嗨av一区二区三区| 色婷婷av一区二区三区gif| 色婷婷激情久久| 在线观看欧美黄色| 欧美日韩久久一区二区| 欧美精品久久一区二区三区| 欧美三级在线播放| 欧美高清精品3d| 欧美一级理论性理论a| 欧美一区二区三区视频在线 | 久久99蜜桃精品| 经典一区二区三区| 国产美女在线观看一区| 国产91露脸合集magnet| voyeur盗摄精品| 在线观看视频一区二区欧美日韩| 欧美体内she精高潮| 制服.丝袜.亚洲.另类.中文 | 成人精品一区二区三区四区| 成人福利在线看| 在线观看国产一区二区|