C++推箱子课程设计报告材料_第1页
C++推箱子课程设计报告材料_第2页
C++推箱子课程设计报告材料_第3页
C++推箱子课程设计报告材料_第4页
C++推箱子课程设计报告材料_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实用文档学 号武汉理工大学华夏学院课程设计报告书课程名称:软件综合题目 :基于 VC+6.0 的“推箱子”游戏软件的开发与测试系名:信息工程系专业班级:姓名:指导教师 :实用文档2013 年 元月 18 日课程设计任务书学生姓名:专业班级:软件 2101指导教师:工作单位:信息系计算机教研室设计题目:基于 VC+6.0 的“推箱子”游戏软件的开发与测试初始条件:1. 已完成 c 语言程序设计、软件工程、数据库概论或数据库技术等课程的学习2. 系统环境: Intel 奔腾 4 以上处理器, 1G以上内存, 40G以上硬盘,Windows 编程环境, Visual C+ 6.0编程工具要求完成的主

2、要任务: (在规定的时间内完成下列任务)(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)主要任务:系统完成用户登录及管理员增加、删除、修改、查询功能1 按系统功能进行游戏背景区域(移动区域、围墙)的设计与绘制:2 根据系统实现的功能,绘出功能图、系统流程图3 模块调试,运行结果正确,并经教师检查及答辩;设计报告撰写格式要求: (课程设计报告按统一通用格式书写)具体内容如下: 设计任务与要求 总体方案与说明 程序主要模块的流程图 问题分析与解决方案的设计思想和改进设想 系统的调试记录、调试报告(即在调试中遇到的主要问题、解决方法及改进设想) 小结与体会附录:使用说明 参考资料时间安排

3、: 2012 年 12 月 29 日-2013 年元 18 日(共三周)第 1 天介绍本次课程设计的目的、要求,介绍MFCAppWizard 应用程序框架的简介第 2 天第 5 天介绍 MFC中的窗口消息的创建及用,完成游戏背景区域(移动区域、围墙)的设计与绘制第6天第 9天完成目标区域、小人、箱子的绘制、绘制地图、加载/ 更新地图、关卡的设置及系统整合第 10天系统运行与演示第 11天第 14 天系统测试与掌握调试的方法和技巧,撰写设计报告第 15天按项目组进行演示与答辩,形成课程设计报告文档指导教师签字:2012年 12月 28日系主任签字:年月日实用文档目录1引言.12项目需求分析 .1

4、3系统概要设计 .13.1功能控制模块 .13.2系统流程图 .23.3推箱子游戏具有的功能 .33.3.1能够显示主菜单和界面 .33.3.2能够实现键盘操作功能 .33.3.3能够把放置到位置的箱子进行变色显示.43.3.4游戏胜负判断功能 .43.3.5支持关口选择功能 .43.4推箱子功能框架 .43.5游戏界面设计 .53.5.1游戏主界面 .53.5.2游戏菜单与帮助结构设计 .53.5.3游戏中关卡选择对话框设计.63.6游戏的界面实现 .63.7关卡选择对话框的实现 .74详细设计 .104.1地图文件读取模块的设计与实现.104.2地图绘制模块的设计与实现.104.3键盘操作

5、模块的设计与实现.124.4游戏规则模块设计与实现 .125VC调试方法介绍 .145.1调试快捷键 .145.2跟踪调试 .145.3异常调试 .156功能测试 .176.1主菜单和界面显示功能测试.176.2键盘操作功能测试 .176.3箱子放置到指定位置时变色显示功能测试.196.4支持地图扩展功能的演示 .207特殊问题及解决方法 .218设计小结 .219参考文献 .21实用文档1 引言最经典的推箱子游戏,类似的游戏你一定早就玩过。要控制搬运工上下左右移动,来将箱子推到指定地点记得几年前,推箱子在PC 机上刮起了一股不小的益智类游戏的旋风,现在许多资深玩家也都对推箱子赞不绝口,可见有

6、深度的益智类游戏是非常受大家欢迎的。推箱子游戏1981年由日本人今林宏行首创,是在1982年12 月由ThinkingRabbit公司首次发行,名“仓库番”。箱子只可以推,不可以拉 ,而且一次只能推动一个,胜利条件就是把所有的箱子都推到目的地。推箱子游戏是一种老少皆宜的益智游戏,既可以开发青少年学生的智力,又可以防止老年痴呆症,全家一起攻关还可以促进家庭和睦,何乐而不为?推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带有这种游戏。它既能锻炼思维的严密性,又有很多乐趣。我们团队比较喜欢玩这个游戏,于是备采用c+编程语言进行实现。2 项目需求分析用户可以进行开始游戏,退出游戏,选

7、关,重新开始游戏等操作。有结束提示。作为一款极为经典的游戏,推箱子吸引了一代代玩家乐此不疲,通过使用Visual C+6.0进行设计,将学习过的知识应用到实际程序中,以便于为以后的进一步学习奠定基础。推箱子游戏的设计目标完成一个比较简单的游戏,使之能够实现推箱子游戏的基本功能,成为一个比较完整的游戏框架。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。在游戏主界面中,会出现一个小人、若干个箱子和箱子放置点。玩家需要利用方向键控制小人上下左右移动,并推动界面中的箱子到

8、达指定的箱子放置点。3 系统概要设计3.1功能控制模块系统功能如图3-1 所示。实用文档功能控制模块屏幕输出功能指定位置状态判断功关卡重置功能游戏通关时的通关提示时刻判断游戏的小人物、箱子所能移动的方向位置和游戏能不能通关倒回本关的初始状态和重新选择关卡图 3-1 功能模块3.2系统流程图系统流程如图3-2 所示。继续退出进入上一次关闭游戏离开游戏的窗口界面返回通关提示实用文档初始化主界面开始选择关卡初始化进入新游戏是否是最后一关成成功提示进入下一关图 3-2系统流程图关于推箱子游戏游戏规则的说明返回3.3推箱子游戏具有的功能3.3.1能够显示主菜单和界面游戏需要一共主菜单让玩家进行游戏设置,

9、同时能够把地图文件中的信息转换成为图像显示在游戏界面上。3.3.2能够实现键盘操作功能能够接受到键盘驶入的方向键信息,并根据不同的方向键把游戏人物移动到相应的位置。例如,当玩家单机方向键向上“上”时,如果向上的位置是可以移动的,那么就当把游戏人物向上西东一个方格。实用文档3.3.3能够把放置到位置的箱子进行变色显示当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色,这样就能明确的现实出该箱子已经放置到指定位置。3.3.4游戏胜负判断功能在游戏中,当玩家把所有的箱子都推到指定点时,玩家胜利通过当前游戏关口,进行下一关口的游戏。如果玩家无法将箱子全部推到指定位置时,玩家失败,玩家可以选择重新

10、开始进行当前关口的游戏,还是退出游戏。3.3.5支持关口选择功能玩家在游戏中可以自行选择需要挑战的关口。当玩家点击菜单中的“关卡选择”,并在对话框中输入所需要挑战的关口,设置完毕后点击开始即可打开所需关口。3.4推箱子功能框架推箱子游戏初画移移功始图动动能化模箱小控模块子人制块模模模块块块图 3-3 功能框架初始化模块。该模块包括屏幕初始化和游戏第一关到第最后一关的初始化。屏幕初始化用于输出操作信息,游戏每一关的初始化时构建每一关的关卡。画图模块。该模块最要是被其他模块调用,用于画墙、在空地画箱子、画小人、和画目的地。移动箱子模块。该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间

11、箱子的移动移动小人模块。该模块用于移动人物,包括目的地之间、空地之间和目的地与空地之间人物的移动实用文档功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态功能和关卡重置功能。3.5游戏界面设计3.5.1游戏主界面推箱子游戏主界面设计如图3-4 所示图 3-4设计的游戏主界面3.5.2游戏菜单与帮助结构设计图 3-5游戏菜单结构实用文档图 3-6 帮助结构设计3.5.3游戏中关卡选择对话框设计图 3-7 关卡选择对话框当玩家在对话框中输入关口数字,并重新点击开始游戏时,游戏会自动选择对应关口的地图级别开始新游戏。3.6游戏的界面实现在推箱子游戏中,通过如下几步即可实现游戏的

12、菜单在推箱子游戏工程的资源中添加一个菜单资源,其属性如表3-1所示:表3-1资源属性IDIDR_MAINFRAMEIDR_RESTARTIDR_SELECTIDR_EXIT类别弹出菜单菜单栏菜单栏菜单栏说明游戏的主菜单重新开始关卡选择游戏退出1 给每个菜单栏添加相应函数到CboxManDlg 类中。2 菜单响应函数的实现,各类菜单调用响应,要运用到的代码如下:void CBoxManDlg:OnExit()/退出游戏响应int i=MessageBox(退出游戏 , 提示 ,MB_OKCANCEL);实用文档switch(i)case 1:CDialog:OnCancel();break;ca

13、se 2:break;void CBoxManDlg:OnSelect() /关卡选择CSelect sel;sel.DoModal();g_level=sel.m_level;GameStart();void CBoxManDlg:OnRestart() /重新开始GameStart();3.7关卡选择对话框的实现推箱子游戏关口选择对话框的实现,分为如下几步:( 1)创建一个对话框资源,并添加相应的控件,如图:图 3-8关口选择对话框资源( 2)在资源视窗中,Menu一项,双击 IDR_MAINFRAME弹出菜单编辑框,添加一个“选关”选实用文档项,随便修改一个ID( 3) “查看 - 建立

14、类向导” ( Ctrl+W ),第一个选项卡, 找到“选关” 选项的 ID ,选中 COMMAND 消息,点右边按钮添加函数。图 3-9 添加函数图 1( 4) 接下来资源视窗, Bitmap 下插入 Dialog 对话框并编辑, 添加一个编辑框, 修改编辑框 ID“查看 - 建立类向导”, 添加新类, 填好类名就会自动生成.cpp 文件和 .h 文件。基类选CDialog ,对话框 ID 选上面建好的对话框。OK图 3-10 添加函数图 2( 5)为编辑框添加一个变量,用来存储编辑框获得的数据。选项卡MemberVariables ,类名选上面那个对话框的类名,选中编辑框的ID,增加变量实用

15、文档图 3-11 变量设置( 6)要想在 CBoxManDlg类中使用这个对话框类,必须包含头文件:#include MapSelect.h最后,选项卡关联函数中调用这个对话框类:void CBoxManDlg:OnSelect() /关卡选择/ TODO: Add your command handler code hereCSelect sel;sel.DoModal();g_level=sel.m_level;/CString str;/str.Format(%d,g_level);/MessageBox(str);GameStart();选关功能完成实用文档4 详细设计4.1地图文件读

16、取模块的设计与实现地图文件读取模块,主要负责将对地图文件读取,并把相应的文件数据转换成地图显示出来。其设计步骤如下:( 1)读取当前文件夹中的地图文件。( 2)判断当前选择关口是否在文件夹中存在。( 3)如果存在则把当前关口的地图信息放置到地图数组中。其实现代码如下所示:void CBoxManDlg:loadMap(int num)CString str;str.Format(%d,num); /格式化字符串,即将关卡编号变成XFILE *pFile=fopen(./Debug/map.txt,rb);/ 打开地图文件if (pFile=NULL)return; /判断打开是否失败char

17、cTmp20;/ 创建临时字符数组fgets(cTmp,20,pFile);/ 读取一行到数组中while (strncmp(cTmp,str,3)!=0)/ 读取与当前关口编号相同的地图fgets(cTmp,20,pFile);for (int i=0;i14;i+)/ 读取地图数据到地图数组fgets(m_cMapi,20,pFile);fclose(pFile);4.2地图绘制模块的设计与实现地图绘制模块主要将地图数组中的数据绘制成地图图像。其设计分为如下几步。( 1)格局要求,实现不同类型格子的绘制函数。地图数组及地图文件中各字符代表的意思如表 4-1 所示:表 4-1 地图数组及地图

18、字符代表的意思数 据图像宏说明0背景MAP_BACK填充背景1墙MAP_WHITEWALL地图边框2地板MAP_BLUEWALL可移动的空间3目标MAP_BALL放箱子的位置4箱子MAP_BOX初始箱子的位置实用文档5目标与箱子重合MAP_REDBOX箱子到达目标位置6人MAP_MAN人的位置7人和目标重合MAP_MANBALL人站在目标上(2) 读取地图数据,根据不同的数据调用不同的绘图函数。地图绘制,模块的实现代码如下:void CBoxManDlg:drawMap(CDC *pDC) / 绘地图接口函数int i,j,x,y;for (i=0;i14;i+)/遍历行for (j=0;jm

19、essage=WM_KEYDOWN)updateMap(pMsg-wParam); /根据按下的按键进行判断Invalidate(FALSE);if (isFinish()/调用规则模块函数,判断是否胜利AfxMessageBox( 恭喜你!过关!);g_level=g_level+1;/胜利后将当前关口加1if (g_levelg_maxlevel)g_level=1;/如果大于最大关口编号,重新开始GameStart();return CDialog:PreTranslateMessage(pMsg);4.4游戏规则模块设计与实现游戏规则模块,主要负责游戏规则的判断。其设计方法需要在每次玩

20、家移动人物后,对当前地图数组进行判断。如果当前地图中存在单独的“目标区域”或者“人物站在目标上”两种情况,就说明玩家未过关,放置就死过关。游戏规则模块的实现,代码如下:BOOL CBoxManDlg:isFinish() /判断是否过关实用文档for (int i=0;i14;i+)/ 遍历所有列for (int j=0;j取消 调试函数堆栈,用variables或者 call stack窗口VC6.0Debug 调试总结1. 如何显示 Debug 工具栏窗口:在任意工具栏的位置,单击鼠标右键,勾选Debug 项: Tools-Customize-Toolbars-Debug- close引申

21、:工具栏和工具条的区别?一个工具栏可以放置多个工具条。2断点调试F9:设置或去除断点。如果当前行未设置断点,按F9 可在当前行设置断点,如果当前行已设置断点,按 F9 则为去除断点设置。Alt+F9 :调出断点设置窗口在这个窗口里可以设置断点,去除所有已经设置的断点或者单个断点,也可以转到已设置的断点处,通过按钮EditCode,可以设置需要被计算的表达式,可以设置, 监视 (Watch) 数组或结构体元素的个数,可以在窗口过程函数中设置断点,可以为任何一个想要监视(Watch) 的消息 (Message) 设置一个断点。3开始调试: Build-Start Debug-Go: F5注: F5

22、 有两层含义。对于非调试阶段,按F5 用于开始调试。对于调试阶段( 已经进入调试阶段) ,按 F5用于运行程序到下一个断点处4. 停止调试一旦按 F5 之后进入调试阶段,IDE 编辑器上就会增加一个Debug 菜单选项 ( 里面包含一些常用调试手段)这里列出不常见的两个,有Exceptions, Threads ,Modules ,可以通过点击Modules 进入 Module List对话框,在这里可以看到一些模块(Module) ,如 kernel32.dll,可以 Google kernel32.dll的一些信息。 。这里略过,我也不是很熟悉。 -b ,欢迎大牛补充。 。都说说是怎么用的

23、。: Debug- Stop Debugging :Shift+F55重新开始调试( 或者说重头开始调试)这个功能既可以在调试阶段使用,也可以在非调试阶段使用,用于进入调试阶段。在调试阶段,它的功能如下:(即不停止调试的情况下)如果在一个程序里有多个断点,比如断点1、断点 2、。断点 5. 首先,按F5 调试,进入调试阶段,程序首先执行到断点1 处,如果再按F5 就会执行到断点2 处,依次类推,直到断点5处,如果当程序执行到断点5 处,再按F5,则程序不会再中断,程序完全运行起来。可是,在调试阶段, 如何从断点2断点 5 处之间的任意一个断点跳到断点1 处去重新执行呢?比如,程序已经执行到断点

24、4 处,现在程序员想回到断点1 处,重新再查看(监视)每个断点处的情形(也许是他记性不好,也许是他眼花了,也许是他操作太快,比如多按了几下F5 键 (*_*),这种情况以,只是有点麻烦。 。)现在,其实还有一种方法。 。我之前也没发现。 。-b 。在这种情况下, 就可以用重新开始调试了(注意,这个重新开始调试是指再不停止调试的情况下,重新开始调试) ,比如,现在在断点 4 处,想回到断点 1 处,就可以按 Ctrl+Shift+F5 (重新开始调试的快捷键)实用文档:Debug- Restart: Ctrl+Shift+F56. 单步调试前提条件 - 调试阶段: Debug-Step Into

25、 (F11)逐语句。(例如,遇到函数调用时会进入被调函数): Debug-Step Over (F10)逐过程(例如,遇到函数调用语句时,不会进入被调函数): Debug-Step Out (Shift+F11)跳出过程调用(例如,当F11 逐语句进入被调函数后,按Shift+F11会跳出被调函数): Debug- Run to Cursor (Ctrl+F10)运行到光标所在位置。 (注:貌似执行只能向前不能向后,即光标定位不能在已经执行过的代码里),经测试,如果光标在已执行的代码里,按Ctrl+F10则程序会完全执行起来,猜测。是不是执行完程序,再重新,从头开始执行到光标处,貌似显示的是没

26、执行到光标处。 -b 欢迎批评补充。7. 变量监视: Debug- QuickWatch (Shift+F9)调出 QuickWatch 对话框,添加要监视查看(watch )的表达式(expression),然后Add Watch,程序之后就会监视该表达式: View-Debug Windows-Watch (Alt+3)监视你设置的需要被监视的变量。: View- Debug Windows- Variables (Alt+4)监视所有变量。注: View 下的 Debug Windows 下的所有项均在Debug 工具条中有。注:在 Debug 下,可以将变量选中,直接拖到Variabl

27、es的窗口中监视。 。,是不是很方便很HIGH实用文档6 功能测试6.1主菜单和界面显示功能测试这个演示主要是测试游戏的菜单和界面显示是否成功,其步骤如下。( 1)运行推箱子程序.exe 文件, 如图 6-1 所示图 6-1 运行文件( 2)程序启动后,其菜单及界面如图6-2 所示图 6-2 界面效果6.2键盘操作功能测试键盘操作功能的演示,演示步骤如下:( 1) 游戏开始后人物的位置,如图6-3 所示实用文档图 6-3( 2) 按下键盘上的“下”方向按键。( 3) 查看任务是否向下移动,如图5-4 :图 6-4实用文档6.3箱子放置到指定位置时变色显示功能测试将箱子放置到指定位置时,箱子会变

28、色的功能,具体步骤如下( 1)推箱子游戏已经开始,如图6-5 所示图 6-5( 2) 推动箱子到指定位置后,显示如图5-6 所示图 6-6实用文档6.4支持地图扩展功能的演示推箱子游戏是否支持地图扩展功能,步骤如下:( 1) 查看第一关地图文件,其内容如下:( 2) 与游戏显示的地图对照图 6-7 第一关地图文件图 6-8修改后的地图文件( 3)重新进行第一关游戏,地图显示图 6-9实用文档7 特殊问题及解决方法1、问题1问题描述记录所有走过的步数总是不成功解决方案设置变量sum解决结果可以记录所有走过的步数,当游戏重新开始的时候本关的步数清零。2、问题2问题描述在初始化地图函数时,由于每加载地图均要将目的地存储于POINT DE 中,由于人物移动过程中当人物占领目的地时,目的地POINT DE 存储内容也会随之改变,事实上DE里面的值是不会变的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论