资源简介
我当初做的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
评论
共有 条评论