数据结构课程设计走迷宫游戏.docx
《数据结构课程设计走迷宫游戏.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计走迷宫游戏.docx(11页珍藏版)》请在冰点文库上搜索。
数据结构课程设计走迷宫游戏
信息工程学院
课程设计报告
课程名称《数据结构》
课题名称走迷宫游戏
专业
班级
学号
姓名
联系方式
指导教师
2015年12月27日
1、数据结构课程设计任务书
题目
程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。
游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。
、要求
1)老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;
2)迷宫的墙足够结实,老鼠不能穿墙而过;
3)正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;
4)添加编辑迷宫功能,可修改当前迷宫,修改内容:
墙变路、路变墙;
5)找出走出迷宫的所有路径。
利用序列化功能实现迷宫地图文件的存盘和读出等功能
2、总体设计
、设计思路及总体组成框架
1、思路
(1).利用mfc可以把迷宫地图以及老鼠形象可变的导出来。
(2).需要有墙有路,通过把迷宫地图划分成一个一个小方块,通过一个数组的值来判断是墙是路。
(1表示墙0表示路)
(3).利用栈,来存入当前位置,然后判断下一位置,是否有路,存入栈中或出栈。
(4).把每个数组元素对应一个按钮根据点击按钮,改变数组的值从而改变墙和路的转化。
(5).键盘接受字符,根据字符调用不同的图片,达到老鼠超前走的效果。
2、数据结构
本程序运用的逻辑结构是线性和存储结构为顺序。
之所以采用本结构是因为,迷宫主要用到栈来储存当前位置,和判断下一位置,来入栈。
抽象数据类型线性表的定义如下:
ADTStack{
数据对象:
D={ai|ai∈ElemSet,i=1,2,3……,n,n≥0}
数据关系:
R1={|ai-1,ai∈D,i=1,2,3,……,n}
基本操作:
Initstack(&s)
操作结果:
构造一个空栈s。
Stackempty(s)
初始条件:
栈s已经存在。
操作结果:
将s清为空栈。
Push(&s,e)
初始条件:
栈s已经存在。
操作结果:
插入元素e为新的栈顶元素。
Pop(&s,&e)
初始条件:
栈s已经存在,且非空。
操作结果:
删除s的栈顶元素,并用e返回其值。
}ADTStack
3、根据课程设计题目的功能要求,总体概要的组成框图如下:
、操作流程图
1、键盘操作流程:
2、模块流程图:
面向对象而非面向工程的程序设计,事件和判断都具有同时性和并发性。
3、游戏界面显示
3、详细设计
、程序中所采用的数据结构及存储结构的说明
数据类型:
结构体,整形数据
输入:
按照窗口、菜单提示按鼠标左键
移动老鼠位置,按键盘的上、下、左、右键
输出:
可视化迷宫
、函数功能模块说明
(1)开始游戏
voidCMainFrame:
:
OnStart():
开始游戏。
voidCLabyrinthView:
:
OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags):
小老鼠键盘操。
第一个参数表示哪个按键,接受上、下、左、右字符,判断调用哪个小老鼠图片,最后用脚印图片覆盖老鼠图片,达到朝前走,留下脚印的效果。
(2)重新开始
voidCMainFrame:
:
OnSysmap():
系统地图。
voidCLabyrinthView:
:
OnSelfmap()、voidCLabyrinthView:
:
OnLButtonDown(UINTnFlags,CPointpoint):
绘制地图函数。
达到墙变路、路变墙的目的。
(3)保存图片
voidCMainFrame:
:
OnSave():
保存地图。
(4)载入图片
voidCMainFrame:
:
OnOpen():
载入地图。
BOOLCLabyrinthView:
:
OnEraseBkgnd(CDC*pDC):
设置欢迎画面,载入图片。
(5)自绘地图
voidCLabyrinthView:
:
OnLButtonDown(UINTnFlags,CPointpoint):
墙变路,路变墙
(6)自动寻路
voidCLabyrinthView:
:
OnAuto():
为自动寻路函数。
其重要调用Seqstack*CSkfction:
:
init_Seqstack()、intCSkfction:
:
Empty_Seqstack(Seqstack*s)、intCSkfction:
:
Push_Seqstack(Seqstack*s,DataTypex)、intCSkfction:
:
Pop_Seqstack(Seqstack*s,DataType*x)函数。
(7)设置时间
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct):
到达在在状态栏中显示时间,调用了系统的函数SetTimer(1,1000,NULL);第一个参数为对应时器的代号。
在一个程序中,可能有多个SetTimer,在Ontime响应时,可以根据第一个参数来确定是哪一个记时器所引起的事件。
第二个参
数用于设置时间。
第三个参数为一个回调函数的指针,用NULL的话,系统会把SetTimer产生的消息加入消息队列中。
调用了一下三个函数信息,来显示时间。
(IDS_LASTTIME);
际完成的情况说明(完成的功能,支持的数据类型等);
基本功能都已经完成,而且还加了保存图片、载入图片、设置时间、游戏帮助等功能。
2.上机过程中出现的问题及其解决方案;
(1)问题:
每次走完迷宫,它都会保持现有状态,如果重新开始,要自己按重新开始,次才能开始,很麻烦。
解决方案:
voidCMainFrame:
:
OnTimer(UINTnIDEvent)函数中调用voidCMainFrame:
:
OnOpen(),这样在每次游戏结束时就可以调用这个函数,载入图片。
(2)问题:
通过键盘来如何控制对象(老鼠)的移动,我希望达到一种老鼠会动的效果,即朝左走头往左哦哦,朝右走,头朝右。
解决方案:
导入一组老鼠图片,用数组进行控制,没走一步判断调用哪一组老鼠图片。
(3)问题:
键盘控制时老是出错。
解决方案:
后来通过CSDN、博客园等IT技术社区找到了相关文章,如果你按键没有反应是因为它把你的消息转发到了其它的激活窗口的处理程序上,可以试着点击窗口的空白区域,不让任何子控件获得焦点(没有任何一个控件有一个虚线的框)的时候,这个就能激活了。
、测试结果的分析与讨论:
(1)如果不按开始按钮,会弹出一下对话框,如(图一)
(图一)
(2)游戏顺利进行,并成功。
如(图二)
(图二)
(3)自动寻路完成,如(图三)
(图三)
(4)自动寻路完成,如(图四)
(图四)
(5)走完全部的路,如(图五)
(图五)
(6)非法输入:
当小老鼠上、下、左、右移动时,如果按下非以上四键,老鼠呆在原地不动。
对游戏和程序没有影响。
、测试过程中遇到的主要问题及采取的解决措施:
6、源程序清单
1.定义程序中所有用到的数据及其数据结构
结构体,类,栈
typedefstruct《C语言程序设计(第三版)》,出版社:
高等教育出版社,主编:
廖雷,
出版日期:
2009年6月
2.《数据结构(c语言描述)》,出版社:
中国水利水电出版社,主编:
马秋菊
出版日期:
2006年
《大话数据结构》,出版社:
清华大学出版社,主编,程杰,出版日期:
2011年6月
3.数据结构自考网:
XX知道