《数据结构课程设计-走迷宫》由会员分享,可在线阅读,更多相关《数据结构课程设计-走迷宫(17页珍藏版)》请在金锄头文库上搜索。
1、数据结构课程设计报告设计题目:走迷宫游戏专 业:计算机科技院 系:计算机学院姓 名: xxxxxxxx学 号: xxxxxxxxx时间:2013 年 10 月 10 日数据结构课程设计 走迷宫游戏 1 / 17目 录一、课程设计的目的.2二、需求分析.2三、课程设计报告内容.31.概要设计 .32.详细设计 .43.调试分析 .94.用户手册 .95.测试结果 .106.程序清单 .11四、小结16 五、参考文献16数据结构课程设计 走迷宫游戏 2 / 17一、课程设计的目的(1) 熟练使用 C 语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能
2、力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;二、需求分析程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。要求:老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;迷宫的墙足够结实,老鼠不能穿墙而过;正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;数据结构课程设计 走迷宫游戏 3 / 17找出走出迷宫的所有路径,以及最短路径。
3、利用序列化功能实现迷宫地图文件的存盘和读出等功能三、实验报告内容1 概要设计(1) 具体要求构建一个二维数组 mazeM+2N+2用于存储迷宫矩阵自动或手动生成迷宫,即为二维数组 mazeM+2N+2赋值构建一个队列用于存储迷宫路径建立迷宫节点 struct point,用于存储迷宫中每个节点的访问情况实现搜索算法 屏幕上显示操作菜单(2)本程序包含 10 个函数:主函数 main()手动生成迷宫函数 shoudong_maze()自动生成迷宫函数 zidong_maze()将迷宫打印成图形 print_maze()打印迷宫路径 (若存在路径) result_maze()入队 enqueue(
4、)出队 dequeue()判断队列是否为空 is_empty()数据结构课程设计 走迷宫游戏 4 / 17访问节点 visit()搜索迷宫路径 mgpath()2 详细设计实现概要设计中定义的所有数据类型及操作的伪代码算法节点类型和指针类型迷宫矩阵类型:int mazeM+2N+2;为方便操作使其为全局变量迷宫中节点类型及队列类型:struct pointint row,col,predecessor que512迷宫的操作(1)手动生成迷宫void shoudong_maze(int m,int n)定义 i,j 为循环变量for(i0 且 mazep.rowp.col-1=0,说明未到迷宫
5、左边界,且其左方有通路,则 visit(p.row,p.col-1,maze),将左方节点入队标记已访问如果 p.row-10 且 mazep.row-1p.col=0,说明未到迷宫上边界,且其上方有通路,则 visit(p.row,p.col+1,maze),将上方节点入队标记已访问访问到出口(找到路径)即 p.row=m-1 且 p.col=n-1,则逆序将路径标记为 3 即 mazep.rowp.col=3;while(p.predecessor!=-1)p=queuep.predecessor; mazep.rowp.col=3;最后将路径图形打印出来。菜单选择while(cycle!
6、=(-1)printf(n);printf( 欢迎进入走迷宫游戏演示系统 n);printf( - n);printf( -1. 手动生成迷宫 n);printf( -2.系统自动生成迷宫 n);printf( -3.退出系统 n);printf(n);printf(n);数据结构课程设计 走迷宫游戏 8 / 17printf(请选择你的操作 bb);scanf(%d,switch(i)case 1:printf(n 请输入行数 bb);scanf(%d,printf(n);printf(请输入列数 bb);scanf(%d,while(m39)|(n39)printf(n 抱歉,你输入的行列
7、数超出预设范围(0-39,0-39),请重新输入:nn);printf(请输入行数 bb);scanf(%d,printf(n);printf(请输入列数 bb);scanf(%d,shoudong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0)result_maze(m,n);printf(nnPress Enter Contiue!n);getchar();while(getchar()!=n);break;case 2:printf(n 请输入行数 bb);scanf(%d,printf(n);printf(请输入列数 bb);sc
8、anf(%d,while(m39)|(n39)printf(n 抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入!nn);printf(请输入行数 bb);scanf(%d,printf(n);printf(请输入列数 bb);scanf(%d,zidong_maze(m,n);print_maze(m,n);mgpath(maze,m,n);if(X!=0) result_maze(m,n);printf(nnPress Enter Contiue!n);getchar();数据结构课程设计 走迷宫游戏 9 / 17while(getchar()!=n);break;cas
9、e 3: cycle=(-1);break;default:printf(n);printf(你的输入有误!n);printf(nPress Enter Contiue!n);getchar();while(getchar()!=n);break;注:具体源代码见附录3调试分析在调试过程中,首先使用的是栈进行存储,但是产生的路径是多条或不是最短路径,所以通过算法比较,改用此算法4.用户手册本程序的运行环境为 windows7 64 位操作系统进入演示程序后即显示文本方式的用户界面数据结构课程设计 走迷宫游戏 10 / 175.测试结果图 1 手动生成迷宫数据结构课程设计 走迷宫游戏 11 /
10、17图 2 系统自动生成迷宫6程序清单#include#include#define N 39#define M 39int X;int mazeN+2M+2;struct pointint row,col,predecessor;queue512;int head=0,tail=0;void shoudong_maze(int m,int n)int i,j;printf(nn);printf(请按行输入迷宫,0 表示通路,1 表示障碍:nn);数据结构课程设计 走迷宫游戏 12 / 17for(i=0;i=0)if(p.row-1=0)if(p.row=m-1&p.col=n-1)prin
11、tf(n-n);printf(迷宫路径为:n);printf(%d,%d)n,p.row,p.col);mazep.rowp.col=3;数据结构课程设计 走迷宫游戏 14 / 17while(p.predecessor!=-1)p=queuep.predecessor;printf(%d,%d)n,p.row,p.col);mazep.rowp.col=3;else printf(n-n);printf(此迷宫无解!nn);X=0;return 0;void main()int i,m,n,cycle=0;system(cls);system(color 1f);printf( n);printf( 必做题:走迷宫游戏 n);printf( 姓名:xxxx n);printf( 学号:xxxxxxxxx n);printf( n);while(cycle!=(-1)printf(n);printf( 欢迎进入走迷宫游戏演示系统 n);printf( - n);printf( 1.手动生成迷宫 n);printf( 2.系统自动生成迷宫