弋改珍,趙 丹
(咸陽師范學院 信息工程學院,陜西 咸陽 712000)
基于Android平臺的飛機游戲的設計與開發
弋改珍,趙 丹
(咸陽師范學院 信息工程學院,陜西 咸陽 712000)
為了減輕人們的工作壓力,緩解人們的緊張情緒,按照軟件工程理論中軟件的開發模型,在需求分析的基礎上,概述了基于Android平臺的飛機游戲需要設計與實現的基本功能,包括界面設計、動畫設計、碰撞檢測設計、音效設計、智能AI設計等模塊;勾勒出游戲的數據流程。利用Eclipse作為開發平臺,Java語言作為開發工具,SQLite為后臺數據庫,詳細設計并實現游戲中的靜態界面,動畫界面,游戲環境的配置設置,人機對戰,游戲中血量的減少與補充,等級升級,玩家戰績的存儲等功能。經過測試,該游戲實現了飛機游戲的基本功能。
Android;游戲;智能飛機;碰撞檢測
自2007年Android系統問世以來,智能手機處理數據的能力不斷提高,人們對于手機的需求已經不僅僅只停留在通話之上,基于Android平臺的軟件開發正在迅猛發展[1-2]。隨著手機硬件性能的提高和Android手機用戶數量的增加,手機的功能不斷增強,除了通話、發短信外,人們常常使用手機聽音樂、看視頻、玩游戲等,使得游戲成為手機的重要組成部分[3]。隨著Android系統手機用戶群數量不斷增大,基于Android平臺的游戲有著不可忽視的發展潛力[4]。
文中基于Android[5]系統,以Eclipse為開發平臺,利用Java語言作為開發工具,以SQLite為數據庫開發環境,設計并實現了人機交互式飛機游戲。游戲實現了界面設計、面板設計、人機對戰、戰績保存等功能,滿足了用戶對單機游戲的需求。
1.1 需求分析
游戲運行過程中,良好的可操作性及友好的用戶界面深受大眾青睞,因此游戲中的圖形設計和界面的美化至關重要[6-7]。玩家通過觸摸手機屏幕操縱飛機在屏幕中上下左右移動,游戲剛開始時飛機會自動射擊,只能發射普通的子彈。游戲中會出現5種不同的道具,如果拾取獲得這些道具,飛機可以發射炸彈、加血、續命、加強火力、加速等。普通子彈的傷害值較小、炸彈傷害值較大。智能飛機控制的敵機群擁有BOSS和3種不同的輕型戰機,這些裝備的防御值、靈活性、火力強度都有所不同。玩家戰機每擊中一個目標,會獲得相對應的分數,得分累積到一定程度,可升級為更高等級,游戲共設置10個等級。
在游戲的開始界面設置開始游戲、游戲設置、飛機戰績、退出游戲等功能。
游戲元素:飛機游戲中的飛機以及爆炸效果都是由多個具有細微差別的圖片組合而成的,通過快速的順序播放這些靜態圖片使其形成動畫效果,讓游戲畫面具有更好的可觀賞性[3]。
游戲場景:飛機游戲中的背景采用炫彩星系的圖片并實現了緩慢滾動的效果,可以使玩家更好地融入到游戲氛圍中。
游戲控制:采用玩家的手指觸摸基于Android平臺的智能手機的屏幕來實現,以便玩家更容易上手,增強了游戲的可操作性[8]。
1.2 總體結構
飛機游戲的總體設計分為界面設計、動畫設計、碰撞檢測、智能飛機設計、音效設計和數據庫設計共六個模塊[9]。
界面設計主要用于設計游戲的背景畫面及界面元素的布局。動畫設計用于設計游戲中的動態圖形繪制以及爆炸效果的實現。碰撞檢測用于檢測玩家飛機與敵機、飛機與炮彈間的碰撞情況并做出相應的處理。智能飛機設計用于控制敵機的移動路徑及發射炮彈。音效設計用于實現音效。數據庫設計用于實現統計玩家獲得分數的情況。
飛機游戲的總體結構設計圖如圖1所示。

圖1 游戲總體設計結構圖
玩家首先進入游戲啟動界面,點擊開始游戲按鈕后進入游戲主頁面,玩家通過觸摸手機屏幕進行游戲操作。開始游戲后,首先對游戲資源進行初始化,之后玩家飛機會自動發射子彈。然后判斷玩家飛機發射的子彈是否擊中敵機,擊中則獲得相應的分數獎勵,并繼續發射子彈。如果玩家飛機未擊中敵機,則判斷玩家飛機是否被敵機擊中,未被擊中則繼續發射子彈,被擊中則會減少相應的血量直至為零游戲結束。
飛機游戲的數據流程如圖2所示。

圖2 數據流程圖
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.1 移植到手機測試
測試用例描述:該測試用例主要用于測試生成的游戲安裝包是否可以成功安裝到目標手機上。
測試流程:首先,生成游戲安裝包;其次,將游戲安裝包導入目標手機中;最后,點擊游戲安裝包進行安裝。
4.2 游戲的啟動與運行測試
測試過程描述:首先啟動游戲,觸摸屏幕進行游戲操作,玩家飛機發射子彈。該測試用例主要用于測試在進行游戲時,進入游戲啟動界面和游戲主頁面后游戲運行是否正常。
測試流程:首先,啟動游戲;其次,用手觸摸屏幕,點擊“開始游戲按鈕”;手觸摸飛機使其發射子彈。測試結果如圖5所示。

圖5 游戲啟動界面
4.3 爆炸效果測試
測試過程描述:通過進行游戲操作,玩家飛機被擊中至血量為零。該測試用例主要用于測試在進行游戲時,玩家飛機被敵機擊中且血量為零時的爆炸效果是否正常。
測試流程:玩家按照游戲規則執行游戲,使飛機發射子彈,子彈遇到敵機或敵機炮彈爆炸。測試結果如圖6所示。
文中在需求分析的基礎上,概述了基于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