摘 要:益智动作射击游戏《愤怒的小鸟》(AngryBirds)是RovioMobile开发的一款极为有趣的小游戏,至今没有独立的编辑器进行关卡编辑.根据软件开发的一般方法,结合MFC技术和软件工程实践经验,对这款《愤怒的小鸟》关卡编辑器提出一种有效的设计和实现的方法.
关 键 词:MFC;关卡编辑器;软件工程;设计与实现
中图分类号:TP311.52文献标识码:A文章编号:16727800(2011)012008602
基金项目:中南民族大学学生科研基金资助(KYCX110415Z)
作者简介:秦翊(1990-),男,广西柳州人,中南民族大学计算机学院本科生,研究方向为软件工程;莫威英(1991-),男,广西隆林人,中南民族大学计算机学院本科生,研究方向为软件工程;王新年(1969-),男,湖北孝感人,博士,中南民族大学计算机学院讲师,研究方向为软件工程.
0引言
益智动作射击游戏《愤怒的小鸟》(AngryBirds)是RovioMobile开发的一款极为有趣的小游戏.首发于苹果IOS操作系统平台,马上取得了巨大的影响,受到了广大游戏爱好者的一致好评.2011年1月6日,愤怒的小鸟正式发布PC版.与此同时,国内最大的汉化论坛3DM发布了该游戏的中文版本.2011年1月13日,在国内著名的单机游戏网《游民星空》发布了《愤怒的小鸟》地图编辑器.该款编辑器只是一个基本的UI,是方便DIY用户访问的在线编辑器,以达到编辑关卡的目的,且在线编辑器采用最新的HTML5技术开发的,需要最新版本的IE9,FireFox或者chrome等浏览器的支持;这对广大用户来说,有一定的局限性.因此,开发一款独立的,可在不联网状态下进行关卡编辑的软件就显得有必要了.
1需求分析
本软件的需要非常明确,主要是通过图形化的界面,对新建的或者已有的关卡进行编辑,设计,再导入游戏中,使得玩家能够玩自己设计的关卡,更可以分享给其他玩家.具体的说,分为以下几个方面:①新建一个新的关卡,通过已有的游戏素材来对关卡进行设计,编辑;②打开并写入已有的关卡文件,图形化该关卡,对该关卡进行二次的设计,编辑;③对于素材的细节处理.可以用鼠标直接对图片素材进行拖拽,可旋转图片,软件内部会根据图片的位置进行记录,包括:坐标,角度,等属性;④对于任意两个图片素材,可进行“相连”的快捷设置,使两个图片结合在一起;⑤可打开关卡的源文件,查看源文件的相关数据;⑥编辑完成后,可选择保存新的关卡文件到备份文件夹内(由本软件新建),再由“一键导入”功能将设计完成后的关卡文件写入游戏的关卡文件夹中,替代原有的相对应的关卡文件;⑦要保证本程序和《愤怒的小鸟》游戏包括一个备份的关卡文件夹Declevels可执行文件在同一目录下.
存储策略决定了数据处理对象的结果,同时也对数据处理方式有着重要的影响.例如,关卡文件等于{关卡名称,关卡内容},此项的两个属性均保存在相应的字符串中.图片素材等于{素材类型,素材定义,X坐标,Y坐标,角度},通过设计一个类来保存这些相关的信息.素材类型,素材定义,保存于字符串中,X坐标,Y坐标,角度保存于高精度的浮点类型.
2概要设计
采用软件工程中基于用户界面(UI)驱动的开发方式,首先设计出UI基础界面,然后考虑设计流程及相应的数据格式.
(1)UI基础设计.如图1所示.
(2)设计概念及流程.如图2所示.
图1基本的UI界面图2设计流程
(3)程序文件的组织形式
运用MFC面向对象的良好机制,类视图,文件分为头文件和源文件,以及资源文件,如下所示.
类:
CAboutDlg//“关于”对话框类
CAngryBirdMakerApp//应用程序类
CAngryBirdMakerDlg//主对话框类
CEditDialog//查看源文件对话框类
Item//自己设计的物品类
头文件:
AngryBirdMaker.h
AngryBirdMakerDlg.h
EditDialog.h
Item.h
Resource.h
Stdafx.h
Targetver.h
源文件:
AngryBirdMaker.cpp
AngryBirdMakerDlg.cpp
EditDialog.cpp
Item.cpp
Stdafx.cpp
资源文件:
AngryBirdMaker.rc
3详细设计
程序的主界面就是一个对话框,该对话框由一个对话框类进行管理.另外,还设计了一个Item类,对图片素材进行管理和操作.
(1)UI设计.如图1所示,软件的UI格局大致如此.界面的上部分为图片素材区域.左下部分为一个树形控件,显示用户可进行编辑的关卡.树形控件的旁边为“读取关卡文”“保存关卡文件”“查看关卡文件”按钮.右下是主要的关卡编辑区域,用户就是通过在操作图片素材,在这个区域对关卡进行设计,编辑工作.在关卡编辑区域和图片素材区域之间是显示当前用户所选择的素材的一些相关信息.还包括了旋转素材的按钮.
(2)素材准备.所有的素材均来自于《愤怒的小鸟》游戏里面的文件夹,通过图像处理,对每个素材进行提取,并规定大小为30*30.
(3)IO功能与操作.由于关卡文件实际为lua的文件,lua是一种脚本语言,当游戏执行相应的关卡的时候,游戏就会读取该文件.所以可以通过修改原有的游戏关卡文件来达到运行自己设计的关卡的目的.本程序可以遍历游戏的关卡文件夹,获取所有的关卡文件名,并显示在一个树形控件中.但由于不能实现对原始关卡文件进行读取.所以,我们可以事先对这些文件解密,解密过的所有关卡文件都存在一个文件夹Declevels内,只要保证这个文件夹和本程序在一个目录下,就能通过读取该解密文件来达到打开相应关卡文件的目的.而写入操作则可以直接覆盖掉游戏的原始关卡文件,当然,我们可以对原始的关卡文件进行备份.
(4)图形操作.这是本程序的核心功能,也是难点部分.操作对象为用户所选择的图片素材,可进行的操作有:拖拽,旋转,连结两个物品.这些都可以通过windowsAPI的GDI相关函数完成.要完成这些功能,设计一个C++Item类,该类封装了素材类型,素材定义,X坐标,Y坐标,角度属性,还封装了图形的显示,拖拽,旋转,连结等操作的方法.
该类的接口为:
classItem{
private:
CStringm_strName,//物品名称
CStringm_strCategory,//物品类别
doublem_dCx,//X坐标
doublem_dCy,//Y坐标
doublem_dAngle,//角度
public:
Item(),//默认构造函数
Item(const&Item),//拷贝构造函数
~Item(),//析构函数
boolDrag(),//拖拽操作
boolSpin(),//旋转操作
boolConnectWith(const&Item),//连接物品操作
},
(5)使用到的主要算法.遍历游戏原始关卡文件夹的时候需要用的递归算法,获取每个文件的文件名.读取关卡文件时,需要从字符流中识别出特定类别的物品,这就要用到查找字符串的一些方法.在这里,我们选择的是KMP算法,来对字符串进行定位,查找,此算法会封装在住对话框类中.
4结束语
在程序的实现过程中,碰到过关卡文件的解密问题:《愤怒的小鸟》游戏使用lua语言进行开发,但是包括关卡文件在内都是加密的.由于对此方面的了解较少,不能独立地对文件进行解密,只能使用解密软件先对关卡文件进行解密,得到的全部关卡文件先存放于与本软件相关联的一个备份文件夹中.对关卡文件的读取实际上就是从这个备份文件进行读取,但是写入可以覆盖掉原始游戏的关卡文件.通过此次软件的开发,使得项目团队中的每个人都得到了较大的提高,特别是在合作协调能力上,还有相关的技术使用上.特别是熟悉了MFC技术及其相关的编程技巧,熟悉了VS2008平台的运用,并且该程序的实现为游戏辅助程序设计打下了良好的基础.