APP下载

基于Android平台的飞机游戏的设计与开发

2016-02-27弋改珍

计算机技术与发展 2016年7期
关键词:碰撞检测敌机子弹

弋改珍,赵 丹

(咸阳师范学院 信息工程学院,陕西 咸阳 712000)

基于Android平台的飞机游戏的设计与开发

弋改珍,赵 丹

(咸阳师范学院 信息工程学院,陕西 咸阳 712000)

为了减轻人们的工作压力,缓解人们的紧张情绪,按照软件工程理论中软件的开发模型,在需求分析的基础上,概述了基于Android平台的飞机游戏需要设计与实现的基本功能,包括界面设计、动画设计、碰撞检测设计、音效设计、智能AI设计等模块;勾勒出游戏的数据流程。利用Eclipse作为开发平台,Java语言作为开发工具,SQLite为后台数据库,详细设计并实现游戏中的静态界面,动画界面,游戏环境的配置设置,人机对战,游戏中血量的减少与补充,等级升级,玩家战绩的存储等功能。经过测试,该游戏实现了飞机游戏的基本功能。

Android;游戏;智能飞机;碰撞检测

0 引 言

自2007年Android系统问世以来,智能手机处理数据的能力不断提高,人们对于手机的需求已经不仅仅只停留在通话之上,基于Android平台的软件开发正在迅猛发展[1-2]。随着手机硬件性能的提高和Android手机用户数量的增加,手机的功能不断增强,除了通话、发短信外,人们常常使用手机听音乐、看视频、玩游戏等,使得游戏成为手机的重要组成部分[3]。随着Android系统手机用户群数量不断增大,基于Android平台的游戏有着不可忽视的发展潜力[4]。

文中基于Android[5]系统,以Eclipse为开发平台,利用Java语言作为开发工具,以SQLite为数据库开发环境,设计并实现了人机交互式飞机游戏。游戏实现了界面设计、面板设计、人机对战、战绩保存等功能,满足了用户对单机游戏的需求。

1 需求分析与系统结构

1.1 需求分析

游戏运行过程中,良好的可操作性及友好的用户界面深受大众青睐,因此游戏中的图形设计和界面的美化至关重要[6-7]。玩家通过触摸手机屏幕操纵飞机在屏幕中上下左右移动,游戏刚开始时飞机会自动射击,只能发射普通的子弹。游戏中会出现5种不同的道具,如果拾取获得这些道具,飞机可以发射炸弹、加血、续命、加强火力、加速等。普通子弹的伤害值较小、炸弹伤害值较大。智能飞机控制的敌机群拥有BOSS和3种不同的轻型战机,这些装备的防御值、灵活性、火力强度都有所不同。玩家战机每击中一个目标,会获得相对应的分数,得分累积到一定程度,可升级为更高等级,游戏共设置10个等级。

在游戏的开始界面设置开始游戏、游戏设置、飞机战绩、退出游戏等功能。

游戏元素:飞机游戏中的飞机以及爆炸效果都是由多个具有细微差别的图片组合而成的,通过快速的顺序播放这些静态图片使其形成动画效果,让游戏画面具有更好的可观赏性[3]。

游戏场景:飞机游戏中的背景采用炫彩星系的图片并实现了缓慢滚动的效果,可以使玩家更好地融入到游戏氛围中。

游戏控制:采用玩家的手指触摸基于Android平台的智能手机的屏幕来实现,以便玩家更容易上手,增强了游戏的可操作性[8]。

1.2 总体结构

飞机游戏的总体设计分为界面设计、动画设计、碰撞检测、智能飞机设计、音效设计和数据库设计共六个模块[9]。

界面设计主要用于设计游戏的背景画面及界面元素的布局。动画设计用于设计游戏中的动态图形绘制以及爆炸效果的实现。碰撞检测用于检测玩家飞机与敌机、飞机与炮弹间的碰撞情况并做出相应的处理。智能飞机设计用于控制敌机的移动路径及发射炮弹。音效设计用于实现音效。数据库设计用于实现统计玩家获得分数的情况。

飞机游戏的总体结构设计图如图1所示。

图1 游戏总体设计结构图

2 游戏数据流程

玩家首先进入游戏启动界面,点击开始游戏按钮后进入游戏主页面,玩家通过触摸手机屏幕进行游戏操作。开始游戏后,首先对游戏资源进行初始化,之后玩家飞机会自动发射子弹。然后判断玩家飞机发射的子弹是否击中敌机,击中则获得相应的分数奖励,并继续发射子弹。如果玩家飞机未击中敌机,则判断玩家飞机是否被敌机击中,未被击中则继续发射子弹,被击中则会减少相应的血量直至为零游戏结束。

飞机游戏的数据流程如图2所示。

图2 数据流程图

3 核心功能模块的设计

3.1 静态界面设计

飞机游戏中主要有两个场景画面,即游戏启动界面和游戏主界面。游戏的启动界面是用来根据自己的个人喜好对游戏进行相应的设置。游戏主界面会显示出加载游戏资源并进行初始化。游戏中的背景采用炫彩星系的图片并实现了缓慢滚动的效果,可以使玩家更好地融入到游戏氛围中。

游戏开始界面和游戏主界面的背景是静态图片,对于静态图片的操作是通过使用Drawable[10]类实现的。Drawable类有很多子类,如BitmapDrawable是对位图的操作,ColorDrawable是对颜色的操作,ShapeDrawable是对各种形状的操作。Drawable对象是由两种方法进行实例化,即在工程的资源中保存图片文件和使用布局文件进行定义,通过布局文件AndroidMainfest.xml引用资源图标。加载飞机图片:

Android:icon="drawable/myplane" //myplane是飞机的图片

3.2 动画设计

飞机游戏中的飞机以及爆炸效果都是由多个具有细微差别的图片组合而成的,通过快速地顺序播放这些静态图片使其形成动画效果,让游戏画面具有更好的可观赏性。

创建一个继承与View[11]类自定义类,游戏开发中用的是(CanvasView),必须要有构造方法,可以使用public View(Context context),public View(Context context,AttributeSet attrs),public View(Context context,AttributeSet attrs,int defStyle)的其中一个;覆盖其中的onDraw()方法;使用其中Canvas对象在界面上面绘制图形;然后通过postInvalidate()或者invalidate()方法来调用onDraw()方法进行图形的重绘。

Android系统中使用View对象中的onDraw()方法显示图片。在每次重绘图片之前对层中对象的位置、形状、颜色或透明度进行设置,并设置一秒钟内重绘图片的次数,使人眼无法分辨图片间的切换。这样,动画效果能流畅地显示。

游戏在实现时创建了一个继承于View类的自定义类CanvasView,创建该类时,必须要有构造方法。覆盖View中的onDraw()方法;使用Canvas对象在界面上绘制图形,在设计动画时,通过postInvalidate()方法调用onDraw()方法重绘图形,以达到动画的目的。

3.3 碰撞检测的设计

碰撞检测算法有:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞等[12]。飞机游戏中碰撞检测的方法是将游戏中的实体(飞机、子弹、奖励物品等)近似地看作矩形,如果两个实体的矩形部分相互重合即发生碰撞。每个实体矩形维护三个参数:几何中心p(x,y)点、宽度w、高度h。对于两个实体(p(x1,y1),w1,h1)和(p(x2,y2),w2,h2),如果|x1-x2|≤(w1+w2)/2,则发生水平方向的碰撞;如果|y1-y2|≤(h1+h2)/2,则发生垂直方向的碰撞。

只要游戏中的实体对象(飞机、子弹、奖励物品等)的位置发生了变化,就需要执行碰撞检测算法。如果发生了碰撞,计算发生碰撞的方向,以确定碰撞后实体对象的状态,并输出结果。碰撞检测算法流程图如图3所示。

图3 碰撞检测流程图

3.4 智能飞机设计

由于游戏的模式是人机对战,也就是玩家控制的飞机和计算机控制的敌机群进行对战。每一个飞机可以做出四种动作:向上移动、向左移动、向右移动和发射子弹。智能飞机控制敌机群的策略有移动和射击两个动作。敌机移动:敌机在初始化位置开始发射子弹,并且朝着手机屏幕下方边界移动,移动可分为直线从上向下移动和左右移动,当左右移动时碰到左右边界(即越界)则会向相反方向移动。敌机移动:当电脑控制飞机会向前移动并周期性地发射炮弹,以20 ms为时间间隔。

电脑AI控制飞机战斗的策略:

敌机移动:敌机在初始化位置开始发射子弹,并且朝着手机屏幕下方边界移动,移动可分为直线从上往下走和左右游走,当左右游走时碰到左右边界(即越界),则会向相反方向游走。

敌机射击:当电脑控制飞机会向当前移动并周期性地发射炮弹,以20 ms为时间间隔。

策略流程如图4所示。

图4 电脑AI策略图

3.5 音效的设计

飞机游戏中的声音资源存放在res目录下,也会在游戏开始之前被加载到内存中。游戏实现时,声音读取的操作全部封装在SettingActivity[13]类中,在该类中定义一个背景音乐的方法onCheckedChanged,实现背景音乐的播放。核心代码如下:

public voidonCheckedChanged(CompoundButton buttonView, boolean isChecked) {

//TODO Auto-generated method stub

editor.putBoolean("backMusicFlag", isChecked);

editor.commit();

}

});

3.6 数据库的设计

Android提供了SQLiteOpenHelper[14]类创建一个数据库,只要继承SQLiteOpenHelper类,就可以轻松地创建数据库。SQLiteOpenHelper类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper的子类,至少需要实现三种方法:

构造函数,调用父类SQLiteOpenHelper的构造函数。该方法需要四个参数:上下文环境(例如,一个Activity),数据库名字,一个可选的游标工厂(通常是Null),一个代表你正在使用的数据库模型版本的整数。

onCreate()方法,需要一个SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据。

onUpgrade()方法,需要三个参数,一个SQLiteDatabase对象,一个旧的版本号和一个新的版本号。这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

根据开发应用程序的需要,Android提供的SQLiteOpenHelper类封装了创建和更新数据库使用的逻辑。飞机游戏在记录玩家战绩时,PlaneDBHelper子类继承了SQLiteOpenHelper类,实现了子类的三个函数:构造函数、onCreate()方法和onUpgrade方法。使用onCreate()方法创建记录玩家战绩的数据库,使用onUpgrade方法更新战绩数据库。

4 测 试

4.1 移植到手机测试

测试用例描述:该测试用例主要用于测试生成的游戏安装包是否可以成功安装到目标手机上。

测试流程:首先,生成游戏安装包;其次,将游戏安装包导入目标手机中;最后,点击游戏安装包进行安装。

4.2 游戏的启动与运行测试

测试过程描述:首先启动游戏,触摸屏幕进行游戏操作,玩家飞机发射子弹。该测试用例主要用于测试在进行游戏时,进入游戏启动界面和游戏主页面后游戏运行是否正常。

测试流程:首先,启动游戏;其次,用手触摸屏幕,点击“开始游戏按钮”;手触摸飞机使其发射子弹。测试结果如图5所示。

图5 游戏启动界面

4.3 爆炸效果测试

测试过程描述:通过进行游戏操作,玩家飞机被击中至血量为零。该测试用例主要用于测试在进行游戏时,玩家飞机被敌机击中且血量为零时的爆炸效果是否正常。

测试流程:玩家按照游戏规则执行游戏,使飞机发射子弹,子弹遇到敌机或敌机炮弹爆炸。测试结果如图6所示。

5 结束语

文中在需求分析的基础上,概述了基于Android平台的飞机游戏需要设计与实现的基本功能;勾勒出游戏的数据流程。利用Eclipse作为开发平台,Java语言作为开发工具,SQLite为后台数据库,详细设计并实现了游戏中的静态界面、动画、碰撞检测、智能飞机、背景音效和数据库等核心功能。游戏功能完善,运行流畅,完成了游戏升级10个等级的功能。

图6 子弹爆炸效果

[1] 贺 飞.智能手机操作系统在全球各地区份额调查报告[R/OL].2012-11-20.http://mobile.yesky.com /262/11693762.shtml.

[2] 董 昆.手机游戏的发展现状及特点[J].数字技术与应用,2011(1):120-120.

[3] 苏志同,石绍坤,李晋宏.手机游戏开发架构的研究[J].计算机工程与设计,2010,31(7):1631-1634.

[4] 任 众.中国移动游戏行业研究[D].成都:西南财经大学,2014.

[5] 陈 昱,江兰帆.基于Google Android平台的移动开发研究[J].福建电脑,2008,24(11):156-157.

[6] 赵明明.触屏手机游戏界面及交互设计受众体验分析[J].科技创新导报,2012(31):29-29.

[7] 赵 亮,张 维.基于Android技术的界面设计与研究[J].电脑知识与技术,2009,5(29):8183-8185.

[8] Darcey L,Conder S.Android移动开发一本就够[M].北京:人民邮电出版社,2013:359-372.

[9] 黎忠文,覃志东,王全宇,等.基于Android平台手机游戏引擎的设计与实现[J].计算机工程与设计,2014,35(1):119-124.

[10] Jackson W.Digital image transitions:using the transitiondrawable class[M]//Pro Android graphics.[s.l.]:Apress,2013:361-384.

[11] Jackson W.Digital video in Android:using the videoview class[M].[s.l.]:Apress,2013.

[12] 周贵志.碰撞检测算法[EB/OL].2015.http://blog.csdn.net/jjwwmlp456/article/details/40679879.

[13] Cook D.Learning setting-generalized activity models for smart spaces[J].IEEE Intelligent Systems,2010,27(1):32-38.

[14] Feng X L,Suo Z H,Wei Y T,et al.The financial management system based on Android and SQLite[J].Applied Mechanics & Materials,2013,462-463:974-977.

Design and Development of Plane-game Based on Android Platform

YI Gai-zhen,ZHAO Dan

(School of Information & Engineering,Xianyang Normal University,Xianyang 712000,China)

In order to reduce people’s work pressure and relieve people’s tension,in terms of development models of the software in software engineering theory,based on the requirement analysis,function structure have been described for plane-game based on Android,including interface design,animation design,collision detection design,sound effect and intelligence AI design module and so on.The data flow has been drawn.The game uses Eclipse as development platform,Java language as tool,and SQLite as background database,the function has been designed and realized for the static interface and animation interface,setting the configuration of the situation of game,human-computer fighting,the amount of blood reducing and supplying,upgrading,and storing the score for player in detail.After the test,the game has realized the basic function of a plane game.

Android;game;intelligent plane;collision detection

2015-10-10

2016-01-19

时间:2016-05-25

陕西省科技计划项目(2013JM8037);陕西省教育科研项目(14JK1796);咸阳师范学院科研项目(12XSYK067)

弋改珍(1969-),女,硕士,研究方向为无线网络和网络安全。

http://www.cnki.net/kcms/detail/61.1450.TP.20160525.1711.070.html

TP39

A

1673-629X(2016)07-0183-04

10.3969/j.issn.1673-629X.2016.07.039

猜你喜欢

碰撞检测敌机子弹
基于动力学补偿的机器人电机力矩误差碰撞检测
冲着敌机,开炮!——M1939式37毫米高射炮
全新预测碰撞检测系统
基于BIM的铁路信号室外设备布置与碰撞检测方法
三颗子弹
Karma:让子弹飞一会儿
子弹
基于Virtools的虚拟灭火系统碰撞检测设计与实现
单兵扛导弹
敌机不支,腾空逃去