- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计说明书
(数据结构课程设计)
专 业:
课程名称: 数据结构课程设计 班级:
设计题目: 走迷宫游戏
设计时间: 2013-2-25 至 2013-3-8
评 语:_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:__ __评阅教师:__
一、问题描述与需求分析
1、问题描述
程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。
要求:
老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;
迷宫的墙足够结实,老鼠不能穿墙而过;
正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;
添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;
找出走出迷宫的所有路径,以及最短路径;
6)利用序列化功能实现迷宫地图文件的存盘和读出等功能。
功能需求分析
老鼠形象设计,使用图形化编程,绘制椭圆,填充颜色,绘制线。
设置游戏者在探索过程中遇到迷宫边界和墙时,不可继续前行,定义好迷宫边界。
使用time函数获取系统时间,处理游戏所用时间,限定操作时间,对游戏者的位置有准确的判断,当到达出口时,可以识别,返回提示信息。
对于迷宫的所有路径的求解,比较最短路径,最小生成树算法。
5.对迷宫的地图可将其存储到二进制文件中,在下次使用时直接调用,读取文件。
二、概要设计
1、总体设计思路
在程序中,采用二维数组存储迷宫地图(0:墙 1:路),在探索迷宫过程中采用栈的数据结构存储探索迷宫时的全部路径和有效路径,因栈的“后进先出”结构非常适合探索过程中的退步,即可以保证在任何位置都可沿原路退回。在探索迷宫过程中采用的是“穷举求解”的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向在继续探索,直到所有可能的通路都探索到为止。
2、 模块简介
程序由以下几个模块组成:
迷宫地图随机生成模块:
入口:int **Maze()
出口:return maze;
实现功能:该函数使用 new函数为指向二维数组的指针maze 申请存储空间,分两步实现,先申请长度等于行数加2 的二级指针,然后为每个二维指针申请存储空间。
调用包含在头文件 stdlib .h 中的库函数,随机数生成器 srand( ),rand( ), 及包含在头文件time.h 中的系统时间函数time(),srand((unsigned)time(NULL)) 使用系统时间,传入空指针NULL,作为初始化种子,使得在后面调用的rand()%2函数产生不同的随机数,取余之后为(0和1),从而实现了迷宫地图的随机生成,但使用该方法产生的迷宫地图中不一定存在一条从入口到出口的路径。
最后使用for循环嵌套给迷宫的上、下、左、右边界赋值0(为墙壁);指定迷宫的入口与出口位置同时赋值为1(为通道)。
因定义了二维指针类型函数,故在其它函数调用该函数时返回指向迷宫地图的二维指针,使得调用迷宫地图极为方便。
栈操作实现模块:
该模块共包含:①初始化栈,②元素入栈,③元素出栈,④删除栈顶元素,⑤栈的遍历 5个函数。
①初始化栈
入口:int StackTraverse(SqStack *s)
出口:exit(OVERFLOW); return TRUE;
实现功能:初始化一个栈,并为其分配存储空间初始量。形参为栈类型指针,调用时传递实参全局变量realPath Path 地址,调用包含在头文件 malloc.h 中的库函数malloc 根据栈的存储空间初始量及SqStack所占字节为其动态分配内存,最后,将内存地址赋给栈底指针,同时使栈顶指针也指向该内存,栈的大小为存储空间初始量;当分配失败时,返回空指针NULL,退出该函数同时输出错误提醒语句,以便调试;分配成功,返回TRUE,表明该函数已执行。
这样做的优点是节省了内存,根据存储使用量动态分配,在使用结束后可及时释放该内存。
②元素入栈
入口:int Push(SqStack *s,SElemType e)
出口:exit
文档评论(0)