您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > 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-
本文标题:C++ 迷宫随机生成器
链接地址:https://www.777doc.com/doc-7028896 .html