你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
用VC编程迷宫游戏(三)
 

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);               

            }

        }

    }

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089