收藏 分享(赏)

C++推箱子课程设计报告.doc

上传人:精品资料 文档编号:8597872 上传时间:2019-07-04 格式:DOC 页数:26 大小:462KB
下载 相关 举报
C++推箱子课程设计报告.doc_第1页
第1页 / 共26页
C++推箱子课程设计报告.doc_第2页
第2页 / 共26页
C++推箱子课程设计报告.doc_第3页
第3页 / 共26页
C++推箱子课程设计报告.doc_第4页
第4页 / 共26页
C++推箱子课程设计报告.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

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

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

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

4、2 年 12 月 28 日系 主 任 签 字: 年 月 日目 录1 引言 12 项目需求分析 13 系统概要设计 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 详细

5、设计 .104.1 地图文件读取模块的设计与实现 .104.2 地图绘制模块的设计与实现 .104.3 键盘操作模块的设计与实现 .124.4 游戏规则模块设计与实现 .125 VC 调试方法介绍 .145.1 调试快捷键 .145.2 跟踪调试 .145.3 异常调试 .156 功能测试 .176.1 主菜单和界面显示功能测试 .176.2 键盘操作功能测试 .176.3 箱子放置到指定位置时变色显示功能测试 .196.4 支持地图扩展功能的演示 .207 特殊问题及解决方法 .218 设计小结 .219 参考文献 .2111 引言最经典的推箱子游戏,类似的游戏你一定早就玩过。要控制搬运工上

6、下左右移动,来将箱子推到指定地点记得几年前, 推箱子在 PC 机上刮起了一股不小的益智类游戏的旋风,现在许多资深玩家也都对推箱子赞不绝口,可见有深度的益智类游戏是非常受大家欢迎的。 推箱子游戏 1981 年由日本人今林宏行首创,是在 1982 年 12 月由 Thinking Rabbit 公司首次发行,名“仓库番” 。箱子只可以推, 不可以拉, 而且一次只能推动一个,胜利条件就是把所有的箱子都推到目的地。推箱子游戏是一种老少皆宜的益智游戏,既可以开发青少年学生的智力,又可以防止老年痴呆症,全家一起攻关还可以促进家庭和睦,何乐而不为?推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件

7、都会带有这种游戏。它既能锻炼思维的严密性,又有很多乐趣。我们团队比较喜欢玩这个游戏,于是备采用 c+编程语言进行实现。2 项目需求分析用户可以进行开始游戏,退出游戏,选关,重新开始游戏等操作。有结束提示。作为一款极为经典的游戏,推箱子吸引了一代代玩家乐此不疲,通过使用 Visual C+6.0 进行设计,将学习过的知识应用到实际程序中,以便于为以后的进一步学习奠定基础。推箱子游戏的设计目标完成一个比较简单的游戏,使之能够实现推箱子游戏的基本功能,成为一个比较完整的游戏框架。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空

8、间和通道,合理安排移动的次序和位置,才能顺利的完成任务。在游戏主界面中,会出现一个小人、若干个箱子和箱子放置点。玩家需要利用方向键控制小人上下左右移动,并推动界面中的箱子到达指定的箱子放置点。3 系统概要设计 3.1 功能控制模块系统功能如图 3-1 所示。2功能控制模块关卡重置功能指定位置状态判断功能屏幕输出功能游戏通关时的通关提示时刻判断游戏的小人物、箱子所能移动的方向位置和游戏能不能通关倒回本关的初始状态和重新选择关卡图 3-1 功能模块3.2 系统流程图系统流程如图 3-2 所示。3初始化主界面开始退出选择关卡初始化进入新游戏继续 关于推箱子游戏成功提示关闭游戏窗口 游戏规则的说明进入

9、下一关通关提示返回 返回是否是最后一关成功进入上一次离开游戏的界面图 3-2 系统流程图3.3 推箱子游戏具有的功能3.3.1 能够显示主菜单和界面游戏需要一共主菜单让玩家进行游戏设置,同时能够把地图文件中的信息转换成为图像显示在游戏界面上。3.3.2 能够实现键盘操作功能能够接受到键盘驶入的方向键信息,并根据不同的方向键把游戏人物移动到相应的位置。例如,当玩家单机方向键向上“上”时,如果向上的位置是可以移动的,那么就当把游戏人物向上西东一个方格。43.3.3 能够把放置到位置的箱子进行变色显示当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色,这样就能明确的现实出该箱子已经放置到指定位

10、置。3.3.4 游戏胜负判断功能在游戏中,当玩家把所有的箱子都推到指定点时,玩家胜利通过当前游戏关口,进行下一关口的游戏。如果玩家无法将箱子全部推到指定位置时,玩家失败,玩家可以选择重新开始进行当前关口的游戏,还是退出游戏。3.3.5 支持关口选择功能玩家在游戏中可以自行选择需要挑战的关口。当玩家点击菜单中的“关卡选择” ,并在对话框中输入所需要挑战的关口,设置完毕后点击开始即可打开所需关口。3.4 推箱子功能框架推箱子游戏初始化模块画图模块移动箱子模块移动小人模块功能控制模块图 3-3 功能框架初始化模块。该模块包括屏幕初始化和游戏第一关到第最后一关的初始化。屏幕初始化用于输出操作信息,游戏

11、每一关的初始化时构建每一关的关卡。画图模块。该模块最要是被其他模块调用,用于画墙、在空地画箱子、画小人、和画目的地。移动箱子模块。该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间箱子的移动移动小人模块。该模块用于移动人物,包括目的地之间、空地之间和目的地与空地之间人物的移动功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态功能和关卡重5置功能。3.5 游戏界面设计3.5.1 游戏主界面推箱子游戏主界面设计如图 3-4 所示图 3-4 设计的游戏主界面3.5.2 游戏菜单与帮助结构设计图 3-5 游戏菜单结构6图 3-6 帮助结构设计3.5.3 游戏中关卡选择

12、对话框设计图 3-7 关卡选择对话框当玩家在对话框中输入关口数字,并重新点击开始游戏时,游戏会自动选择对应关口的地图级别开始新游戏。3.6 游戏的界面实现在推箱子游戏中,通过如下几步即可实现游戏的菜单在推箱子游戏工程的资源中添加一个菜单资源,其属性如表 3-1 所示:表 3-1 资源属性ID 类别 说明IDR_MAINFRAME 弹出菜单 游戏的主菜单IDR_RESTART 菜单栏 重新开始IDR_SELECT 菜单栏 关卡选择IDR_EXIT 菜单栏 游戏退出1 给每个菜单栏添加相应函数到 CboxManDlg 类中。2 菜单响应函数的实现,各类菜单调用响应,要运用到的代码如下:void C

13、BoxManDlg:OnExit() /退出游戏响应int i=MessageBox(“退出游戏“,“提示“,MB_OKCANCEL);7switch(i) case 1:CDialog:OnCancel();break;case 2: break;void CBoxManDlg:OnSelect() /关卡选择CSelect sel;sel.DoModal();g_level=sel.m_level;GameStart();void CBoxManDlg:OnRestart() /重新开始GameStart();3.7 关卡选择对话框的实现推箱子游戏关口选择对话框的实现,分为如下几步:(1)

14、 创建一个对话框资源,并添加相应的控件,如图:图 3-8 关口选择对话框资源(2) 在资源视窗中,Menu一项,双击IDR_MAINFRAME弹出菜单编辑框,添加一个“选关”选8项,随便修改一个ID(3) “查看-建立类向导”(Ctrl+W),第一个选项卡,找到“选关”选项的ID,选中COMMAND消息,点右边按钮添加函数。图3-9 添加函数图1(4) 接下来资源视窗,Bitmap下插入Dialog对话框并编辑,添加一个编辑框,修改编辑框ID“查看-建立类向导”,添加新类,填好类名就会自动生成.cpp文件和.h文件。基类选CDialog,对话框ID选上面建好的对话框。OK图3-10 添加函数图

15、2(5) 为编辑框添加一个变量,用来存储编辑框获得的数据。选项卡Member Variables,类名选上面那个对话框的类名,选中编辑框的ID,增加变量9图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;/

16、str.Format(“%d“,g_level);/ MessageBox(str);GameStart();选关功能完成104 详细设计4.1 地图文件读取模块的设计与实现地图文件读取模块,主要负责将对地图文件读取,并把相应的文件数据转换成地图显示出来。其设计步骤如下:(1)读取当前文件夹中的地图文件。(2)判断当前选择关口是否在文件夹中存在。(3)如果存在则把当前关口的地图信息放置到地图数组中。其实现代码如下所示:void CBoxManDlg:loadMap(int num)CString str;str.Format(“%d“,num); /格式化字符串,即将关卡编号变成XFILE *

17、pFile=fopen(“./Debug/map.txt“,“rb“); /打开地图文件if (pFile=NULL)return; /判断打开是否失败char cTmp20; /创建临时字符数组fgets(cTmp,20,pFile); /读取一行到数组中while (strncmp(cTmp,str,3)!=0) /读取与当前关口编号相同的地图fgets(cTmp,20,pFile);for (int i=0;imessage=WM_KEYDOWN)updateMap(pMsg-wParam); /根据按下的按键进行判断Invalidate(FALSE);if (isFinish() /调

18、用规则模块函数,判断是否胜利AfxMessageBox(“恭喜你!过关!“);g_level=g_level+1; /胜利后将当前关口加1if (g_levelg_maxlevel)g_level=1; /如果大于最大关口编号,重新开始GameStart();return CDialog:PreTranslateMessage(pMsg);4.4 游戏规则模块设计与实现游戏规则模块,主要负责游戏规则的判断。其设计方法需要在每次玩家移动人物后,对当前地图数组进行判断。如果当前地图中存在单独的“目标区域”或者“人物站在目标上”两种情况,就说明玩家未过关,放置就死过关。游戏规则模块的实现,代码如下:

19、BOOL CBoxManDlg:isFinish() /判断是否过关13for (int i=0;i取消 调试函数堆栈,用 variables 或者 call stack 窗口VC6.0Debug 调试总结1. 如何显示 Debug 工具栏窗口:在任意工具栏的位置,单击鼠标右键,勾选 Debug 项:Tools-Customize-Toolbars-Debug-close引申:工具栏和工具条的区别?一个工具栏可以放置多个工具条。2断点调试F9:设置或去除断点。如果当前行未设置断点,按 F9 可在当前行设置断点,如果当前行已设置断点,按 F9 则为去除断点设置。Alt+F9:调出断点设置窗口在这

20、个窗口里可以设置断点,去除所有已经设置的断点或者单个断点,也可以转到已设置的断点处,通过按钮 Edit Code,可以设置需要被计算的表达式,可以设置,监视(Watch)数组或结构体元素的个数,可以在窗口过程函数中设置断点,可以为任何一个想要监视(Watch)的消息(Message)设置一个断点。3开始调试:Build-Start Debug-Go:F5注:F5 有两层含义。对于非调试阶段,按 F5 用于开始调试。对于调试阶段(已经进入调试阶段),按F5 用于运行程序到下一个断点处4.停止调试一旦按 F5 之后进入调试阶段,IDE 编辑器上就会增加一个 Debug 菜单选项(里面包含一些常用调

21、试手段)这里列出不常见的两个,有 Exceptions,Threads,Modules,可以通过点击 Modules 进入 Module List 对话框,在这里可以看到一些模块(Module),如 kernel32.dll,可以 Google kernel32.dll 的一些信息。 。 。这里略过,我也不是很熟悉。 。 。-b,欢迎大牛补充。 。 。都说说是怎么用的。:Debug-Stop Debugging:Shift+F55重新开始调试(或者说重头开始调试)这个功能既可以在调试阶段使用,也可以在非调试阶段使用,用于进入调试阶段。在调试阶段,它的功能如下:(即不停止调试的情况下)如果在一个

22、程序里有多个断点,比如断点 1、断点 2、 。 。 。断点 5.首先,按 F5 调试,进入调试阶段,程序首先执行到断点 1 处,如果再按 F5 就会执行到断点 2 处,依次类推,直到断点 5处,如果当程序执行到断点 5 处,再按 F5,则程序不会再中断,程序完全运行起来。可是,在调试阶段,如何从断点 2断点 5 处之间的任意一个断点跳到断点 1 处去重新执行呢?比如,程序已经执行到断点 4 处,现在程序员想回到断点 1 处,重新再查看(监视)每个断点处的情形(也许是他记性不好,也许是他眼花了,也许是他操作太快,比如多按了几下 F5 键 (*_*),这种情况大家也碰到过吧,往往很多人选择了,停止

23、调试,再重新开始进入调试,再重新来一遍,当然,这样可以,只是有点麻烦。 。 。 )现在,其实还有一种方法。 。 。我之前也没发现。 。 。-b。在这种情况下,就可以用重新开始调试了(注意,这个重新开始调试是指再不停止调试的情况下,重新开始调试) ,比如,现在在断点 4 处,想16回到断点 1 处,就可以按 Ctrl+Shift+F5(重新开始调试的快捷键):Debug-Restart: Ctrl+Shift+F56.单步调试前提条件-调试阶段:Debug-Step Into (F11)逐语句。 (例如,遇到函数调用时会进入被调函数):Debug-Step Over (F10)逐过程(例如,遇到

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

25、)调出 QuickWatch 对话框,添加要监视查看(watch)的表达式(expression) ,然后Add Watch,程序之后就会监视该表达式:View-Debug Windows-Watch (Alt+3)监视你设置的需要被监视的变量。:View-Debug Windows-Variables (Alt+4)监视所有变量。注:View 下的 Debug Windows 下的所有项均在 Debug 工具条中有。注:在 Debug 下,可以将变量选中,直接拖到 Variables 的窗口中监视。 。 。 ,是不是很方便很 HIGH176 功能测试6.1 主菜单和界面显示功能测试这个演示主

26、要是测试游戏的菜单和界面显示是否成功,其步骤如下。(1) 运行推箱子程序.exe文件,如图6-1所示图6-1 运行文件(2) 程序启动后,其菜单及界面如图6-2所示图6-2 界面效果6.2 键盘操作功能测试键盘操作功能的演示,演示步骤如下:(1) 游戏开始后人物的位置,如图6-3所示18图6-3(2) 按下键盘上的“下”方向按键。(3) 查看任务是否向下移动,如图5-4:图6-4196.3 箱子放置到指定位置时变色显示功能测试将箱子放置到指定位置时,箱子会变色的功能,具体步骤如下(1) 推箱子游戏已经开始,如图6-5所示图6-5(2) 推动箱子到指定位置后,显示如图5-6所示图6-6206.4

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

28、的值是不会变的解决方案对 POINT DE的值只初始化一次,记在选关按钮按下时,或游戏结束时才初始化,当人物移动时,当加载目的地图片时,不再对 POINT DE进行赋值。解决结果目的地的图片正常显示,成功判断当前关是否成功8 设计小结从工程实践开始前两周,原计划使用 MFC 开发程序,因为较 WIN32 应用程序熟悉,但是后来考虑到运用 WIN32 应用程序能使得开发更为灵活,且文件不至于冗余。刚刚使用 WIN32 应用程序开发的时候,对整个开发框架和消息机制的不熟悉,走了很多弯路,花了不少时间实践,从最初的需求分析设计,概要设计,我们小组都会集中实验室进行详细的探讨,虽然在探讨过程中不免会有

29、不同意见,但是都能很好的协商,调节过来,本次实践不仅在编程知识上有了更深的理解,也加深了我们对团队合作的重要性的认识。虽然本款游戏与传统上的推箱子游戏大同小异,但是我们尽了自己最大的努力去完善和修正它,小组成员都尽力扮演好自己的角色,对自己的分工也是按时按量的完成。为了此次项目能按时按量的完成,我们在明确自己的方向后,不断地在百度,谷歌,图书馆寻求为我们的答案。本次实践,我们的美工也是异常幸苦,为了满足我们程序主题的要求,不断地更新图片,有时候也会连续制作图片达 3,4个小时。虽然这次的游戏没有预想中的那么好,但是通过本次学习,下个作品将会更加出彩。编程工作不是那么容易的,有时候为了找一个小小

30、的错误,会耗上我们一整下午的时间,我们需要一点一点的排除,不停地分析和排除可能出错的原因,所以编程是需要很大的勇气和耐心。有人说这是在浪费我们的时间,其实事实上当你自己独立的解决完一个问题后,你会有很大的收获。可以说,结果固然重要,但在解决问题的过程中,我们学会了如何分析和解决问题不是更有意义吗?!9 参考文献1 王慧芳,毕建权. 软件工程2 罗伟坚. Visual C+经典游戏程序设计. 人民邮电出版社22设计过程中质疑(或答辩)记载:1、如何打开地图?答:CString str;str.Format(“%d“,num);FILE *pFile=fopen(“./Debug/map.txt“,“rb“);然后打开将读取的文件放入缓冲区中即可指导教师评语:签名:2013 年 1 月 日23

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报