- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息科学与技术学院
程序设计基础课程设计报告
题目名称: 猫抓老鼠的模拟
目录
1 课程设计题目与要求 3
1.1设计题目 3
1.2设计要求 3
2 总体设计 4
3 详细设计 5
3.1数据结构设计 5
3.2主模块设计 5
4 运行结果 8
5 课程设计总结 10
1 课程设计题目与要求
1.1设计题目
猫抓老鼠的模拟
1.2设计要求
1) 设计一个迷宫:猫,老鼠的位置随机生成;2) 猫,老鼠每移动一次,都重新计算最短路径.3) 分别模拟猫的速度大于老鼠,猫的速度等于老鼠两种情形.4) 迷宫可用数组表示,最短路径可用队列表示.1.3功能扩展(自己定制)1.可增加猫的数量;2.可随机生成迷宫墙壁的位置;3.设计老鼠应该用何策略才有可能逃脱被抓的命运 用C++语言,或者c语言
2 总体设计
在猫捉老鼠的模拟中,用到了二维指针。利用二维指针建立了迷宫,并且通过0代表通路,用1代表墙。在建立迷宫函数中,利用引用传递参数使迷宫自动生成。(自动是利用srand(time(NULL))来“播种子”后利用rand()%9来确定这些随机数是0~9之间,判断随即数大于6,则生成墙,否则为通路。这样就建立了迷宫。)
其次是利用结构体数组来作为栈,将老鼠和猫的每一步存入到栈中(也就是数组),当到达出口时则进行输出。
老鼠的走法是猫寻找迷宫的最短路径,寻找最短的出路,先将出口压入到栈中,并判断上、左、右斜上、左斜下单元的情况,并每次判断后将可行的路加入栈中,直到栈中的元素与迷宫中老鼠的初始位置相同的时候则将栈(数组)进行输出。
猫的走法是每一次老鼠走完后,都将老鼠的位置作为终点,进行判断,取最短的路径经行行走,每走一次将所走位置压入堆栈,最后输出。
图1 猫捉老鼠的模拟
3 详细设计
3.1结构体设计
3.2模块设计
图2 建立迷宫函数模块
3.3主模块设计
图4 主函数模块
4 运行结果
输入迷宫的行数
输入迷宫的列数,并随即生成迷宫,输出迷宫。
判断老鼠和猫的位置是否为墙,此时为猫为墙。完成函数操作。
输入迷宫出口,若老鼠位置及老鼠位置及出口位置不为墙,则老鼠和猫自动判断最短路径。猫捉老鼠函数结束后判断是否重新开始。
5 课程设计总结
在2个多星期的课题设计周中,我发现了自己许多的不足之处。就拿二维数组迷宫的自动创建为例,其中加入的cstdlib这个库函数,如果不翻阅资料是不会知道的。我从不同的书籍中查阅到了这点,自己的知识也有所长进。编写代码的时候有许多的繁琐之处,这些繁琐的地方都是通过不断的自我修改才不断完善,并且这种能力在不断的加强。学会了自己分段调试程序,不断在错误中改正自己犯的小细节错误。就这样在自己的错误中不断的提升了自己的能力,本打着挑战下自己的心态但最后还是发现自己做的c++太少了,以至于这套程序的不完整性。因此,这次的课题设计让我认识到了自己的不足,并且让我知道了自己的能力还是欠缺,需要在不断的学习中进步。
猫捉老鼠的模拟
二维数组代替迷宫(0代表通路,1代表墙。其中加入了随机数,并判断大于6让0和1随即的产生)
将做好的迷宫作为参数传入到函数中去
初始老鼠的起始位置
初始猫的起始位置
老鼠的走法
猫的走法
输出最后老鼠和猫所走路线
Struct Mark(迷宫结构体)
{
int x;
int y;
}
迷宫结构体
Struct zhan
{
int h;
int z;
}
用来存放猫和老鼠的路径
迷宫建立完成
开始
随机数6?
输入迷宫行数和列数m,n
int i; int j;
im?
jn?
a[i][j]=1
a[i][j]=0
是
是
是
否
否
否
输出a[i][j]
结束
随即产生猫和老鼠的起始位置
开始
猫的位置是否为墙
老鼠的位置是否为墙
出口的位置是否为墙
否
否
是
是
迷宫出口位置赋值给i1,j1
老鼠起始位置赋值给i2,j2
出口位置是否等于老鼠起始位置
累加器加1
否
累加器是否为1
Maze[i1][j1]==0
i1--
累加器是否为2
累加器清零
否
是
是
j1--
累加器是否为3
是
i1--;j1--
否
判断是否为来路
是
累加器加一
累加器是否为4
否
否
i1++;j1--
累加器不是1,2,3,4
否
是
将坐标设为不可通行
在回到上一次可通行道路
老鼠栈不为空
输出路径
结束
开始
建立迷宫函数
猫捉老鼠函数
结束
文档评论(0)