当前位置:文档之家› 《数据结构课程设计》走迷宫游戏

《数据结构课程设计》走迷宫游戏

信息工程学院课程设计报告课程名称《数据结构》课题名称走迷宫游戏专业班级学号姓名联系方式指导教师2015 年 12 月 27 日目录1、数据结构课程设计任务书............................................................... 11.1、题目........................................................................... 11.2、要求........................................................................... 12、总体设计............................................................................. 12.1、设计思路及总体组成框架......................................................... 12.2、操作流程图..................................................................... 23、详细设计............................................................................. 53.1、程序中所采用的数据结构及存储结构的说明......................................... 53.2、函数功能模块说明............................................................... 53.3、各函数的调用关系 ............................................................................................................................... 74、调试与测试:......................................................................... 74.1、调试方法与步骤:............................................................... 74.2、测试结果的分析与讨论:......................................................... 84.3、测试过程中遇到的主要问题及采取的解决措施:................................... 106、源程序清单......................................................................... 107、数据结构课程设计总结............................................................... 148、参考文献........................................................................... 141、数据结构课程设计任务书1.1题目程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。

游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。

1.2、要求1) 老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;2) 迷宫的墙足够结实,老鼠不能穿墙而过;3) 正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;4) 添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;5) 找出走出迷宫的所有路径。

利用序列化功能实现迷宫地图文件的存盘和读出等功能2、总体设计2.1、设计思路及总体组成框架1、思路(1).利用mfc可以把迷宫地图以及老鼠形象可变的导出来。

(2).需要有墙有路,通过把迷宫地图划分成一个一个小方块,通过一个数组的值来判断是墙是路。

(1表示墙0表示路)(3).利用栈,来存入当前位置,然后判断下一位置,是否有路,存入栈中或出栈。

(4).把每个数组元素对应一个按钮根据点击按钮,改变数组的值从而改变墙和路的转化。

(5).键盘接受字符,根据字符调用不同的图片,达到老鼠超前走的效果。

2、数据结构本程序运用的逻辑结构是线性和存储结构为顺序。

之所以采用本结构是因为,迷宫主要用到栈来储存当前位置,和判断下一位置,来入栈。

抽象数据类型线性表的定义如下:ADT Stack{数据对象:D={ai | ai∈ElemSet,i=1,2,3……,n,n≥0}数据关系:R1={<ai-1,ai>| 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返回其值。

} ADT Stack3、根据课程设计题目的功能要求,总体概要的组成框图如下:2.2、操作流程图1、键盘操作流程:2、模块流程图:面向对象而非面向工程的程序设计,事件和判断都具有同时性和并发性。

3、游戏界面显示3、详细设计3.1、程序中所采用的数据结构及存储结构的说明数据类型:结构体,整形数据输入:按照窗口、菜单提示按鼠标左键移动老鼠位置,按键盘的上、下、左、右键输出:可视化迷宫3.2、函数功能模块说明(1)开始游戏void CMainFrame::OnStart():开始游戏。

void CLabyrinthView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags):小老鼠键盘操。

第一个参数表示哪个按键,接受上、下、左、右字符,判断调用哪个小老鼠图片,最后用脚印图片覆盖老鼠图片,达到朝前走,留下脚印的效果。

(2)重新开始void CMainFrame::OnSysmap():系统地图。

void CLabyrinthView::OnSelfmap()、void CLabyrinthView::OnLButtonDown(UINT nFlags, CPoint point):绘制地图函数。

达到墙变路、路变墙的目的。

(3)保存图片void CMainFrame::OnSave():保存地图。

(4)载入图片void CMainFrame::OnOpen():载入地图。

BOOL CLabyrinthView::OnEraseBkgnd(CDC* pDC):设置欢迎画面,载入图片。

(5)自绘地图void CLabyrinthView::OnLButtonDown(UINT nFlags, CPoint point):墙变路,路变墙(6)自动寻路void CLabyrinthView::OnAuto():为自动寻路函数。

其重要调用Seqstack * CSkfction::init_Seqstack()、int CSkfction::Empty_Seqstack(Seqstack *s)、int CSkfction::Push_Seqstack(Seqstack *s,DataType x)、intCSkfction::Pop_Seqstack(Seqstack *s,DataType *x)函数。

(7)设置时间int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct):到达在在状态栏中显示时间,调用了系统的函数SetTimer(1,1000,NULL); 第一个参数为对应时器的代号。

在一个程序中,可能有多个SetTimer,在Ontime响应时,可以根据第一个参数来确定是哪一个记时器所引起的事件。

第二个参数用于设置时间。

第三个参数为一个回调函数的指针,用NULL的话,系统会把SetTimer 产生的消息加入消息队列中。

调用了一下三个函数信息,来显示时间。

m_mandToIndex(IDS_LASTTIME); //按规定宽度显示m_wndStatusBar.SetPaneInfo(0,IDS_LASTTIME,SBPS_POPOUT,150);//剩余时间凸出来m_wndStatusBar.SetPaneText(1,str2);//在窗格中显示文本信息。

void CMainFrame::OnTimer(UINT nIDEvent):根据时间判断老鼠是否饿死。

void CMainFrame::OnSettime():设置时间。

(8)音效设置void CMainFrame::OnMusicOn():音乐来。

void CMainFrame::OnMusicOff():音乐关。

(9)游戏退出void CMainFrame::OnAppExit():void CMainFrame::OnClose():退出游戏,弹出对话框。

(10)框架BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs):设置窗口信息。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct):在状态栏显示时间信息。

3.3、各函数的调用关系程序界面:4、调试与测试:4.1、调试方法与步骤:内容包括:调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析:1.实际完成的情况说明(完成的功能,支持的数据类型等);基本功能都已经完成,而且还加了保存图片、载入图片、设置时间、游戏帮助等功能。

2.上机过程中出现的问题及其解决方案;(1) 问题:每次走完迷宫,它都会保持现有状态,如果重新开始,要自己按重新开始,次才能开始,很麻烦。

解决方案:void CMainFrame::OnTimer(UINT nIDEvent)函数中调用voidCMainFrame::OnOpen(),这样在每次游戏结束时就可以调用这个函数,载入图片。

(2)问题:通过键盘来如何控制对象(老鼠)的移动,我希望达到一种老鼠会动的效果,即朝左走头往左哦哦,朝右走,头朝右。

相关主题