public:
int current_y; //移动点的纵坐标
int current_x; //移动点的横坐标
int xSize; //迷宫水平方向的长度
int ySize; //迷宫垂直方向的长度
int **Maze; //表示迷宫的二维数组
int **HWall; //迷宫水平方向的围墙
int **VWall; //迷宫垂直方向的围墙
HENHMETAFILE hemf,hemf2; //emf文件的句柄
};
下面依次介绍CMaze类的成员函数。
函数int **CreateMaze(),用于创建迷宫,返回值表示迷宫的二维数组,实现的核心代码如下:
int ** CMaze::CreateMaze()
{
int x=xSize-1,y=ySize,s=1;
int r;
int i,j;
Maze=new int*[ySize+2]; // Maze是表示迷宫的二维数组,为Maze分配内存
for(i=0;i<ySize+2;i++)
Maze[i]=new int[xSize+2];
for(i=0;i<ySize+2;i++)
for(j=0;j<xSize+2;j++)
Maze[i][j]=0; //迷宫内部的块初始为0
for(i=0;i<ySize+2;i++)
Maze[i][xSize+1]=Maze[i][0]=-1; //迷宫的边界初始为-1
for(i=0;i<xSize+2;i++)
Maze[0][i]=Maze[ySize+1][i]=-1;
Maze[y][x]=s; //s表示可以走出迷宫的步数,在起点处s=1
srand((unsigned)time(NULL)); //设置可产生随机数的种子
SetMaze(Maze,s,x,y); //生成连接起点终点的路径
for(i=ySize;i>0;i--) //这个二重循环实现强连通图
{
for(j=xSize;j>0;j--)
{
if(Maze[i][j]<=0) /*如果该点还未赋值*/
{
r=rand()%4;
while(Maze[i+(r==1)-(r==3)][j+(r==0)-(r==2)]<1)
r=rand()%4;
x=j;y=i;s=Maze[i+(r==1)-(r==3)][j+(r==0)-(r==2)]*2+1000;
Maze[y][x]=s; /*随机赋值,值应大于1000*/
SetMaze(Maze,s,x,y);
}
}
}
|