2022年迷宫面向对象设计报告 .pdf

上传人:H****o 文档编号:40223334 上传时间:2022-09-08 格式:PDF 页数:10 大小:223.47KB
返回 下载 相关 举报
2022年迷宫面向对象设计报告 .pdf_第1页
第1页 / 共10页
2022年迷宫面向对象设计报告 .pdf_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《2022年迷宫面向对象设计报告 .pdf》由会员分享,可在线阅读,更多相关《2022年迷宫面向对象设计报告 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、河南科技大学课 题 设 计 说 明 书课题名称迷宫仿真程序设计院系信息工程学院专业计科 11 级学生姓名董程凤、刘培娇、周文业、唐东凯指导教师郑瑞娟日期 2014.3.13 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -课题设计报告文档题目:迷宫仿真程序设计一 引言1 编写目的:本次课题设计的题目是迷宫仿真程序设计。本次报告编写的目的是为了进一步介绍此次迷宫设计的功能和算法,让使用者更加清晰地了解迷宫游戏的规则和更方便、愉快地体验迷宫游戏。2 定义:本次迷宫仿真程序设计是基于Visual C+设计的,我们采用了面向对象的理论,增强了此次设计的人机交互性,良好的可视化

2、界面设计能够更加形象地展现迷宫设计。迷宫仿真程序设计主要利用MFC 应用程序、类和对象等一些基本知识点。MFC:MFC 的全称是 Microsoft Foundation Classes,是微软公司提供的一个类库(classlibraries),以 C+类的形式封装了 Windows 的 API,并且包含一个应用框架,以减少应用程序开放人员的工作量。其中包含的类包含大量的 windows 句柄封装类和很多windows 的内建控件和组件的封装类。MFC 是 Visual C+是核心。MFC 类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard 向导

3、根据继承性利用 MFC 派生出自己的类,并对 Windows 应用程序进行了分解,利用 MFC 派生类对应用程序重新进行组装,同时还规定了应用程序中各个 MFC 派生类对象之间的相互联系,实现了标准 Windows 应用程序的功能,这就是向导生成的所谓MFC 应用程序框架。每个MFC 类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用。类的定义:类(Class)实际上是对某种类型的对象变量和方法的原型。类是从一些具有相同功能或属性的具体实例中抽象出一些共有的属性,自定义抽象数据类型。类是对某个对象的定义。它包含有关对象动作的信息,包括它的名称、方法、属性和

4、事件。实际上它本身并不是对象,以为它不存在与内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。对象的定义:对象是人们要进行研究的事物,从最简单的整数到复杂的飞机都可以看做对象,它不仅能表示具体的事物,还能表示抽象的规划、计划或事件。对象具有状态,一个对象用数据来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。3 参考资料:谭浩强,C+程序设计,北京,清华大学出版社,2006年罗建军等,Visual C+程序设计,北京,高等

5、教育出版社,2004年二 任务的描述名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -1 设计要求:程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。编程要求:(1)老鼠的形象可辨认,可用键盘操纵老鼠上下左右移动;(2)迷宫的墙足够结实,老鼠不能穿墙而过;(3)正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败;(4)添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙;(5)利用序列化功能实现迷宫地图文件的存盘和读出等功能。2 算法分析:本题主要涉及到的知识

6、点有:键盘消息、定时器消息、图形编辑和序列化。算法复杂度和编程量都比较大。本题中主要问题是如何自由地更改存在于客户区的一幅迷宫地图,并可以使另一个图形在其上自由运动并准确判断其位置和胜利条件。实际上,这些操作都是通过存在于这些表象后面的数据结构的操作来实现的。我们将迷宫理解为二维数组,数组元素的值就决定了迷宫的显示(是墙还是路)。一旦数组元素的值发生了改变,对应的迷宫的显示也就自然变化了,这样对迷宫的编辑问题就转化为对内部数组元素的值的变化问题了。同样,老鼠在迷宫的位置实际上也就是数组上的一个点,判断它能不能向某一个方向运动,也就是判断该方向的下一个数组元素的值是什么,如果是路,根据事先设置好

7、的规则,它是可以移动的,但如果是墙,就不能移动了。3 输入输出:程序开始显示一只处于迷宫中的老鼠,选择下拉菜单“游戏”中的开始后,程序开始计时,用户可以使用键盘上的方向键操纵这只老鼠在其中的活动,如果在规定时间内走出迷宫,到达粮仓处,则游戏胜利。同时,程序还提供建立和修改迷宫地图的共能,只要使用鼠标左键在迷宫图形上单击即可,修改好的迷宫地图可以通过“文件”中的“保存”来实现存储。4 运行与环境:装有 windows 操作系统的计算机5 条件与限制:Visual C+6.0 或者更高版本三 总体设计1 解题步骤(1)首先利用 AppWizard 生成一个名为 Maze的 SDI 的程序框架,在第

8、四名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -步时按下“Advanced.”按钮调出Advanced Options 对话框,在Document Template Strings 选项卡中将 File extension(文件后缀)项设置为“maz”,在 Window Styles 选项卡中设置 Maximized 检查框为“选中”状态。其他选项均可用缺省设置。(2)向项目中添加位图资源,为了显示不同移动方向的区别,需要有一个粮仓位图和四幅不同运动方向的老鼠位图。按下对话框右方的New.按钮进入相应的 Bitmap 编辑器手工描图(也可以使用Windows 的画板

9、程序,其功能更强大),修改其标识符ID 分别为IDB_FOOD、IDB_MOUSEDOWN、IDB_MOUSELEFT、IDB_MOUSERIGHT、IDB_MOUSEUP,如图 1.1 所示。图 1.1 粮仓位图和四幅运动方向相反的老鼠位图(3)编辑项目的菜单资源,在框架窗口的主菜单(IDR_MAINFRAME)中添加一个下拉菜单选项“游戏”,内含两个菜单选项:“开始”和“暂停”,其标识符分别改为ID_BEGIN 和 ID_END,如图 1.2 所示。菜单属性设置如表 1.1 所示。表 1.1 菜单属性图 1.2 菜单(4)利用 ClassWizard 为视图类添加与这些菜单选项对应的成员函

10、数。进入 ClassWizard 的 Message Maps 选项卡,选择Class Name 项为CMazeView,在 Object IDs列表框中分别选择新添加的菜单选项的ID,在 Message列表框中选择 COMMAND,按下 Add Function 按钮添加成员函数。(5)完成以上工作后,即可修改程序框架,添加必要的代码。2 系统功能框架系统功能框架如图1.3 所示。3 主要功能实现(1)迷宫a)迷宫的定义int m_nMaze2020;/迷宫所对应的数组,0 为路,1 为墙int m_nWidth;/迷宫中每格的宽度int m_nHeight;/迷宫中每格的高度名师资料总结-

11、精品资料欢迎下载-名师精心整理-第 4 页,共 10 页 -b)迷宫的初始化/将迷宫初始化显示为周围为一圈围墙的空白场地 for(int i=0;i20;i+)for(int j=0;j20;j+)m_nMazeij=0;for(i=0;i20;i+)m_nMaze0i=1;m_nMaze19i=1;m_nMazei0=1;m_nMazei19=1;m_nWidth=20;m_nHeight=20;图 1.3 系统功能框架c)迷宫的显示/根据迷宫所对应的内部数组元素的值显示路或墙for(int i=0;i20;i+)for(int j=0;jm_nMazeij=0)pDC-SelectStoc

12、kObject(LTGRAY_BRUSH);/SelectStockObject()该函数检索预定义的备用笔、刷子、字体或者调色板的句柄。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 10 页 -/参数:LTGRAY_BRUSH:亮灰色画笔BLACK_BRUSH 黑色画笔;NULL_BRUSH:空画笔(相当于HOLLOW_BRuse)/WHITE_BRUSH:白色画笔;BLACK_PEN:黑色钢笔;pDC-SelectStockObject(WHITE_PEN);else pDC-SelectStockObject(BLACK_BRUSH);pDC-SelectStockObj

13、ect(BLACK_PEN);pDC-Rectangle(10+i*pDoc-m_nWidth,10+j*pDoc-m_nHeight,10+i*pDoc-m_nWidth+pDoc-m_nWidth,10+j*pDoc-m_nHeight+pDoc-m_nHeight);d)迷宫的编辑CMazeDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);int x=(point.x-10)/pDoc-m_nWidth;int y=(point.y-10)/pDoc-m_nWidth;if(pDoc-m_nMazexy=0)pDoc-m_nMazexy=1;else p

14、Doc-m_nMazexy=0;InvalidateRect(CRect(point.x-20,point.y-20,point.x+20,point.y+20);CView:OnLButtonDown(nFlags,point);e)迷宫地图的存取 if(ar.IsStoring()/TODO:add storing code here for(int i=0;i20;i+)for(int j=0;j20;j+)arm_nMazeij;else /TODO:add loading code here for(int i=0;i20;i+)for(int j=0;jm_nMazeij;(2)老

15、鼠名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 10 页 -a)老鼠的定义int m_nX;/老鼠所在位置的X 坐标int m_nY;/老鼠所在位置的 Y 坐标b)老鼠的初始化m_nX=1;m_nY=1;c)显示粮仓和老鼠的位置首先在视图类的定义中添加如下数据成员:CBitmap m_bmpFood;CBitmap m_bmpMouse;然后在视图类构造函数中对这些数据成员进行初始化:m_bmpFood.LoadBitmap(IDB_FOOD);m_bmpMouse.LoadBitmap(IDB_MOUSERIGHT);最后在视图类成员函数OnDraw(CDC*pDC)中添加如

16、下代码:/显示粮仓CDC MemFood;MemFood.CreateCompatibleDC(NULL);MemFood.SelectObject(&m_bmpFood);pDC-StretchBlt(10+18*pDoc-m_nWidth,10+18*pDoc-m_nHeight,pDoc-m_nWidth,pDoc-m_nHeight,&MemFood,0,0,20,20,SRCCOPY);/显示老鼠CDC MemMouse;MemMouse.CreateCompatibleDC(NULL);MemMouse.SelectObject(&m_bmpMouse);pDC-StretchBl

17、t(10+pDoc-m_nX*pDoc-m_nWidth,10+pDoc-m_nY*pDoc-m_nHeight,pDoc-m_nWidth,pDoc-m_nHeight,&MemMouse,0,0,20,20,SRCAND);d)修改老鼠的位置(在视图类中添加键盘消息,然后在成员函数OnKeyDown(UINT nChar,UINT nRepCut,UINT nFlags)中添加如下代码):CMazeDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CRect rect;rect=CRect(10+pDoc-m_nX*pDoc-m_nWidth,10+pDo

18、c-m_nY*pDoc-m_nHeight,10+pDoc-m_nX*pDoc-m_nWidth+pDoc-m_nWidth,10+pDoc-m_nY*pDoc-m_nHeight+pDoc-m_nHeight);InvalidateRect(rect,TRUE);if(is_start)swich(nChar)case VK_UP:名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 10 页 -m_bmpMouse.Detach();m_bmpMouse.LoadBitmap(IDB_MOUSEUP);if(pDoc-m_nMazepDoc-m_nXpDoc-m_nY-1=0)pD

19、oc-m_nY-;break;case VK_DOWN:m_bmpMouse.Detach();m_bmpMouse.LoadBitmap(IDB_MOUSEDOWN);if(pDoc-m_nMazepDoc-m_nXpDoc-m_nY+1=0)pDoc-m_nY+;break;case VK_LEFT:m_bmpMouse.Detach();m_bmpMouse.LoadBitmap(IDB_MOUSELEFT);if(pDoc-m_nMazepDoc-m_nX-1pDoc-m_nY=0)pDoc-m_nX-;break;case VK_RIGHT:m_bmpMouse.Detach();m

20、_bmpMouse.LoadBitmap(IDB_MOUSERIGHT);if(pDoc-m_nMazepDoc-m_nX+1pDoc-m_nY=0)pDoc-m_nX+;break;if(pDoc-m_nX=18&pDoc-m_nY=18)MessageBox(你胜利了);KillTimer(1);rect=CRect(10+pDoc-m_nX*pDoc-m_nWidth,10+pDoc-m_nY*pDoc-m_nHeight,10+pDoc-m_nX*pDoc-m_nWidth+pDoc-m_nWidth,10+pDoc-m_nY*pDoc-m_nHeight+pDoc-m_nHeight

21、);InvalidateRect(rect,FALSE);(3)限定时间a)设置定时器SetTimer(1,1000,NULL);b)重载定时器消息处理函数首先在视图类的定义中添加如下数据成员:Int m_iTmrCnt;/计时器然后在视图类构造函数中对计时器进行初始化,添加如下代码:M_iTmrCnt=60;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 10 页 -最 后 通 过ClassWizard 在 视 图 类 重 载 定 时 器 消 息,在OnTimer(UINT nIDEvent)中添加如下代码:m_iTmrCnt-;if(m_iTmrCntTextOut(445,

22、70,strDisplay);4 小结本题采用标准的SDI 程序结构,通过响应鼠标左键消息来建立、修改迷宫地图,通过响应键盘消息来控制老鼠移动,通过定时器消息来给出游戏计时。通过将迷宫理解为二维数组,从鼠标所在位置换算出数组中的相应位置,就可以确定下一步老鼠的运动的可能性,同时程序可以从键盘/定时器两个方面来判断游戏是否结束。四 运行结果名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 10 页 -五 感想与认识在此次程序设计中,我们不仅完成任务,自身能力也得到了不断提高。此次程序设计综合运用所学知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,让学生更理解 C+功能之强大

23、,进一步让学生对面向对象的方法以及C+的编程思想有较好的了解和认识。此外,此次设计培养独立开发、设计、调试、运行程序的能力,激发学生较强的自学兴趣,锻炼学生之间以及学生与老师的沟通能力,培养学生之间的合作精神,让彼 此更好的认识到合作的重要性,使学生在今后的学习中加强对合作精神的培养。一般来说,课程设计要比教学实验复杂一些,涉及的深度深,而且更加实用些。在完成任务期间,大家都很努力学习新知识来完成此次任务,虽然很辛苦,但是也很满足。在这里我非常感谢我的导师教导我学习,还有在课程设计期间不辞辛苦监督我们学习。我还要感谢我的同学和我的室友们,在此次课程设计中帮助我解决了许多的问题,我真的很高兴拥有你们这样敬业的导师和真诚的朋友们!名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 10 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁