数据结构课程设计之迷宫游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
##大学
数据结构课程设计报告题目:走迷宫游戏
院(系):计算机工程学院
学生姓名:
班级:学号:
起迄日期: 2011-6-21 至 2011-6-30
指导教师:
2010—2011年度第 2 学期
一、需求分析
1 问题描述
走迷宫游戏
程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。
2 基本功能
1) 老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;
2) 迷宫的墙足够结实,老鼠不能穿墙而过;
3) 正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;
4) 添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;
5) 找出走出迷宫的所有路径,以及最短路径。
利用序列化功能实现迷宫地图文件的存盘和读出等功能
3 输入输出
输入为字符型:
1, 2, 3 分别实现功能选择
w(上),s(下),a(左),d(右)控制迷宫的走向
y表示确定 n表示否定
二、 概要设计
1. 设计思路:
实现走迷宫game ()
对迷宫地图进行修改
change ()
对修改的地图数组进行保存
edit ()
对修改的地图进行保存
savemap ()
实现自动搜路Mathpath ()
对搜寻的路径进行输
出print ()
2.数据结构设计:
采用的是栈来存储数据,进栈实际是在栈中插入三元组,出栈则只数组的个数进行操作
抽象数据类型线性表的定义如下: ADT SqStack{
数据对象:D={a i | a i ∈SElemType,i=1,2,3……,n,n ≥0} 数据关系:R1={| a i-1,a i ∈D,i=1,2,3,……,n} 基本操作:
SqStack *InitStack() 操作结果:创建一个空栈
void Push(SqStack *S,SElemType data) 初始条件:栈S 已存在
操作结果:插入一个元素,并且使数据个数加一(top++) void Pop(SqStack *S) 初始条件:栈S 已存在。
操作结果:栈中元素个数减一(top--) }
2. 软件结构设计:
game ()模块 函数原型:
void game(int map1[h][w])//游戏函数 {
#define killtime 15 clock_t start, finish; double duration;
int x=1,y=1,m=0,n=0,M,N,MAP[100][100];//x->colom y->row char cCtrl='\0';
cout<<" 游戏规则:"< for(M=0;M<=h-1;M++) for(N=0;N<=w-1;N++) MAP[M][N]=map1[M][N]; { { start = clock();//开始计时 while((cCtrl=getch())!='q') { switch(cCtrl) { case 'w'://向上 { cout<<'\a';//响铃 if(y>0&&!MAP[y-1][x]) y--; }break; case 's'://下 { cout<<'\a'; if(!MAP[y+1][x]) y++; }break; case 'a'://左 { cout<<'\a'; if(x>0&&!MAP[y][x-1]) x--; }break; case 'd'://右 { cout<<'\a'; if(!MAP[y][x+1]) x++; }break; } system("cls");//刷屏 for(m=0;m { for(n=0;n { if(m==y&&n==x) { system("color 6"); cout<<"◎";//现实老鼠所在位置 } else { if(MAP[m][n]) cout<<"■";//打印墙壁 else { if(m==9&&n==8) cout<<"☆";//显示粮仓 else cout<<"□";//显示可行路径 } } if(x==8&&y==9) { finish = clock();//停止计时 duration = (double)(finish - start) / CLOCKS_PER_SEC;//compute the time cout< if(duration>killtime)//lose { cout<<" 你输了,完蛋了,小老鼠要饿死了囧rz!!"< } else//win { cout< cout<<" "; for(int i=0;i<20-duration;i++) cout<<"◎"; cout< } exit(0); } } cout< } } } } } Mazepath()模块: void MazePath(int maze[][w],int x,int y)//找到全部路径的函数 { int i; SElemType data; if(x==h-2&&y==w-2)//到达出口 { print(S); return; } for(i=0;i<4;i++)//进行四个方向的判断 { data.seat.r=x; data.seat.c=y; data.d=i;