版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信 息 工 程 学 院课程设计报告 课程名称 数据结构 课题名称 走迷宫游戏 专业 班级 学号 姓名 联系方式 指导教师 2015 年 12 月 27 日目 录1、数据结构课程设计任务书1.1、题目1.2、要求2、总体设计2.1、设计思路及总体组成框架2.2、操作流程图3、详细设计3.1、程序中所采用的数据结构及存储结构的说明3.2、函数功能模块说明3.3、各函数的调用关系4、调试与测试:4.1、调试方法与步骤:4.2、测试结果的分析与讨论:4.3、测试过程中遇到的主要问题及采取的解决措施:6、源程序清单7、数据结构课程设计总结8、参考文献1、数据结构课程设计任务书1.1题目程序开始运行时显示
2、一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。1.2、要求1) 老鼠形象可辨认,可用键盘操纵老鼠上下左右移动;2) 迷宫的墙足够结实,老鼠不能穿墙而过;3) 正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;4) 添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;5) 找出走出迷宫的所有路径。利用序列化功能实现迷宫地图文件的存盘和读出等功能 2、总体设计2.1、设计思路及总体组成框架1、思路(1).利用mfc可以把迷宫地图以及老鼠形象可变的导出来。 (2).需要有墙有路,通过把迷宫
3、地图划分成一个一个小方块,通过一个数组的值来判断是墙是路。(1表示墙0表示路) (3).利用栈,来存入当前位置,然后判断下一位置,是否有路,存入栈中或出栈。 (4).把每个数组元素对应一个按钮根据点击按钮,改变数组的值从而改变墙和路的转化。 (5).键盘接受字符,根据字符调用不同的图片,达到老鼠超前走的效果。2、数据结构本程序运用的逻辑结构是线性和存储结构为顺序。之所以采用本结构是因为,迷宫主要用到栈来储存当前位置,和判断下一位置,来入栈。抽象数据类型线性表的定义如下:ADT Stack 数据对象:D=ai| ai ElemSet,i=1,2,3,n,n0数据关系:R1=<ai-1,ai
4、>| 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、键盘操作
5、流程:开始NY按下键盘按方向键up方向键down方向键left方向键rightif(wallij=0|wallij=2)判断是否到达粮仓根据对应的操作老鼠进行相应的修改x,yNN结束YY2、模块流程图:开始模块初始化加载迷宫地图N判断键是否按下N启动计时Y是否撞墙老鼠移动NY时间为零到达终点N停止移动YY游戏结束面向对象而非面向工程的程序设计,事件和判断都具有同时性和并发性。3、游戏界面显示新建登陆dlg类对象,并且显示出来初始化迷宫数组根据对应的迷宫数组初始化迷宫地图,同时初始化背景音乐,显示当前设置时间和剩余时间。点击开始按钮3、详细设计3.1、程序中所采用的数据结构及存储结构的说明数据类
6、型:结构体,整形数据 输入:按照窗口、菜单提示按鼠标左键 移动老鼠位置,按键盘的上、下、左、右键 输出:可视化迷宫3.2、函数功能模块说明(1) 开始游戏 void CMainFrame:OnStart():开始游戏。void CLabyrinthView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags):小老鼠键盘操。第一个参数表示哪个按键,接受上、下、左、右字符,判断调用哪个小老鼠图片,最后用脚印图片覆盖老鼠图片,达到朝前走,留下脚印的效果。(2)重新开始void CMainFrame:OnSysmap():系统地图。void CLabyri
7、nthView: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):
8、墙变路,路变墙(6)自动寻路void CLabyrinthView:OnAuto():为自动寻路函数。其重要调用Seqstack * CSkfction:init_Seqstack()、int CSkfction:Empty_Seqstack(Seqstack *s)、int CSkfction:Push_Seqstack(Seqstack *s,DataType x)、int CSkfction:Pop_Seqstack(Seqstack *s,DataType *x)函数。(7)设置时间int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruc
9、t):到达在在状态栏中显示时间,调用了系统的函数SetTimer(1,1000,NULL); 第一个参数为对应时器的代号。在一个程序中,可能有多个SetTimer,在Ontime响应时,可以根据第一个参数来确定是哪一个记时器所引起的事件。第二个参数用于设置时间。 第三个参数为一个回调函数的指针,用NULL的话,系统会把SetTimer产生的消息加入消息队列中。调用了一下三个函数信息,来显示时间。m_wndStatusBar.CommandToIndex(IDS_LASTTIME);/按规定宽度显示m_wndStatusBar.SetPaneInfo(0,IDS_LASTTIME,SBPS_PO
10、POUT,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)框架
11、BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs):设置窗口信息。int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct):在状态栏显示时间信息。3.3、各函数的调用关系void CLabyrinthView:OnAuto()Seqstack * CSkfction:init_Seqstack()int CSkfction:Empty_Seqstack(Seqstack *s)int CSkfction:Push_Seqstack(Seqstack *s,DataType x)Int C
12、Skfction:Pop_Seqstack(Seqstack *s,DataType *x)程序界面:开始保存地图操作界面载入地图地图的绘制迷宫自动寻路游戏时间设置小老鼠键盘操音效设置结束用户登陆界面4、调试与测试:4.1、调试方法与步骤:内容包括:调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析:1.实际完成的情况说明(完成的功能,支持的数据类型等);基本功能都已经完成,而且还加了保存图片、载入图片、设置时间、游戏帮助等功能。2.上机过程中出现的问题及其解决方案; (1) 问题:每次走完迷宫,它都会保持现有状态,如果重新开始,要自己按重新开始,次才能开始,很麻烦。解决方案:v
13、oid CMainFrame:OnTimer(UINT nIDEvent)函数中调用void CMainFrame:OnOpen(),这样在每次游戏结束时就可以调用这个函数,载入图片。(2)问题:通过键盘来如何控制对象(老鼠)的移动,我希望达到一种老鼠会动的效果,即朝左走头往左哦哦,朝右走,头朝右。解决方案:导入一组老鼠图片,用数组进行控制,没走一步判断调用哪一组老鼠图片。(3)问题:键盘控制时老是出错。解决方案:后来通过CSDN、博客园等IT技术社区找到了相关文章,如果你按键没有反应是因为它把你的消息转发到了其它的激活窗口的处理程序上,可以试着点击窗口的空白区域,不让任何子控件获得焦点(没有
14、任何一个控件有一个虚线的框)的时候,这个就能激活了。4.2、测试结果的分析与讨论:(1)如果不按开始按钮,会弹出一下对话框,如(图一) (图一)(2)游戏顺利进行,并成功。如(图二) (图二)(3)自动寻路完成,如(图三) (图三)(4)自动寻路完成,如(图四)(图四)(5)走完全部的路,如(图五)(图五)(6)非法输入: 当小老鼠上、下、左、右移动时,如果按下非以上四键,老鼠呆在原地不动。对游戏和程序没有影响。4.3、测试过程中遇到的主要问题及采取的解决措施:6、源程序清单1. 定义程序中所有用到的数据及其数据结构结构体,类,栈 typedef struct /顺序栈初始化判栈空以及出入栈i
15、nt x,y,di;DataType;typedef structDataType dataMAXSIZE;int top; Seqstack;typedef structint x;int y;item;2主函数和其他函数的伪码算法;(1)、BOOL CLabyrinthView:OnEraseBkgnd(CDC* pDC) extern int wall1317;/定义一个控制迷宫的数组 获得客户区句柄; CBitmap bmp4;/创建位图for(int j=0;j<13;j+)for(int k=0;k<17;k+)/利用循环语句进行贴迷宫地图if(walljk=0)if(
16、walljk=1) if(walljk=2)if(walljk=3)(2)、void CLabyrinthView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) /第一个参数表示哪个按键/用背景涂抹走过的痕迹 char ch16;for(int i=0;i<4;i+)for(int j=0;j<4;j+)/老鼠4个方向16张图,循环输出到bitmap数组/当选择开始游戏后,才能让老鼠走动 if(m_timestatus=1)if(nChar=VK_DOWN)/nchar 从键盘中接受的变量if(nChar=VK_RIGHT)if(
17、nChar=VK_UP)if(nChar=VK_LEFT)else/解决游戏结束后还可继续走的bug,让他结束就变到初始位置y=start_x;x=start_y;/如果走到出口:if(wallyx=2)AfxMessageBox("你很棒!恭喜你赢了!(*_*) 嘻嘻");/贴走动的图:(3)、void CLabyrinthView:OnAuto() item move4=1,0,0,1,-1,0,0,-1;/获取操作权/老鼠4个方向16张图,循环输出到bitmap数组CSkfction *csk=new CSkfction();/定义栈Seqstack *s=csk-&
18、gt;init_Seqstack();/初始化while(!csk->Empty_Seqstack(s) /不空运行 while(d<4) /试探指向下一个位置 0->x+1 y右 1->x y+1下 2->x-1 y左3->x y-1上if(wallij=0|wallij=2)/试探可通/刷白走过的路temp.x=j;temp.y=i;/将试探给要压栈的temp/找老鼠行走方向if(temp.di=0) di=2;if(temp.di=1) di=0;if(temp.di=2) di=1;if(temp.di=3) di=3;mdc->SelectO
19、bject(bitmapdiindex+);/选择各方向的图 csk->Push_Seqstack(s,temp); wallyx=-1;/已经贴图的 /if(wallyx=2)if(x=16&&y=10)成功找到粮仓,开始走全部路线elsed=0;elsed+; (4)void CLabyrinthView:OnLButtonDown(UINT nFlags, CPoint point) if(m_selfmap=1)/获取dc指针/获取鼠标坐标,转换为墙的xy坐标,存入数组。int j=(int)point.x/50;int k=(int)point.y/50;/路变
20、墙,墙变路switch(wallkj)case 1:/贴路的图片case 0:/贴墙的图片(5)void CMainFrame:OnTimer(UINT nIDEvent) if(m_lasttime<0)MessageBox("你怎么让老鼠饿死啦!o(><)o"); OnOpen();else if(m_timestatus=1)/时间消耗CFrameWnd:OnTimer(nIDEvent);(6)void CMainFrame:OnSave() /用于保存地图extern int wall1317;char ch1317;for(int i=0;i&
21、lt;13;i+)for(int j=0;j<17;j+)chij=wallij+48;/保存文件2种方式1:asc2码 2:二进制码/数组中有2、3所以用asc码FILE *pFile=fopen("Gamemap.txt","w");fwrite(ch,1,222,pFile);fclose(pFile);(7)void CMainFrame:OnSettime() /设置游戏时间菜单用于创建一个对话框类,并传入输入值,/并重画状态栏CSetTime dlg;if(IDOK=dlg.DoModal()m_settime=dlg.m_time;m
22、_lasttime=m_settime;CString str1,str2;str1.Format("剩余时间:%d",m_lasttime);str2.Format("规定时间:%d",m_settime);CClientDC dc(this);m_wndStatusBar.CommandToIndex(IDS_LASTTIME);m_wndStatusBar.SetPaneInfo(0,IDS_LASTTIME,SBPS_NORMAL,150);m_wndStatusBar.SetPaneText(0,str1);m_wndStatusBar.CommandToIndex(IDS_SETTIME);m_wndStatusBar.SetPaneInfo(1,IDS_SETTIME,SBPS_NORMAL,150);m_wndStatusBar.SetPan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024注册监理工程师合同总结
- 商丘幼儿师范高等专科学校《小学英语课程标准解读》2023-2024学年第一学期期末试卷
- 商丘幼儿师范高等专科学校《食品工艺学实验B》2023-2024学年第一学期期末试卷
- 商丘医学高等专科学校《建筑设计(4)》2023-2024学年第一学期期末试卷
- 商丘学院《化工安全及环保》2023-2024学年第一学期期末试卷
- 商丘师范学院《智能检测与监测报警系统》2023-2024学年第一学期期末试卷
- 2024年研发成果转化许可协议
- 入场费合同范例
- 2024年版股权转让及法人代表更改合同版B版
- 商丘工学院《公共管理名著导读》2023-2024学年第一学期期末试卷
- 人教版(2024新版)七年级上册生物期末复习全册知识点提纲
- 2024新版有限空间作业安全大培训
- 中外石油文化智慧树知到期末考试答案2024年
- 汽车空调试题及答案39961
- 《口腔种植学》教学大纲
- ISO5817焊缝检验及评定缺欠质量分级指南(共37页).ppt
- 人教版八年级物理上册 6.1《质量》教案
- 空业务学习记录表
- 第三版无机化学教材课后习题答案
- 行政管理学的判断题
- 国家电网公司电力客户档案管理规定
评论
0/150
提交评论