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

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

?? maze.cpp

?? 迷宮探險算法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#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];
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日摸夜夜添夜夜添精品视频 | 亚洲男同1069视频| 国产精品99久久久久久久vr| 精品少妇一区二区三区视频免付费| 午夜亚洲福利老司机| 欧美mv日韩mv国产网站| 国产精品综合一区二区| 欧美一区二区三区视频免费| 国产精品三级av| 欧美精品高清视频| 国产99久久久国产精品| 中文字幕一区二区三区不卡在线| 91亚洲大成网污www| 日韩电影在线看| 中文字幕乱码日本亚洲一区二区| 欧洲一区二区三区在线| 久久超碰97人人做人人爱| 国产精品久久久久毛片软件| 色综合久久久久久久久久久| 久久不见久久见免费视频7| 中文欧美字幕免费| 欧美喷潮久久久xxxxx| 国产91精品入口| 日韩福利视频导航| 日韩在线a电影| 亚洲免费大片在线观看| 中文字幕的久久| 精品国产精品一区二区夜夜嗨| 在线看不卡av| 色噜噜狠狠色综合中国| 风间由美一区二区三区在线观看| 国产女人aaa级久久久级| 欧美色图免费看| 欧洲人成人精品| 波多野洁衣一区| 99国产精品久久久久久久久久| 国产精品白丝jk黑袜喷水| 国产一区啦啦啦在线观看| 青青草97国产精品免费观看无弹窗版| 亚洲影院久久精品| 亚洲激情av在线| 国产精品久久久久久久裸模| 亚洲另类春色国产| 亚洲一区在线视频| 九九热在线视频观看这里只有精品| 日韩精品1区2区3区| 国产在线不卡一区| 成人的网站免费观看| 欧美艳星brazzers| 欧美电影免费观看高清完整版| 久久久国际精品| 一区二区三区免费网站| 久久97超碰色| 国产99久久久国产精品潘金网站| 成人久久久精品乱码一区二区三区| 色综合夜色一区| 在线观看免费一区| 欧美成人免费网站| 夜夜操天天操亚洲| 丁香激情综合国产| 日韩视频在线一区二区| 亚洲专区一二三| 成人美女在线视频| 国产亚洲一区字幕| 天天综合网天天综合色| 91欧美一区二区| 中文字幕精品三区| 激情五月激情综合网| 日韩一级片网站| 天堂一区二区在线| 欧美日韩电影一区| 午夜视频一区在线观看| 欧美老人xxxx18| 一区二区三区四区在线播放| 国产精品77777竹菊影视小说| 欧美一区二区三区在线看| 亚洲成人精品在线观看| 91官网在线免费观看| 自拍偷拍欧美精品| 欧美色综合影院| 日韩国产在线一| 日韩精品一区二区三区视频播放 | 国产又黄又大久久| 精品国产露脸精彩对白| 国产福利91精品一区| 久久精品视频免费观看| 99视频在线观看一区三区| 中文字幕第一区第二区| 欧美视频一区二区三区四区 | 精品国产乱码久久久久久图片| 美女mm1313爽爽久久久蜜臀| 精品噜噜噜噜久久久久久久久试看| 久久99热狠狠色一区二区| 国产亚洲一区二区三区四区| 91网站黄www| 亚洲成人激情av| 欧美国产日本视频| 51午夜精品国产| 99精品国产视频| 久草精品在线观看| 洋洋成人永久网站入口| 国产日韩欧美综合一区| 日韩欧美中文一区二区| 欧美精品自拍偷拍动漫精品| 亚洲自拍偷拍麻豆| 精品处破学生在线二十三| 91原创在线视频| 国产精品一区二区在线观看不卡| 亚洲一区视频在线观看视频| 日本一区二区三区高清不卡| 欧美一区二区三区的| 欧美在线观看视频一区二区 | 国产三级一区二区| 欧美哺乳videos| 精品99一区二区| 精品99一区二区三区| 久久色.com| 欧美激情在线观看视频免费| 精品久久人人做人人爱| 久久奇米777| 国产精品成人一区二区艾草| 国产精品理论片在线观看| 国产偷国产偷精品高清尤物| 欧美激情在线一区二区三区| 国产精品午夜在线观看| 一区二区三区四区国产精品| 亚洲欧美国产三级| 性欧美疯狂xxxxbbbb| 日本在线观看不卡视频| 国产一区二区三区精品视频| 成人晚上爱看视频| 麻豆成人久久精品二区三区红 | 国产麻豆精品theporn| 播五月开心婷婷综合| 色94色欧美sute亚洲线路一久| 欧美三电影在线| 欧美高清在线视频| 日韩精品福利网| eeuss国产一区二区三区| 欧美日韩国产高清一区| 久久久美女毛片| 日本视频免费一区| 99精品视频一区二区三区| 欧美一级爆毛片| 一区二区三区国产精华| 国产精品影音先锋| 欧美成人福利视频| 亚洲v中文字幕| 色婷婷综合在线| 中文字幕亚洲成人| 国产一区二区精品在线观看| 欧美狂野另类xxxxoooo| 亚洲一区免费在线观看| 成人精品免费看| 久久久99久久精品欧美| 麻豆精品国产91久久久久久| 在线不卡的av| 免费久久99精品国产| 欧美日韩第一区日日骚| 国产精品久久久久桃色tv| a亚洲天堂av| 一区2区3区在线看| 欧美精品免费视频| 蜜臀av亚洲一区中文字幕| 欧美成人欧美edvon| 国产一区欧美二区| 日韩毛片在线免费观看| 欧美在线制服丝袜| 亚洲va国产va欧美va观看| 678五月天丁香亚洲综合网| 美国十次综合导航| 中文字幕免费一区| 色94色欧美sute亚洲线路一ni | 欧美亚洲国产bt| 久久aⅴ国产欧美74aaa| 日本一区二区成人在线| 欧美四级电影在线观看| 久热成人在线视频| 亚洲免费观看高清完整版在线| 91国内精品野花午夜精品| 麻豆成人久久精品二区三区红 | 毛片一区二区三区| 国产精品久久久久aaaa樱花| 欧美日韩成人综合| 成人av影视在线观看| 麻豆视频一区二区| 国产精品福利一区| 91国产成人在线| av不卡免费在线观看| 国产一区二区三区在线观看精品| 亚洲综合图片区| 国产精品家庭影院| 国产偷国产偷精品高清尤物| 欧美日韩黄色影视| 91啪亚洲精品| 97se亚洲国产综合自在线观| 国产成人精品亚洲777人妖| 麻豆成人av在线| 国产一区二区在线观看视频| 日本大胆欧美人术艺术动态|