ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:195.81KB ,
资源ID:21259833      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21259833.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整版C++毕业课程设计自动走迷宫小游戏Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整版C++毕业课程设计自动走迷宫小游戏Word文件下载.docx

1、路径查找核心分为两个部分:路径查找、更优解替换。路径查找包括可通性检查、脚步前进、脚步后退三个模块。可通性检查会检查当前脚步的四个方向是否有通路。脚步前进可以在有通路的情况下抵达下一个点,并记录在脚步双向链表中。脚步后退使在当前脚步无路的情况下后退一步,并转向其他方向,同时删除最后一个脚步。可通性检查。可通性检查用来判断指定的方向是否可以通过。需要判断两方面内容,即下一点是否有障碍和下一点是否已包含在了已有路径之中。若同时满足无障碍和无包含条件,则可以通过。否则不能通过。 脚步前进。下一点若经过检查可以通过,则通过move()函数完成前进。“前进”的实现有两方面,第一方面,将新脚步纳入双向链表

2、中,另一方面,在迷宫数组中将本步坐标所指标记为“已走”。 脚步后退。若本步四个方向都不能行走,则通过back()函数退后。退后包括两方面,一方面把链表中最后一个节点抛弃,当前脚步指向倒数第二个节点。另一方面,将迷宫数组中已抛弃节点指向的元素重新标记为“未走”,以便进行其他路径的寻路操作时可以顺利通过。输出模块。实现迷宫解的图形化显示。其他模块。格式化模块,用于迷宫求解后的处理。迷宫数组改写模块,按照求解的结果改写迷宫二维数组,以满足最终输出需要。功能模块图如下图所示 图31功能模块图3.2函数说明1. data() 函数原型void data(int m,int n) data()函数用于当用

3、户输入的不是规整的m行n列的迷宫,用来生成规则的数字迷宫2.print_maze() 函数原型void print_maze(int m,int n) print_maze()函数用于打印迷宫外壳3.result_maze()函数原型void result_maze(int m,int n) result_maze()函数用于打印输出迷宫的星号路径4.visit()函数原型void visit(int row,int col,int maze5151) visit()函数用于访问迷宫矩阵中的节点5.) ) 这个是打印输出迷宫的星号路径 int i,j; cout迷宫通路(用表示)如下所示:nt

4、; for(i=0;im;i+) coutn for(j=0;jn;j+) if(mazeij=0|mazeij=2) 2是队列中访问过的点 cout if(mazeij=1) if(mazeij=3) 3是标记的可以走通的路径 cout void enqueue(struct point p) 迷宫中队列入队操作 queuetail=p; tail+; 先用再加,队列尾部加1struct point dequeue() 迷宫中队列出队操作,不需要形参,因此用结构体定义 queue ) 路径求解 X=1; 初始值定为1 struct point p=0,0,-1; 定义入口节点 if(maze

5、p.rowp.col=1) 入口为1时,迷宫不可解n=n此迷宫无解nn X=0; return 0; mazep.rowp.col=2; 标记为已访问 enqueue(p); 将p入队列 while(!is_empty() p=dequeue(); if(p.row=m-1)&(p.col=n-1) 当行和列为出口时跳出3.5 限制条件在输入值时必须按照程序所规定的输入,否则将运行错误或无法运行。 第四章 软件使用说明 4.1软件使用说明及出现的问题 运行环境为 Microsoft Visual C+6.0 输出界面有三个选项,1为手动生成迷宫,2为自动生成迷宫,3为推出程序。当程序运行时,设

6、cycle为0,当选择3退出程序时,cycle为-1。 选择自动生成迷宫时,只需输入想要迷宫的行数.列数。在输出界面上,起初,仅仅是将最终结果展示,而无矩阵的规范输出,即如果使用者手输出迷宫时,并未整齐的输入迷宫,如果此时显示迷宫最后的路径,使使用者不易清晰的看出路径而难以理解。基于站在使用者的角度,加入了data函数,实现了数组、符号、数位路径、字符路径共同出现的最终界面,并在输出时添加相应的箭头指示,在输出的迷宫图时将最外层加入的围墙用“”表示,经多次修改,使得输出界面整洁大方。4.2运行结果 图41欢迎界面 图41测试结果迷宫有解 第五章 课程设计心得与体会在程序编写的过程中,发现了很多

7、问题及错误。例如,程序刚形成雏形时,经测试,程序只能实现8*8的迷宫矩阵寻路,并且会出现寻路时跳出迷宫的情况。因此,程序员在此基础上,将迷宫矩阵数组由原来的maze1010改为mazeN+2M+2,并在相应函数上加以大量改动,最终使本程序实现了程序本身范围内的任意N*M迷宫矩阵组合的寻路求解。在最开始判断搜索方向的时候,我们列出的八个方向并未按照一定顺序搜索,此时就会出现错误,后来采用一定顺序来完成迷宫的搜索,因为设定迷宫的入口在左上方,出口在右下方,所以采用顺时针方向比采用逆时针方向能最先找出最短路径。所以最后采用了顺时针的搜索方向,即沿北、东北、东、东南、南、西南、西、西北八个方向搜索。在

8、测试输出结果方面,出了一个困扰我们一阵时间的问题,在以5*7自动生成迷宫矩阵的测试过程中,几乎每隔几次都会出现一次这样类似的问题(见下图),在下图的输出界面 图51以及字符展示界面中,经过简单的分析,便可以得出最后通往出口的道路,但在程序判断并输出路径后,在图中可以看到:五角星所标记的走过的路,在出口处出现了错误。但是此程序手动输入的时候不会出现任何错误,所以问题锁定在自动生成迷宫函数中。在此,我们列出当时的自动生成迷宫函数:void automatic_maze(int m,int n) n迷宫生成中nn system(pause); mazeij=rand()%2; maze00=0; m

9、azei-1j-1=0;在修改过程中,反复分析了各个函数后将问题锁定在自动生成函数处。观察此函数,发现“mazei-1j-1=0;”是导致问题的最终所在。该语句的初衷是将迷宫矩阵中最初一个数判定为0,防止出现迷宫出口不通的情况。在这儿以5*7迷宫为例,经过分析,当跳出for循环时,i=5,j=6,而要改变的数是maze57,而非maze56,这也就是导致上图所示结果的原因,将该语句改为mazem-1n-1,问题解决。附录一:参考文献1、谭浩强,C+程序设计,北京:清华大学出版社出版,2004年6月2、谭浩强,C+程序设计题解与上机指导,北京:清华大学出版社出版,2005年3月3、姜灵芝、余健,

10、C语言课程设计案例精编,北京:清华大学出版社,2008年1月4、严华峰,Visual C+课程设计案例精编,北京:中国水利水电出版社出版,2002年附录二:源代码#includemazeij;void automatic_maze(int m,int n) 自动生成迷宫 mazeij=rand()%2; 随机生成0、1 将开始和结束位置强制为0,保证有可能出来迷宫 mazem-1n-1=0;void data(int m,int n) 当用户输入的不是规整的m行n列的迷宫,用来生成规则的数字迷宫根据您先前设定的迷宫范围 我们将取所输入的前m*n个数生成迷宫n数字迷宫生成结果如下:nn迷宫入口n

11、j+) if(mazeij=0) cout 0 1迷宫出口nvoid print_maze(int m,int n) 打印迷宫外壳 int i,j,k;n字符迷宫生成结果如下: 生成上外壳 for(k=0;kk+) 这两个黑三角用来生成顶部外壳 生成左外壳 if(mazeij=0) printf( if(mazeij=1) printf( 生成右外壳 n 生成底部外壳 cout=0)&(p.row-1)m)&(p.col+0)n)&(mazep.row-1p.col+0=0) visit(p.row-1,p.col+0,maze); 北(p.col+1)(mazep.row-1p.col+1=

12、0) visit(p.row-1,p.col+1,maze); 东北 if(p.row+0)(mazep.row+0p.col+1=0) visit(p.row+0,p.col+1,maze); 东 if(p.row+1)(mazep.row+1p.col+1=0) visit(p.row+1,p.col+1,maze); 东南(mazep.row+1p.col+0=0) visit(p.row+1,p.col+0,maze); 南(p.col-1)=0)&(mazep.row+1p.col-1=0) visit(p.row+1,p.col-1,maze); 西南(mazep.row+0p.c

13、ol-1=0) visit(p.row+0,p.col-1,maze); 西 if(p.row-1)(mazep.row-1p.col-1=0) visit(p.row-1,p.col-1,maze); 西北 if(p.row=m-1&p.col=n-1) 如果当前矩阵点是出口点,输出路径n=n迷宫路径为:出口 printf(%d,%d)n,p.row+1,p.col+1); mazep.rowp.col=3; 逆序将路径标记为3 while(p.predecessor!=-1) p=queuep.predecessor; printf( mazep.rowp.col=3;入口 else n=

14、n此迷宫无解! return 0;void main() int i,m,n,cycle=0; while(cycle!=(-1)*n 欢迎进入迷宫求解系统n 设计者:杨晓辉 (计算机092202H班)n 手动生成迷宫 请按:1n 自动生成迷宫 请按:2n 退出 请按:3nn请选择你的操作: cini; switch(i) case 1:n请输入行数: cin请输入列数: while(m49)|(n49)n抱歉,你输入的行列数超出预设范围(),请重新输入: ); data(m,n); print_maze(m,n); path(maze,m,n); if(X!=0) result_maze(m,n); 当X不为0时,有解,调用输出路径函数nnPress Enter Contiue! getchar(); while(getchar()!=n 接受一个输入,当为回车时执行break跳出,否则一直执行接受数据 break; case 2: automatic_maze(m,n); while(getchar()! case 3: cycle=(-1);break; default:你的输入有误!nPress Enter Contiue!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1