15 柯亚奇.docx
- 文档编号:26404665
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:31
- 大小:319.92KB
15 柯亚奇.docx
《15 柯亚奇.docx》由会员分享,可在线阅读,更多相关《15 柯亚奇.docx(31页珍藏版)》请在冰豆网上搜索。
15柯亚奇
学号
10225610115
武汉理工大学华夏学院
课程设计报告书
课程名称:
软件综合
题目基于VC++6.0的“推箱子”游戏软件的开发与测试
系名:
信息工程系
专业班级:
软件2101
姓名:
柯亚奇
指导教师:
黄启荃
2013年元月18日
课程设计任务书
学生姓名:
柯亚奇专业班级:
软件2101
指导教师:
黄启荃工作单位:
信息系计算机教研室
设计题目:
基于VC++6.0的“推箱子”游戏软件的开发与测试
初始条件:
1.已完成c语言程序设计、软件工程、数据库概论或数据库技术等课程的学习
2.系统环境:
Intel奔腾4以上处理器,1G以上内存,40G以上硬盘,
Windows编程环境,VisualC++6.0编程工具
要求完成的主要任务:
(在规定的时间内完成下列任务)
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
主要任务:
系统完成用户登录及管理员增加、删除、修改、查询功能
1.按系统功能进行游戏背景区域(移动区域、围墙)的设计与绘制:
2.根据系统实现的功能,绘出功能图、系统流程图
3.模块调试,运行结果正确,并经教师检查及答辩;
设计报告撰写格式要求:
(课程设计报告按统一通用格式书写)具体内容如下:
①设计任务与要求②总体方案与说明
③程序主要模块的流程图④问题分析与解决方案的设计思想和改进设想
⑤系统的调试记录、调试报告(即在调试中遇到的主要问题、解决方法及改进设想)
⑥小结与体会
附录:
①使用说明
参考资料
时间安排:
2012年12月29日---2013年元18日(共三周)
第1天
介绍本次课程设计的目的、要求,介绍MFCAppWizard应用程序框架的简介
第2天~第5天
介绍MFC中的窗口消息的创建及用,完成游戏背景区域(移动区域、围墙)的设计与绘制
第6天~第9天
完成目标区域、小人、箱子的绘制、绘制地图、加载/更新地图、关卡的设置及系统整合
第10天
系统运行与演示
第11天~第14天
系统测试与掌握调试的方法和技巧,撰写设计报告
第15天
按项目组进行演示与答辩,形成课程设计报告文档
指导教师签字:
2012年12月28日
系主任签字:
年月日
目录
1课题研究相关技术与分析4
1.1MicrosoftVisualC++6.0概述4
1.2可行性研究与需求分析5
2.1推箱子游戏概述6
2.2推箱子游戏的基本要求7
2.1.1开发软件及硬件环境要求7
2.1.2运行环境7
2.1.3测试环境操作系统与硬件配置7
2.1.4界面要求7
2.3推箱子游戏具有的功能7
2.3推箱子游戏系统设计8
2.3.1推箱子游戏功能架构8
2.3.2程序结构设计9
2.3.3出错处理设计9
2.4游戏界面设计10
2.4.1游戏主界面的设计10
2.4.2游戏菜单结构的设计10
2.4.3游戏中关口选择对话框的设计11
.3.1推箱子游戏的界面实现11
3.1.1游戏菜单的实现11
3.1.2游戏帮助对话框的实现12
3.1.3游戏关口选择对话框的实现13
3.2推箱子游戏的核心算法设计与实现15
3.2.1地图文件读取模块的设计与实现15
3.2.2地图绘制模块的设计与实现15
3.2.3键盘操作模块的设计与实现17
3.2.4游戏规则模块的设计与实现18
3.2.5主对话框的设计与实现18
4.1主菜单和界面显示功能的测试演示19
4.2键盘操作功能的测试演示19
4.3箱子放置到指定位置时变色显示功能的测试演示20
4.4支持地图扩展功能的测试演示21
4.5游戏胜负判断功能的测试演示22
4.6游戏帮助功能的测试演示23
总结24
1课题研究相关技术与分析
1.1MicrosoftVisualC++6.0概述
VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说VC++不是门语言,虽然它和C++之间有密切的关系,如果形象点比喻的话,可以C++看作为一种“工业标准”,而VC++则是某种操作系统平台下的“厂商标准”,而“厂商标准”是在遵循“工业标准”的前提下扩展而来的。
VC++应用程序的开发主要有两种模式,一种是WINAPI方式,另一种则是MFC方式,传统的WINAPI开发方式比较繁琐,而MFC则是对WINAPI再次封装,所以MFC相对于WINAPI开发更具备效率优势[9]。
VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用有很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台[3]。
VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
Microsoft的主力软件产品。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台[10]。
VisualC++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。
这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。
由于C++是由C语言发展起来的,也支持C语言的编译。
6.0版本是使用最多的版本,很经典。
最大的缺点是对于模版的支持比较差。
现在最新补丁为SP6,推荐安装,否则易出现编译时假死状态。
仅支持Windows操作系统。
目前发现与windows7兼容性不好,安装成功后可能会出现无法打开cpp文件的现象。
VisualC++是比较实用的开发工具。
首先它的核心——MFC类库已是事实上的业界标准;其次,它的可视化开发工具紧密集成,可用于开发非常专业的Windows、Web和企业级应用程序;第三,VisualC++的联机帮助已被集成到MSDN(微软开发者网络)库中去了,MSDN包含了微软大部分产品的技术文档和支持资料,内容相当丰富,是程序员不可多得的参考材料,现在MSDN库随着VisualC++6.0一起发行,实在是大家的福音。
作为当今流行的开发环境,VisualC++6.0具有如下特点:
1.VisualC++6.0提供了开发Windows环境下的应用程序的简捷、快速和实用的开发环境。
利用VisualC++6.0开发Windows应用程序具有很高的效率。
2.VisualC++6.0提供了MFC类库,开发者只需要做少量的工作就可以得到功能齐全的Windows应用程序。
3.VisualC++6.0提供了高度集成的工具集,使得在开发应用程序的全过程中都保证了较高的效率。
集成化便于程序开发,开发者可以再诸如编辑、建立、调试等不同的任务之间快速切换,甚至可以同步进行。
4.图形化的可视特点使得VisualC++6.0简单易学[11]。
1.2可行性研究与需求分析
问题定义的可行性分析是软件生存周期的第一阶段。
可行性研究的目的是实用最少的代价在尽可能短的时间内确定问题是否能够解决。
可行性研究的实质是要进行一次系统分析和设计的简化过程,也就是在较高层上以抽象的方式进行系统分析和设计的过程。
一般来讲,应该从技术、经济和操作等方面来研究每种解法的可行性。
1.要求
作为一款极为经典的游戏,推箱子吸引了一代代玩家乐此不疲,本例通过使用VisualC++6.0进行设计,使用了API函数,将书本知识应用到实际程序中,以便于为以后的进一步学习奠定基础。
本例要求大量使用API函数,熟悉消息映射机制的具体实现。
2.目标
推箱子游戏的设计目标完成一个比较简单的游戏,使之能够实现推箱子游戏的基本功能,成为一个比较完整的游戏框架。
该游戏作为一个单机版的游戏界面,基本达到推箱子游戏的基本功能。
通过练习能进一步学习API函数的使用。
3.可行性研究方法
决定软件的可行性研究方法主要有:
成本效益分析,对估算问题的看法,软件的作用范围,软件的成本估算,速度安排等。
4.决定可行性的主要因素
决定可行性的四个主要方面有:
经济因素,技术因素,法律因素,不同方案。
由于该游戏本身的规模不大,几乎可以再所以的计算机系统上运行,所以对于硬件和软件没有太苛刻的要求,各种游戏平台,大型电脑、家用游戏机等,甚至连掌上型的小游戏机都能顺畅运行。
5.需求分析
推箱子是一个脍炙人口的游戏,所以大家对它都很是熟悉,现在的要求是尽量设计一个合格的推箱子游戏。
作为一个广受关注的游戏,现在有大量的关于推箱子的资料,我尽量吸取已有的成功的经验,做到精益求精。
2推箱子游戏的总体设计
2.1推箱子游戏概述
推箱子是一个来自日本的古老游戏,目的是在训练玩家的逻辑思考能力。
在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
在游戏主界面中,会出现一个小人、若干个箱子和箱子放置点。
玩家需要利用方向键控制小人上下左右移动,并推动界面中的箱子到达指定的箱子放置点。
2.2推箱子游戏的基本要求
2.1.1开发软件及硬件环境要求
◇IntelPentium42.0GHZ,512内存,80G硬盘。
◇MicrosoftWindows2000Professional。
◇MicrosoftVisualC++6.0。
2.1.2运行环境
◇IntelPentium2及以上处理器,32M以上内存,20M以上硬盘空间。
◇MicrosoftWindows2000或XP以上操作系统。
◇800×600或以上的屏幕分辨率。
2.1.3测试环境操作系统与硬件配置
◇MicrosoftWindows2000Professional。
◇MicrosoftWindowsXPProfessional。
◇有MFC环境的动态库文件,如MFC42.dll等。
◇IntelPentium42.0GHZ,512内存,100G硬盘剩余空间。
2.1.4界面要求
采用Windows标准界面,只需要使用键盘和鼠标即可完成全部操作。
而且操作相对简单,不需过多地对操作人员进行培训并提供帮助说明。
2.3推箱子游戏具有的功能
1.能够显示主菜单和界面
游戏需要提供主菜单让玩家进行游戏设置,同时能够把地图文件中的信息转换成为图像显示到主游戏界面上。
2.能够实现键盘操作功能
能够接收到键盘输入的方向键信息,并根据不同的方向键把游戏人物移动到相应的位置。
例如,当玩家单击方向键“上”时,如果向上的位置是可移动的,那么就当把游戏人物向上移动一个方格。
3.能够把放置到位置上的箱子进行变色显示
当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色。
这样就能明确的显示出该箱子已经放置到指定的位置上。
此游戏设计为当推到指定位置的格子时,箱子变为红色,边框为橙色。
4.支持地图扩展功能
玩家可以自己扩展原游戏地图文件,从而生成新的游戏地图。
按照表4.2.2中地图文件中数据与图像对照说明进行游戏地图设计。
设计完毕后重新打开游戏,选择对应关口即可呈现。
5.游戏胜负判断功能
在游戏中,当玩家把所有的箱子都推到箱子放置点时,玩家胜利通过当前游戏关口,进行下一关口的游戏。
如果玩家无法将指定的箱子全部推倒放置点时,玩家失败。
玩家可以选择重新进行当前关口的游戏,还是退出游戏。
6.支持关口选择功能
玩家在游戏中可自行选择需要挑战的关口。
当玩家点击菜单中“游戏设置—关口选择”,并在对话框中输入所要的关口数字,设置完毕后点击开始游戏即可打开所需关口。
7.游戏提供帮助说明
在游戏菜单中,提供一个使用说明项,以方便对本游戏不了解的玩家对游戏进行操作和使用。
鉴于本游戏家喻户晓,故在此处只是提供比较简单的说明。
2.3推箱子游戏系统设计
2.3.1推箱子游戏功能架构
根据推箱子游戏基本要求以及相关拓展功能,进行游戏结构功能设计,游戏功能框架图如图2.3.1所示。
图2.3.1推箱子功能框架
2.3.2程序结构设计
游戏共由3个类和5个模块组成,如图2.3.2所示。
图2.3.2游戏主要类结构
◇主界面对话框类:
主要负责主界面、菜单及各个窗口类对象的创建和调用等处理。
◇键盘操作模块:
主要负责接收玩家键盘输入并进行箱子移动等处理。
◇关口选择对话框类:
主要负责游戏挑战关口的选择和设置。
◇地图文件读取模块:
主要负责读取地图文件并进行相应的解析工作。
◇地图绘制模块:
主要负责将地图数组中的数据绘制成地图图像。
◇游戏规则模块:
主要负责游戏规则的判断。
◇帮助对话框类:
主要负责帮助提示的显示及其他辅助信息。
2.3.3出错处理设计
1.出错输出信息
当游戏中出现错误,采用弹出对话框的方式提示用户出现错误。
2.出错处理对策
当游戏中出现错误,采用中止当前游戏并重新开始新游戏的方法处理游戏中的错误。
2.3.4维护设计
由于整个推箱子游戏项目在开发完成后,基本不会有太多的变动,所以维护的主要任务是把用户使用中出现的问题解决即可。
2.4游戏界面设计
2.4.1游戏主界面的设计
推箱子的游戏主界面设计,如图2.4.1所示。
图2.4.1设计的游戏主界面
其背景为黑色,墙壁采用灰色格子,通道为蓝色,箱子为橘黄色;右边等级和已走步数方块采用白色背景红色字体。
2.4.2游戏菜单结构的设计
推箱子的游戏菜单设计如图2.4.2所示。
图2.4.2设计的游戏菜单结构
2.4.3游戏中关口选择对话框的设计
关口选择对话框的设计如图3.5所示。
图3.5关口选择对话框
当玩家在对话框中输入关口数字,并重新点击开始游戏时,游戏会自动选择对应关口的地图级别开始新游戏。
3推箱子游戏的设计与实现
推箱子游戏的VisualC++工程采用MFC对话框模式进行开发。
本节主要讲解推箱子游戏各个功能模块的代码实现。
.3.1推箱子游戏的界面实现
3.1.1游戏菜单的实现
在推箱子游戏中,通过如下几步即可实现游戏的菜单。
1.在推箱子游戏工程的资源中添加一个菜单资源,其属性如表3.1.1所示
表3.1.1主菜单属性
ID
类别
说明
IDR_MAIN_MENU
弹出菜单
游戏的主菜单
IDR_START_GAME
菜单栏
开始游戏
IDR_EXIT_GAME
菜单栏
退出游戏
IDR_SELECT_LEVEL
菜单栏
关口选择
IDR_HELP
菜单栏
帮助
IDR_ABOUT
菜单栏
关于
2.给每个菜单栏添加响应函数到CboxManDlg类中。
3.菜单响应函数的实现,背景音乐的调用,各种菜单调用响应,要运用到的代码如下:
(备注:
由于代码较多,而且基本类似,故只列出比较代表性的部分。
)
BOOLCboxManDlg:
:
OnInitDialog()
{
Cdialog:
:
OnInitdialog();
SetIcon(m_hIcon,TRUE);//设置大图标
SetIcon(m_hIcon,FALSE);//设置小图标
M_bStart=FALSE;//设置游戏状态
InitMenu();//初始化菜单
returnTRUE;//初始化成功
}
voidCBoxManDlg:
:
OnExitGame()//退出菜单响应函数
{
CDialog:
:
OnCancel();//调用基类退出函数
}
voidCBoxManDlg:
:
OnHelp()//帮助菜单栏响应函数
{
CHelpDlgdlg;
dlg.DoModal();//弹出对话框
}
3.1.2游戏帮助对话框的实现
推箱子游戏中的帮助是使用一个对话框来实现的。
其实现步骤如下。
1.添加一个对话框资源到工程中,并填写说明文字。
图3.1.2游戏帮助对话框
2.编写一个ChelpDlg对话框类,主要是加载IDD_HELP对话框资源。
通过资源中的文字说明对游戏操作方法进行描述。
同时只包含单击“知道了”按钮的响应函数。
其声明代码如下所示:
ClassChelpDlg:
publicCdialog//公共继承于CDialog类
{
Public:
CHelpDlg(CWnd*pParent=NULL);//构造函数
//对话框资源
enum{IDD=IDD_HELP};//加载资源
//重载函数
protected:
virtualvoidDoDataExchange(CdataExchange*pDX);
protected:
virtualvoidOnOK();//单击“确定”按钮响应函数声明
DECLARE_MESSAGE_MAP()
};
(3)ChelpDlg对话框类的实现,需要实现对话框类的构造函数、析构函数和“知道了”按钮响应函数。
以下是“知道了”按钮响应代码:
VoidChelpDlg:
:
OnOK()//单击“知道了”按钮响应函数{
Cdialog:
:
OnOK();
}
3.1.3游戏关口选择对话框的实现
推箱子游戏关口选择对话框的实现,分为如下几步:
1.创建一个对话框资源,并添加相应的控件,如图4.2所示。
图4.2关口选择对话框资源
2.添加CselectDlg类,其中需要包含IDD_SELECT_DLG对话框资源和关口编号变量的声明,类的声明代码如下所示。
classCSelectDlg:
publicCDialog
{
public:
CSelectDlg(CWnd*pParent=NULL);//standardconstructor
enum{IDD=IDD_SELECT_DLG};
UINTm_level;
public:
virtualintDoModal();
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//Implementation
protected:
virtualBOOLOnInitDialog();
virtualvoidOnOK();
DECLARE_MESSAGE_MAP()
};
3.CselectDlg类的实现中,主要通过把全局的关口编号变量值赋值给局部变量,并更新显示关口编号到编程框中。
在玩家单击“设置”按钮后,又将获得的局部变量值赋值给全局变量,来改变当前游戏关口,同时要对最大值进行判断。
其代码如下:
BOOLCSelectDlg:
:
OnInitDialog(){
CDialog:
:
OnInitDialog();
m_level=g_level;//把全局变量的值赋值给等级显示
returnTRUE;//初始化成功
}
voidCSelectDlg:
:
OnOK(){
UpdateData(TRUE);
g_level=m_level;
CDialog:
:
OnOK();
}
intCSelectDlg:
:
DoModal(){
m_level=g_level;//把全局变量的值赋值给等级显示
returnCDialog:
:
DoModal();
}
3.2推箱子游戏的核心算法设计与实现
前面已经对推箱子游戏的菜单和各种对话框的实现进行了阐述,下面的是游戏的核心算法的设计和实现。
3.2.1地图文件读取模块的设计与实现
地图文件读取模块,主要负责将对地图文件进行读取,并把相应的文件数据转换成地图显示出来。
其设计步骤如下。
1.读取当前文件夹中的地图文件(map.txt)。
2.判断当前选择关口是否在文件中存在。
3.如果存在则把当前关口的地图信息放置到地图数组中。
其实现代码如下所示:
voidCBoxManDlg:
:
loadMap(intiMissionNum)
{
CStringstr;
str.Format("[%d]",iMissionNum);//格式化字符串,即将关口编号变成[X]
FILE*pFile=fopen("map.txt","rb");//打开地图文件
if(pFile==NULL)//判断打开是否失败
return;
charcTmp[20];//创建临时字符数组
fgets(cTmp,20,pFile);//读取一行到数组中
while(strncmp(cTmp,str,3)!
=0)//读取与当前关口编号相同的地图头
{
fgets(cTmp,20,pFile);
}
for(inti=0;i<14;i++)//读取地图数据到地图数组
fgets(m_cMap[i],20,pFile);
fclose(pFile);
}
3.2.2地图绘制模块的设计与实现
地图绘制模块主要负责将地图数组中的数据绘制成地图图像。
其设计分为如下几步。
1.格局要求,实现不同类型个字的绘制函数。
地图数组及地图文件中各字符代表的意思如表4.2所示。
表4.2地图文件中数据与图像对照
数据
图像
宏
说明
0
黑格
MAP_BACK
用于填充图像
1
白墙
MAP_WHITEWALL
用于阻挡主角移动
2
蓝格
MAP_BL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 15 柯亚奇