老鼠迷宫.doc
《老鼠迷宫.doc》由会员分享,可在线阅读,更多相关《老鼠迷宫.doc(37页珍藏版)》请在咨信网上搜索。
1、(完整word版)老鼠迷宫 数 据 结 构 课 程 设 计3.8 老鼠迷宫姓 名: XXX院系: 计算机学院专 业: 计算机科学与技术年 级: 13级学 号: E11314XXX指导教师:XXX2015年 10月 5 日目录1.课程设计的目的32.需求分析33走迷宫游戏的设计33.1概要设计33.1.1主界面设计33.1.2存储结构33.1.3系统功能设计43.2详细设计43.2.1系统子程序及功能设计43.2.2数据类型定义53.2.3系统主要子程序详细设计63.3调试分析153.4用户手册164总结165、程序清单:(见附录)167、程序运行结果16附录122 37 / 371.课程设计的
2、目的(1) 熟练使用 C 语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力。2.需求分析(1) 程序运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。(2) 按动键盘上的方向操作杆控制老鼠在规定的时间内走到粮仓。(3) 老鼠形象可辨认,迷宫的墙足够结实,老鼠不能穿墙。(4) 若老鼠在规定时间走到粮仓处则提示成功,否则提示失败。(5) 添加编辑迷宫功能,可使迷宫墙变路,路变墙。(6
3、) 找出走出迷宫的所有路径,以及最短路径。3走迷宫游戏的设计3.1概要设计3.1.1主界面设计图 1主界面,如图1所示,包含六个菜单项,分别是开始游戏、编辑迷宫、读入迷宫、生成随机迷宫、最短路径、退出系统。输入数字选择对应菜单,进入子项。3.1.2存储结构本系统用结构体Maze存储迷宫,该结构体由roomMN,statusMN组成。room是int型数组,存储迷宫具体内容;status是int型数组,用来存放迷宫求解时通堵状态,迷宫大小M,N固定。本系统用结构体pos存储迷宫求解时每一步的信息,该结构体由x,y,parent,self,next4组成。x,y是整型变量,存储坐标,parent是
4、上一步在队列数组中的位置,self是本步在队列数组中的位置,next4存储四个方向下一步在队列数组中的位置。本系统用结构体Queue形成队列,该结构体由pM*N,front,rear组成。p是pos型变量,存储队列中的内容。本系统用数组实现队列操作,是为了求最短路径时,用BFS算法后,还能找到出队列的数据。3.1.3系统功能设计本系统主菜单包含四个选项,功能描述如下:菜单1:开始游戏。在菜单1中开始走迷宫游戏,老鼠用笑脸表示,初始状态老鼠在迷宫中间;通过键盘操纵老鼠上下左右移动,游戏分为6关,同一张地图,在规定时间到达粮仓可升级,否则提示失败,返回主菜单,随着级别增高最大时间逐渐减少。菜单2:
5、编辑迷宫。在菜单2中编辑迷宫,按上下左右操作光标。可输入1,控制光标走过的地方为通路,输入0控制光标走过的地方为障碍。输入非法字符退出编辑。光标默认在迷宫中间,默认情况下光标走过的地方都为通路。菜单3:读入迷宫。在菜单3中读入已存在的迷宫文件,并输出读入的迷宫。菜单4:随机迷宫。在菜单4中以系统时间作为种子,随机生成地图,并输出地图,询问是否保存到文件。菜单5:最短路径。在菜单5中进行迷宫求解,若存在走出迷宫的路径,则找出最小路径,并用图形化界面输出,同时输出所有可走出迷宫的路径数目;否则,提示未找到最短路径,即该迷宫无解。菜单0:退出系统。3.2详细设计3.2.1系统子程序及功能设计本系统设
6、置19个子程序,各程序的函数名及功能说明如下:int maincourse()/主菜单int inputselection(int n)/输入菜单选择,返回值为输入的选项void initqueue(Queue &Q)/初始化队列void enqueue(Queue &Q,pos p)/进队void dequeue(Queue &Q,pos &p)/出队int emptyqueue(Queue Q)/判队空void display(Elemtype roomMN,int degree,int t,int flag)/输出迷宫void countdown()/倒计时进入迷宫游戏void play
7、(Elemtype roomMN)/迷宫游戏void filesave(Maze maze)/保存地图到文件void fileread(Maze &maze)/读入地图void modify(Maze &maze)/编辑迷宫void mazerand(Maze &maze)/随机生成迷宫int pass(Maze maze,pos p)/是否可通过void markprint(Maze &maze,pos p)/留下足迹void stepsdisplay(Queue Q,pos p,Maze maze)/输出最短路径void minroad(Maze maze)/最短路径void findal
8、lroad(Maze &maze,pos p,int &num)/找所有路径void allroad(Maze maze)/所有路径各个函数间的调用关系如下:主主菜单countdown();display();开始迷宫游戏play(roomMN)display();filesave(maze);修改迷宫modify(maze)display();从文件读入地址信息fileread(maze)display();filesave(maze);随机生成迷宫mazerand(maze)markprint();pass();stepsdiplay();minroad(maze)最短路径及所有路径数目统
9、计allroad(maze) (maze)markprint();pass();findallroad;图33.2.2数据类型定义struct MazeElemtype roomMN;/迷宫Elemtype statusMN;/迷宫求解记录;struct posint x,y,parent,self;/x,y是当前坐标,parent是上一步在队列中的位置int next4;/self是本步在队列中的位置,next是下四步在队列中的位置;struct Queuepos pM*N;/队列中元素int front;/队首int rear;/队尾;3.2.3系统主要子程序详细设计输出迷宫:void d
10、isplay(Elemtype roomMN,int degree,int t,int flag)/输出迷宫int i,j; /flag为0为游戏模式,flag为1或2为编辑模式,大于2为输出模式printf(nn);for(i=0;iM;i+)putchar(t);for(j=0;j=3)/其他模式putchar(n);continue;switch(i)case 0:printf( -);break;case 1:if(flag)printf( 编辑迷宫! );/编辑模式elseprintf( 欢迎进入迷宫游戏!);/游戏模式break;case 2:printf( -);break;ca
11、se 3:printf( -);break;case 4:printf( 按操纵 );break;case 5:printf( -);break;case 6:printf( -);break;case 7:if(flag)printf( 0,路边墙;1,墙变路);/编辑模式elseprintf( 当前等级:%d ,degree);/游戏模式break;case 8:printf( -);break;case 9:printf( -);break;case 10:if(flag=2)printf( 此时墙变路 );/编辑模式else if(flag=1)printf( 此时路变墙 );else
12、printf( 剩余时间:%dt,t);/游戏模式break;case 11:printf( -);break;putchar(n);走出迷宫游戏:void play(Elemtype roomMN)/迷宫游戏countdown();system(cls);clock_t start,start2;start=clock();int x=M/2,y=N/2,x1=1,y1=1;int degree=1,lefted_t=30,all_t=30;while(1)start2=clock();while(lefted_t=(start2-start)/second)all_t&!kbhit()/计
13、时及判断是否有输入system(cls);display(room,degree,all_t-lefted_t,0);while(clock()-start2second&!kbhit();start2=clock();lefted_t=all_t-lefted_t;if(lefted_t=0)/时间用完system(cls);printf(ttt*n);printf(ttt 游戏结束!挑战失败! n);printf(ttt*n);roomxy=1;roomM/2N/2=2;return;getch();switch(getch()/操纵case 72: x1=x-1;y1=y;break;
14、/ 向上case 80: x1=x+1;y1=y;break; / 向下case 75:x1=x; y1=y-1;break; / 向左case 77: x1=x; y1=y+1;/ 向右break;default:continue;if(x1=0|x1=M-1|y1=0|y1=N-1)/撞边墙了continue;else if(roomx1y1=0)/撞墙了continue;elseroomxy=1;x=x1;y=y1;if(x=N-2&y=N-2)/找到出口system(cls);degree+;all_t-=5;if(all_t=0)/随着升级,时间减少system(cls);print
15、f(ttt*n);printf(ttt 你赢了!n);printf(ttt*n);roomxy=3;roomM/2N/2=2;return;printf(ttt*n);printf(ttt 升级了!等级%d!n,degree);printf(ttt*n);system(pause);start=clock();/下一关重新计时x=M/2;y=N/2;roomxy=2;/更新坐标elseroomxy=2;/更新坐标编辑迷宫:void modify(Maze &maze)/编辑迷宫int flag=1;int laststep;int x1=M/2,y1=N/2,x=M/2,y=N/2;char
16、c;while(1)system(cls);display(maze.room,0,0,flag+1);while(!kbhit();c=getch();if(c=-32)c=getch();switch(c)case 72: x1=x-1;y1=y;break; / 向上case 80: x1=x+1;y1=y;break; / 向下case 75:x1=x; y1=y-1;break; / 向左case 77: x1=x; y1=y+1;/ 向右break;case 48:flag=0;/变墙break;case 49:flag=1;/变路break;default:system(cls)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 老鼠 迷宫
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。