推箱子课程设计报告.docx
- 文档编号:9619933
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:13
- 大小:23.34KB
推箱子课程设计报告.docx
《推箱子课程设计报告.docx》由会员分享,可在线阅读,更多相关《推箱子课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
推箱子课程设计报告
学号
武汉理工大学华夏学院
课程设计报告书
课程名称:
软件综合
题目:
基于VC++的“推箱子”游戏软件的开发与测试
系名:
信息工程系
专业班级:
姓名:
指导教师:
2013年元月18日
课程设计任务书
学生姓名:
专业班级:
软件2101
指导教师:
工作单位:
信息系计算机教研室
设计题目:
基于VC++的“推箱子”游戏软件的开发与测试
初始条件:
1.已完成c语言程序设计、软件工程、数据库概论或数据库技术等课程的学习
2.系统环境:
Intel奔腾4以上处理器,1G以上内存,40G以上硬盘,
Windows编程环境,VisualC++编程工具
要求完成的主要任务:
(在规定的时间内完成下列任务)
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
主要任务:
系统完成用户登录及管理员增加、删除、修改、查询功能
1.按系统功能进行游戏背景区域(移动区域、围墙)的设计与绘制:
2.根据系统实现的功能,绘出功能图、系统流程图
3.模块调试,运行结果正确,并经教师检查及答辩;
设计报告撰写格式要求:
(课程设计报告按统一通用格式书写)具体内容如下:
①设计任务与要求②总体方案与说明
③程序主要模块的流程图④问题分析与解决方案的设计思想和改进设想
⑤系统的调试记录、调试报告(即在调试中遇到的主要问题、解决方法及改进设想)
⑥小结与体会
附录:
①使用说明②参考资料
时间安排:
2012年12月29日---2013年元18日(共三周)
第1天
介绍本次课程设计的目的、要求,介绍MFCAppWizard应用程序框架的简介
第2天~第5天
介绍MFC中的窗口消息的创建及用,完成游戏背景区域(移动区域、围墙)的设计与绘制
第6天~第9天
完成目标区域、小人、箱子的绘制、绘制地图、加载/更新地图、关卡的设置及系统整合
第10天
系统运行与演示
第11天~第14天
系统测试与掌握调试的方法和技巧,撰写设计报告
第15天
按项目组进行演示与答辩,形成课程设计报告文档
指导教师签字:
2012年12月28日
系主任签字:
年月日
1引言
最经典的推箱子游戏,类似的游戏你一定早就玩过。
要控制搬运工上下左右移动,来将箱子推到指定地点
记得几年前,《推箱子》在机上刮起了一股不小的益智类游戏的旋风,现在许多资深玩家也都对《推箱子》赞不绝口,可见有深度的益智类游戏是非常受大家欢迎的。
推箱子游戏1981年由今林宏行首创,是在1982年12月由ThinkingRabbit公司首次发行,名“仓库番”。
箱子只可以推,不可以拉,而且一次只能推动一个,胜利条件就是把所有的箱子都推到目的地。
推箱子游戏是一种老少皆宜的益智游戏,既可以开发青少年学生的,又可以防止老年痴呆症,全家一起攻关还可以促进家庭和睦,何乐而不为
推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带有这种游戏。
它既能锻炼思维的严密性,又有很多乐趣。
我们团队比较喜欢玩这个游戏,于是备采用c++编程语言进行实现。
2项目需求分析
用户可以进行开始游戏,退出游戏,选关,重新开始游戏等操作。
有结束提示。
作为一款极为经典的游戏,推箱子吸引了一代代玩家乐此不疲,通过使用VisualC++进行设计,将学习过的知识应用到实际程序中,以便于为以后的进一步学习奠定基础。
推箱子游戏的设计目标完成一个比较简单的游戏,使之能够实现推箱子游戏的基本功能,成为一个比较完整的游戏框架。
在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
在游戏主界面中,会出现一个小人、若干个箱子和箱子放置点。
玩家需要利用方向键控制小人上下左右移动,并推动界面中的箱子到达指定的箱子放置点。
3系统概要设计
3.1功能控制模块
系统功能如图3-1所示。
功能控制模块
关卡重置功能
指定位置状态判断功能
屏幕输出功能
游戏通关时的通关提示
时刻判断游戏的小人物、箱子所能移动的方向位置和游戏能不能通关
倒回本关的初始状态和重新选择关卡
图3-1功能模块
3.2系统流程图
系统流程如图3-2所示。
初始化主界面
开始
退出
选择关卡
初始化进入新游戏
继续
关于推箱子游戏
成功提示
关闭游戏窗口
游戏规则的说明
进入下一关
通关提示
返回
返回
是否是最后一关成功
进入上一次离开游戏的界面
图3-2系统流程图
3.3推箱子游戏具有的功能
3.3.1能够显示主菜单和界面
游戏需要一共主菜单让玩家进行游戏设置,同时能够把地图文件中的信息转换成为图像显示在游戏界面上。
3.3.2能够实现键盘操作功能
能够接受到键盘驶入的方向键信息,并根据不同的方向键把游戏人物移动到相应的位置。
例如,当玩家单机方向键向上“上”时,如果向上的位置是可以移动的,那么就当把游戏人物向上西东一个方格。
3.3.3能够把放置到位置的箱子进行变色显示
当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色,这样就能明确的现实出该箱子已经放置到指定位置。
3.3.4游戏胜负判断功能
在游戏中,当玩家把所有的箱子都推到指定点时,玩家胜利通过当前游戏关口,进行下一关口的游戏。
如果玩家无法将箱子全部推到指定位置时,玩家失败,玩家可以选择重新开始进行当前关口的游戏,还是退出游戏。
3.3.5支持关口选择功能
玩家在游戏中可以自行选择需要挑战的关口。
当玩家点击菜单中的“关卡选择”,并在对话框中输入所需要挑战的关口,设置完毕后点击开始即可打开所需关口。
3.4推箱子功能框架
推箱子游戏
初始化模块
画图模块
移动箱子模块
移动小人模块
功能控制模块
图3-3功能框架
初始化模块。
该模块包括屏幕初始化和游戏第一关到第最后一关的初始化。
屏幕初始化用于输出操作信息,游戏每一关的初始化时构建每一关的关卡。
画图模块。
该模块最要是被其他模块调用,用于画墙、在空地画箱子、画小人、和画目的地。
移动箱子模块。
该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间箱子的移动
移动小人模块。
该模块用于移动人物,包括目的地之间、空地之间和目的地与空地之间人物的移动
功能控制模块。
该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态功能和关卡重置功能。
3.5游戏界面设计
3.5.1游戏主界面
推箱子游戏主界面设计如图3-4所示
图3-4设计的游戏主界面
3.5.2游戏菜单与帮助结构设计
图3-5游戏菜单结构
图3-6帮助结构设计
3.5.3游戏中关卡选择对话框设计
图3-7关卡选择对话框
当玩家在对话框中输入关口数字,并重新点击开始游戏时,游戏会自动选择对应关口的地图级别开始新游戏。
3.6游戏的界面实现
在推箱子游戏中,通过如下几步即可实现游戏的菜单
在推箱子游戏工程的资源中添加一个菜单资源,其属性如表3-1所示:
表3-1资源属性
ID
类别
说明
IDR_MAINFRAME
弹出菜单
游戏的主菜单
IDR_RESTART
菜单栏
重新开始
IDR_SELECT
菜单栏
关卡选择
IDR_EXIT
菜单栏
游戏退出
1给每个菜单栏添加相应函数到CboxManDlg类中。
2菜单响应函数的实现,各类菜单调用响应,要运用到的代码如下:
(1)voidCBoxManDlg:
:
OnExit()pp文件和.h文件。
基类选CDialog,对话框ID选上面建好的对话框。
OK
图3-10添加函数图2
(2)为编辑框添加一个变量,用来存储编辑框获得的数据。
选项卡MemberVariables,类名选上面那个对话框的类名,选中编辑框的ID,增加变量
图3-11变量设置
(6)要想在CBoxManDlg类中使用这个对话框类,必须包含头文件:
#include""
最后,选项卡关联函数中调用这个对话框类:
voidCBoxManDlg:
:
OnSelect()Debug/","rb");
如何显示Debug工具栏窗口①:
在任意工具栏的位置,单击鼠标右键,勾选Debug项②:
Tools---->Customize--àToolbars--àDebug--àclose引申:
工具栏和工具条的区别?
一个工具栏可以放置多个工具条。
2.断点调试F9:
设置或去除断点。
如果当前行未设置断点,按F9可在当前行设置断点,如果当前行已设置断点,按F9则为去除断点设置。
Alt+F9:
调出断点设置窗口在这个窗口里可以设置断点,去除所有已经设置的断点或者单个断点,也可以转到已设置的断点处,通过按钮EditCode,可以设置需要被计算的表达式,可以设置,监视(Watch)数组或结构体元素的个数,可以在窗口过程函数中设置断点,可以为任何一个想要监视(Watch)的消息(Message)设置一个断点。
3.开始调试①:
Build--StartDebug--Go②:
F5注:
F5有两层含义。
对于非调试阶段,按F5用于开始调试。
对于调试阶段(已经进入调试阶段),按F5用于运行程序到下一个断点处4.停止调试一旦按F5之后进入调试阶段,IDE编辑器上就会增加一个Debug菜单选项(里面包含一些常用调试手段)这里列出不常见的两个,有Exceptions,Threads,Modules,可以通过点击Modules进入ModuleList对话框,在这里可以看到一些模块(Module),如,可以Google的一些信息。
。
。
这里略过,我也不是很熟悉。
。
。
--b,欢迎大牛补充。
。
。
都说说是怎么用的。
①:
Debug--àStopDebugging②:
Shift+F55.重新开始调试(或者说重头开始调试)这个功能既可以在调试阶段使用,也可以在非调试阶段使用,用于进入调试阶段。
在调试阶段,它的功能如下:
(即不停止调试的情况下)如果在一个程序里有多个断点,比如断点1、断点2、。
。
。
断点5.首先,按F5调试,进入调试阶段,程序首先执行到断点1处,如果再按F5就会执行到断点2处,依次类推,直到断点5处,如果当程序执行到断点5处,再按F5,则程序不会再中断,程序完全运行起来。
可是,在调试阶段,如何从断点2~断点5处之间的任意一个断点跳到断点1处去重新执行呢比如,程序已经执行到断点4处,现在程序员想回到断点1处,重新再查看(监视)每个断点处的情形(也许是他记性不好,也许是他眼花了,也许是他操作太快,比如多按了几下F5键(*^__^*)……,这种情况大家也碰到过吧,往往很多人选择了,停止调试,再重新开始进入调试,再重新来一遍,当然,这样可以,只是有点麻烦。
。
。
)现在,其实还有一种方法。
。
。
我之前也没发现。
。
。
--b。
在这种情况下,就可以用重新开始调试了(注意,这个重新开始调试是指再不停止调试的情况下,重新开始调试),比如,现在在断点4处,想回到断点1处,就可以按Ctrl+Shift+F5(重新开始调试的快捷键)①:
Debug--àRestart②:
Ctrl+Shift+F56.单步调试前提条件---调试阶段①:
Debug--StepInto(F11)逐语句。
(例如,遇到函数调用时会进入被调函数)②:
Debug--StepOver(F10)逐过程(例如,遇到函数调用语句时,不会进入被调函数)③:
Debug--StepOut(Shift+F11)跳出过程调用(例如,当F11逐语句进入被调函数后,按Shift+F11会跳出被调函数)④:
Debug--àRuntoCursor(Ctrl+F10)运行到光标所在位置。
(注:
貌似执行只能向前不能向后,即光标定位不能在已经执行过的代码里),经测试,如果光标在已执行的代码里,按Ctrl+F10则程序会完全执行起来,猜测。
。
。
是不是执行完程序,再重新,从头开始执行到光标处,貌似显示的是没执行到光标处。
。
。
--b欢迎批评补充。
7.变量监视①:
Debug--àQuickWatch(Shift+F9)调出QuickWatch对话框,添加要监视查看(watch)的表达式(expression),然后AddWatch,程序之后就会监视该表达式②:
View--DebugWindows---Watch(Alt+3)监视你设置的需要被监视的变量。
③:
View--àDebugWindows---àVariables(Alt+4)监视所有变量。
注:
View下的DebugWindows下的所有项均在Debug工具条中有。
注:
在Debug下,可以将变量选中,直接拖到Variables的窗口中监视。
。
。
,是不是很方便很HIGH
4功能测试
4.1主菜单和界面显示功能测试
这个演示主要是测试游戏的菜单和界面显示是否成功,其步骤如下。
(1)运行推箱子程序.exe文件,如图6-1所示
图6-1运行文件
(2)程序启动后,其菜单及界面如图6-2所示
图6-2界面效果
4.2键盘操作功能测试
键盘操作功能的演示,演示步骤如下:
(1)游戏开始后人物的位置,如图6-3所示
图6-3
(2)按下键盘上的“下”方向按键。
(3)查看任务是否向下移动,如图5-4:
图6-4
4.3箱子放置到指定位置时变色显示功能测试
将箱子放置到指定位置时,箱子会变色的功能,具体步骤如下
(1)推箱子游戏已经开始,如图6-5所示
图6-5
(2)推动箱子到指定位置后,显示如图5-6所示
图6-6
4.4支持地图扩展功能的演示
推箱子游戏是否支持地图扩展功能,步骤如下:
(1)查看第一关地图文件,其内容如下:
(2)与游戏显示的地图对照
图6-7第一关地图文件图6-8修改后的地图文件
(3)重新进行第一关游戏,地图显示
图6-9
5特殊问题及解决方法
1、问题1
问题描述
记录所有走过的步数总是不成功
解决方案
设置变量sum
解决结果
可以记录所有走过的步数,当游戏重新开始的时候本关的步数清零。
2、问题2
问题描述
在初始化地图函数时,由于每加载地图均要将目的地存储于POINTDE[]中,由于人物移动过程中当人物占领目的地时,目的地POINTDE[]存储内容也会随之改变,事实上DE里面的值是不会变的
解决方案
对POINTDE[]的值只初始化一次,记在选关按钮按下时,或游戏结束时才初始化,当人物移动时,当加载目的地图片时,不再对POINTDE[]进行赋值。
解决结果
目的地的图片正常显示,成功判断当前关是否成功
6设计小结
从工程实践开始前两周,原计划使用MFC开发程序,因为较WIN32应用程序熟悉,但是后来考虑到运用WIN32应用程序能使得开发更为灵活,且文件不至于冗余。
刚刚使用WIN32应用程序开发的时候,对整个开发框架和消息机制的不熟悉,走了很多弯路,花了不少时间实践,从最初的需求分析设计,概要设计,我们小组都会集中实验室进行详细的探讨,虽然在探讨过程中不免会有不同意见,但是都能很好的协商,调节过来,本次实践不仅在编程知识上有了更深的理解,也加深了我们对团队合作的重要性的认识。
虽然本款游戏与传统上的推箱子游戏大同小异,但是我们尽了自己最大的努力去完善和修正它,小组成员都尽力扮演好自己的角色,对自己的分工也是按时按量的完成。
为了此次项目能按时按量的完成,我们在明确自己的方向后,不断地在XX,谷歌,图书馆寻求为我们的答案。
本次实践,我们的美工也是异常幸苦,为了满足我们程序主题的要求,不断地更新图片,有时候也会连续制作图片达3,4个小时。
虽然这次的游戏没有预想中的那么好,但是通过本次学习,下个作品将会更加出彩。
编程工作不是那么容易的,有时候为了找一个小小的错误,会耗上我们一整下午的时间,我们需要一点一点的排除,不停地分析和排除可能出错的原因,所以编程是需要很大的勇气和耐心。
有人说这是在浪费我们的时间,其实事实上当你自己独立的解决完一个问题后,你会有很大的收获。
可以说,结果固然重要,但在解决问题的过程中,我们学会了如何分析和解决问题不是更有意义吗!
7
[1]王慧芳,毕建权.软件工程
[2]罗伟坚.VisualC++经典游戏程序设计.人民邮电出版社
设计过程中质疑(或答辩)记载:
1、如何打开地图
答:
CStringstr;
("[%d]",num);
FILE*pFile=fopen("./Debug/","rb");
然后打开将读取的文件放入缓冲区中即可
指导教师评语:
签名:
2013年1月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 箱子 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)