C++ 迷宫随机生成器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C:\Users\MyHoney\Desktop\School\maze.cppWednesday,April21,201010:28AM//=============================================================================//maze.cpp////C++implementationofarecursivemaze-generatingprogram.////History://2006.03.30/AbePralle-Created//2010.04.02/AbePralle-ConvertedtoC++//=============================================================================#includeiostreamusingnamespacestd;//----CONSTANTS-------------------------------------------------------#defineGRID_WIDTH79#defineGRID_HEIGHT23#defineNORTH0#defineEAST1#defineSOUTH2#defineWEST3//----GLOBALVARIABLES------------------------------------------------chargrid[GRID_WIDTH*GRID_HEIGHT];//----FUNCTIONPROTOTYPES---------------------------------------------voidResetGrid();intXYToIndex(intx,inty);intIsInBounds(intx,inty);voidVisit(intx,inty);voidPrintGrid();//----FUNCTIONS-------------------------------------------------------intmain(){//Startingpointandtop-levelcontrol.srand(time(0));//seedrandomnumbergenerator.ResetGrid();Visit(1,1);PrintGrid();return0;}voidResetGrid(){-1-C:\Users\MyHoney\Desktop\School\maze.cppWednesday,April21,201010:28AM//Fillsthegridwithwalls('#'characters).for(inti=0;iGRID_WIDTH*GRID_HEIGHT;++i){grid[i]='#';}}intXYToIndex(intx,inty){//Convertsthetwo-dimensionalindexpair(x,y)intoa//single-dimensionalindex.Theresultisy*ROW_WIDTH+x.returny*GRID_WIDTH+x;}intIsInBounds(intx,inty){//Returnstrueifxandyarebothin-bounds.if(x0||x=GRID_WIDTH)returnfalse;if(y0||y=GRID_HEIGHT)returnfalse;returntrue;}voidVisit(intx,inty){//Startingatthegivenindex,recursivelyvisitseverydirectionina//randomizedorder.//Setmycurrentlocationtobeanemptypassage.grid[XYToIndex(x,y)]='';//Createanlocalarraycontainingthe4directionsandshuffletheirorder.intdirs[4];dirs[0]=NORTH;dirs[1]=EAST;dirs[2]=SOUTH;dirs[3]=WEST;for(inti=0;i4;++i){intr=rand()&3;inttemp=dirs[r];dirs[r]=dirs[i];dirs[i]=temp;}//LoopthrougheverydirectionandattempttoVisitthatdirection.for(inti=0;i4;++i)-2-C:\Users\MyHoney\Desktop\School\maze.cppWednesday,April21,201010:28AM{//dx,dyareoffsetsfromcurrentlocation.Setthembased//onthenextdirectionIwishtotry.intdx=0,dy=0;switch(dirs[i]){caseNORTH:dy=-1;break;caseSOUTH:dy=1;break;caseEAST:dx=1;break;caseWEST:dx=-1;break;}//Findthe(x,y)coordinatesofthegridcell2spots//awayinthegivendirection.intx2=x+(dx1);inty2=y+(dy1);if(IsInBounds(x2,y2)){if(grid[XYToIndex(x2,y2)]=='#'){//(x2,y2)hasnotbeenvisitedyet...knockdownthe//wallbetweenmycurrentpositionandthatpositiongrid[XYToIndex(x2-dx,y2-dy)]='';//RecursivelyVisit(x2,y2)Visit(x2,y2);}}}}voidPrintGrid(){//Displaysthefinishedmazetothescreen.for(inty=0;yGRID_HEIGHT;++y){for(intx=0;xGRID_WIDTH;++x){coutgrid[XYToIndex(x,y)];}coutendl;}}-3-

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功