return Maze;
}
函数int SetMaze(int **Maze,int s,int x,int y),用于设置迷宫中的路径,实现的核心代码如下:
int CMaze::SetMaze(int **Maze,int s,int x,int y)
{
int r,xx,yy;
int i;
while(x!=2||y!=1) /* 当移动点不是终点时,执行循环中的代码 */
{
if(Maze[y][x-1]*Maze[y][x+1]*Maze[y+1][x]*Maze[y-1][x]==0)
/*如果点(x,y)的四方有连通点*/
{
r=rand()%4; /*随机产生r的值,r=0、1、2或3分别表示右、下、左、上*/
xx=x+(r==0)-(r==2);
yy=y+(r==1)-(r==3);
/*得到新点(xx,yy),该点是随机产生的,不一定是连通点*/
while(Maze[yy][xx]!=0) /*当(xx,yy)走不通时,继续找可以连通的点*/
{
r=rand()%4;
xx=x+(r==0)-(r==2);
yy=y+(r==1)-(r==3);
}
x=xx;y=yy;s++; /*更新移动点的坐标,增加步数s的值*/
Maze[y][x]=s; /*将s赋值于新位置*/
}
else /*如果没有连通点,则退回到s-1处,寻找s-1四周的变量还有没有路可走*/
{
for(i=0;i<4;i++)
{
xx=x+(i==0)-(i==2);
yy=y+(i==1)-(i==3);
if(Maze[yy][xx]==s-1)
{
x=xx;y=yy;s=Maze[y][x];
break;
}
}
if(i==4) /*s-1处也无路可走,便结束算法*/
break;
}
}
|