• 大小: 434KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: C/C++
  • 标签:

资源简介

我当初做的C语言的迷宫小游戏,借鉴了一些网友的算法,整体来说感觉还可以,其中实现了简单的卷屏功能,迷宫的图随机产生并用稀疏矩阵的方式存入文件,便于观察修改,并可提示从当前位置到出口的最短路径,迷宫地图大小为300*300,希望对大家有帮助。文件中包括源代码和课程设计论文。

资源截图

代码片段和文件信息

#include “stdio.h“
#include “stdlib.h“
#include “conio.h“

#define N 300
#define P 149
#define Q 149
#define Max 100000
#define MAZE_MAX 300

FILE * fp;
char map_in[MAZE_MAX+2][MAZE_MAX+2];

void Map(int (*map)[]);
void PrMap(int mint nint (*map)[]);
void RuMap(int (*map)[]);
int mgpath(int xiint yiint xeint yeint (*map)[]);
int search(int xint y);
void Make_Maze(int xint y);
void FileInMap();

struct
{
      int ij;              
      int pre;              
}Qu[Max];

/*生成地图文件*/
/*采用深度优先搜索的方法产生迷宫地图*/
int search(int xint y)
{
    static int d[4][2]={01100-1-10};
    int zx=x*2zy=y*2nextturni;
    map_in[zx][zy]=0; turn=rand()%2? 1:3;
    for(i=0next=rand()%4;i<4;i++next=(next+turn)%4)
        if(map_in[zx+2*d[next][0]][zy+2*d[next][1]]==1)   
            map_in[zx+d[next][0]][zy+d[next][1]]=0       
            search(x+d[next][0]y+d[next][1]);         
    return 0;
}
void Make_Maze(int xint y)
{
    int z1z2;
    for(z1=0z2=2*y+2;z1<=2*x+2;z1++) 
        map_in[z1][0]=0map_in[z1][z2]=0;
    
    for(z1=0z2=2*x+2;z1<=2*y+2;z1++)
        map_in[0][z1]=0map_in[z2][z1]=0;
        
    map_in[1][2]=0;map_in[2*x+1][2*y]=0;     
    srand((unsigned)time(NULL));
    search(rand()%x+1rand()%y+1);
}
/*将产生的地图用稀疏矩阵的方式将可走的坐标存入文件中*/ 
void FileInMap()
{
     int xyz1z2; 
     x = P;
     y = Q;
    int ij;
    for(i=0; i<=x*2+2; ++i)
        for(j=0; j<=y*2+2; ++j)
            map_in[i][j] = 1;
    Make_Maze(x y);
    if((fp = fopen(“map.txt““w“)) == NULL)
{
printf(“Can not write!!\n“);
exit(0);;
}
    for(z2=1; z2<=y*2+1; z2++)
    {
        for(z1=1;z1<=x*2+1;z1++) 
      {  
           if(map_in[z2][z1] == 0)
             {
                       fprintf(fp“%d %d\n“z2z1);
                }
      }
    }
    fclose(fp);
}

/*读入通路坐标并初始化地图数组*/
void Map(int (*map)[N])
{
     int ij;
     FileInMap();
     for(i = 0;i < N;i++)
    {
          for(j = 0;j < N;j++)
          {
                map[i][j] = 1;
          }
    }
    
if((fp = fopen(“map.txt““r“)) == NULL)
{
printf(“Can not read file!!\n“);
system(“pause“);
exit(0);
}

while(!feof(fp))
{
fscanf(fp“%d %d\n“&i&j);
map[i][j] = 0;
}
map[1][1] = 2;  
fclose(fp);
}

/*打印地图*/
/*实现简单的卷屏判断*/
void PrMap(int mint nint (*map)[N])
{
     int m1n1m2n2;
     int ij;
     
     if( m >= 0 && m < 30){m1 = 0;m2 = 30;}
     else if(m >= 30 && m < 60){m1 = 30;m2 = 60;}
     else if(m >= 60 && m < 90){m1 = 60;m2 = 90;}
     else if(m >= 90 && m < 120){m1 = 90;m2 = 120;}
     else if(m >= 120 && m < 150){m1 = 120;m2 = 150;}
     else if(m >= 150 && m < 180){m1 = 150;m2 = 180;}
     else if(m >= 180 && m < 210){m1 = 180;m2 = 210;}
     else if(m >= 210 && m < 240){m1 = 210;m2 = 240;}
     else if(m >= 240 && m < 270){m1 = 240;m2 = 270;}
     else if(m >= 270 && m < 300){m1 = 270;m2 = 300;}

     if( n >= 0 && n < 30){n1 =

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      36084  2011-08-16 17:09  09033322王传宝\开始界面.png

     文件      41481  2011-08-16 17:11  09033322王传宝\提示最短路径界面.png

     文件      54042  2011-08-18 17:07  09033322王传宝\游戏成功.png

     文件      48776  2011-08-16 17:10  09033322王传宝\游戏界面.png

    I.A....    501822  2011-08-27 08:17  09033322王传宝\课程设计文档.doc

     文件     367879  2011-08-27 08:17  09033322王传宝\迷宫游戏程序\map.txt

     文件       8788  2011-08-21 12:23  09033322王传宝\迷宫游戏程序\MiGong.c

     文件      22703  2011-08-27 08:17  09033322王传宝\迷宫游戏程序\MiGong.exe

     目录          0  2011-08-27 08:17  09033322王传宝\迷宫游戏程序

     目录          0  2011-08-27 08:17  09033322王传宝

----------- ---------  ---------- -----  ----

              1081575                    10


评论

共有 条评论

相关资源