版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)設計說明書</b></p><p> 基于Android系統(tǒng)的打氣球游戲的設計與實現</p><p> 學生姓名: 學號: </p><p> 學 院: </p><p>
2、 專 業(yè): </p><p> 指導教師: </p><p><b> 2012年 16月</b></p><p> 基于Android系統(tǒng)的打氣球游戲的設計與實現</p><p><b&
3、gt; 摘要</b></p><p> 隨著智能手機一步步走進普通人的生活,它將成為人們獲取信息的主要設備。因此,手機的娛樂應用服務將會有很大的發(fā)展空間,游戲也是其中之一[3]。本系統(tǒng)主要是實現基于Android的打氣球,打氣球是一款來自紅白機時期就非常盛行的游戲,其設計目的是訓練人的應變能力。打氣球這是一款簡單的射擊類游戲,通過主菜單界面選擇進入不同模式進行游戲。游戲中有幾種不同顏色的氣球通過按
4、屏幕發(fā)射弓箭射擊氣球,射擊不同顏色的氣球會得到不同的分數,當時間達到一定的時候會根據所得分數判斷輸贏,從而進入勝利或失敗界面。設計制作射氣球游戲的目的在于主要實現一套Android游戲開發(fā)的解決方案,解決目前在Android游戲開發(fā)中所面臨的幾大問題。主要有游戲的關卡切換,游戲地圖數據結構的實現、應用多種手機內置傳感器進行游戲控制、游戲動畫的實現、基于圖形的碰撞檢測、數據在手機系統(tǒng)和實現。解決這些在Android游戲開發(fā)中所共同面臨的問
5、題,對于Android游戲開發(fā)效率與Android游戲的質量有著極大的幫助作用。隨著計算機游戲的發(fā)展,很多編程愛好者基于該游戲的思想開發(fā)出了各種版本、各種類型的飛機游戲。這其中也包括很多手機版本的實現</p><p> Design and implementation of the Ace game based on Android</p><p><b> Summary
6、</b></p><p> As smartphones step into the lives of ordinary people , it will become the primary device for people to obtain information . Therefore , mobile entertainment applications will have much r
7、oom for development , the game is one of them . The system is Android -based ace , aircraft from World War II is a very prevalent during the NES game , which is designed to train people 's resilience. This is a class
8、ic aircraft flight shooting game , beautiful brilliant picture , the overall environment is mainl</p><p> This paper first discusses the background and status of android system , and then a brief introducti
9、on to the technology and analysis for android android , and describes the structure of android applications. In program development , designing a good game with a first class frame, and then realize the function of each
10、class will be realized in accordance with the code and write .</p><p> Keywords:android games, android aircraft ace, smartphones</p><p><b> 目錄</b></p><p><b> 1
11、 引言1</b></p><p> 1.1 系統(tǒng)簡介1</p><p> 1.2 Android游戲的研究現狀1</p><p> 1.3 關于飛機大戰(zhàn)游戲設計2</p><p> 1.3.1基本思想2</p><p> 1.3.2基本結構3</p><p&g
12、t; 1.3.3適用條件3</p><p> 2 開發(fā)環(huán)境及相關技術4</p><p> 2.1 開發(fā)環(huán)境4</p><p> 2.2 相關技術與工具4</p><p> 2.2.1 Eclipse4</p><p> 2.2.2 JDK4</p><p> 2.
13、2.3 ADT4</p><p> 2.2.4碰撞檢測技術5</p><p> 2.2.5 SurfaceView5</p><p><b> 3 需求分析6</b></p><p> 3.1 系統(tǒng)功能需求6</p><p> 3.1.1 業(yè)務需求分析7</p&g
14、t;<p> 3.1.2 用戶需求分析7</p><p> 3.1.2 功能需求分析7</p><p> 3.2 功能劃分概圖9</p><p> 4 概要設計10</p><p> 4.1 總體設計10</p><p> 4.1.1 系統(tǒng)流程10</p>
15、<p> 4.1.2 系統(tǒng)詳細結構11</p><p> 4.2 模塊設計概述12</p><p> 4.2.1 開場動畫模塊12</p><p> 4.2.2 道具制造模塊12</p><p> 4.2.3 游戲操作模塊13</p><p> 4.2.4 分數統(tǒng)計模塊1
16、3</p><p> 4.3 數據結構及接口定義14</p><p> 5 詳細設計20</p><p> 5.1 開場動畫模塊20</p><p> 5.1.1 問題描述20</p><p> 5.1.2 問題分析20</p><p> 5.1.3 實現方法
17、21</p><p> 5.2 道具制造模塊24</p><p> 5.2.1 問題描述24</p><p> 5.2.2 問題分析24</p><p> 5.2.3 實現方法24</p><p> 5.3 游戲操作模塊28</p><p> 5.3.1 問題描
18、述28</p><p> 5.3.2 問題分析28</p><p> 5.3.3 實現方法28</p><p> 5.3 分數統(tǒng)計模塊35</p><p> 5.3.1 問題描述35</p><p> 5.3.2 問題分析35</p><p> 5.3.3 實
19、現方法35</p><p> 6 系統(tǒng)測試37</p><p> 6.1 軟件測試的原則37</p><p> 6.2 測試的方法37</p><p> 6.3 本系統(tǒng)的測試38</p><p> 6.3.1 測試用例的設計38</p><p> 6.3.2
20、測試用例總結43</p><p><b> 7 結論44</b></p><p><b> 參考文獻45</b></p><p><b> 致謝46</b></p><p><b> 1 引言</b></p><p&
21、gt;<b> 1.1 系統(tǒng)簡介</b></p><p> 隨著社會的發(fā)展,人們的工作壓力與日俱增。與此同時相應的減壓放松的方式也慢慢發(fā)生了變化。人們更趨于在家或者工作閑余時間以電子游戲的方式達到娛樂的目的。一次,也就意味著,電子游戲的利潤空間和發(fā)展空間是十分寬廣的[3]。</p><p> 飛機大戰(zhàn)是一款來自紅白機時期就非常盛行的游戲,其設計目的是訓練人的應
22、變能力。飛機大戰(zhàn)這是一款經典飛行射擊類游戲,精美絢麗的畫面,整體環(huán)境主要還是圍繞太空為主,高保真的音效,為玩家呈現一場不一樣射擊體驗。簡單的觸屏操作,觸屏按住隨意一個地方,左右移動,便可自動攻擊敵人,上下移動亦可躲避強敵。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機,向敵人的總部發(fā)起了沖擊。</p><p> 本游戲利用Android開發(fā)語言,完成一個基于Android的飛行戰(zhàn)斗類游戲開發(fā)。在該游戲中,加入對應的游戲策
23、略模型,游戲聲音,開場動畫,計分分,關卡選擇,等功能。創(chuàng)建友好的UI界面,較強的游戲可玩性,操作的友好性。并利用游戲設計原則,提高游戲的智能,增強游戲的吸引力[3]。 </p><p> 1.2 Android游戲的研究現狀</p><p> Android一詞本意是指"機器人",同時也指Google于2007年11月5日推出的開源手機操作系統(tǒng)。Android基于
24、Linux平臺,由操作系統(tǒng)、中間件、用戶界面和應用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件。它是由一個由 30 多家科技公司和手機公司組成的開放手機聯(lián)盟共同研發(fā),將大大降低新型手機設備的研發(fā)成本,完全整合的全移動功能性產品成為"開放手機聯(lián)盟"的最終目標[5]。</p><p> 自2007年Google發(fā)布Android系統(tǒng)1.0之后,各大手機生產廠商
25、紛紛將目光投向了最具發(fā)展?jié)摿Φ腁ndroid系統(tǒng),并陸續(xù)推出了各種品牌的搭載Android系統(tǒng)的智能手機[15]。時隔四年,Android手機在手機市場中占的市場份額正以非常迅猛的速度上升:2010年市場份額:Symbian 36.6%、Android 25.5%、iPhone 16.7、windows Mobile 2.8%、linux 2.1%。Nokia的Symbian系統(tǒng)在Android系統(tǒng)的沖擊下,正在從手機市場中的王者慢慢
26、被擠下來。在未來的幾年內,Android手機必定會占據手機市場的主要份額,所以在這種形式下,Android應用的前景也必定是前景一片大好。 現如今Android的市場份額占總體智能手機市場份額的50%以上,相對于前幾年來說,其發(fā)展勢頭勢不可擋。以至于越來越多的開發(fā)商加入了Android應用開發(fā)的行列[7]。在2010年,Android市場份額僅占4.7%左右,并其市場只有不到20000個應用程序。但在2011年初,這個數字就已經超過了2
27、5萬字大關。而隨著越來越多的應用的誕生,由于其</p><p> 現如今,電子游戲已慢慢滲透進人們生活中,并在扮演著越來越重的角色??梢哉f,隨著它的迅猛發(fā)展,現今的電子游戲已經不僅僅是一種娛樂,而是形成了一種文化現象。隨著社會的發(fā)展,人們的工作壓力與日俱增。與此同時相應的減壓放松的方式也慢慢發(fā)生了變化[7]。人們更趨于在家或者工作閑余時間以電子游戲的方式達到娛樂的目的。一次,也就意味著,電子游戲的利潤空間和發(fā)展
28、空間是十分寬廣的。而作為現代人不可或缺,隨身攜帶的手機設備,則作為一類游戲的載體,有著廣泛的發(fā)展空間。而Android作為主流智能手機系統(tǒng)之一,研究和開發(fā)相應應用游戲是時代發(fā)展的趨勢[13]。</p><p> 1.3 關于飛機大戰(zhàn)游戲設計</p><p><b> 1.3.1基本思想</b></p><p> 飛機大戰(zhàn)這是一款經典飛行
29、射擊類游戲,精美絢麗的畫面,整體環(huán)境主要還是圍繞太空為主,高保真的音效,為玩家呈現一場不一樣射擊體驗。簡單的觸屏操作,觸屏按住隨意一個地方,左右移動,便可自動攻擊敵人,上下移動亦可躲避強敵。玩家在游戲中要做的就是駕駛著最新戰(zhàn)機,向敵人的總部發(fā)起了沖擊。這就要求玩家巧妙的運用有限的空間和通道,合理的安排飛機的位置才可能完成任務。</p><p><b> 1.3.2基本結構</b></
30、p><p> 本游戲開發(fā)設計共分為游戲開場動畫、聲音模塊、游戲進行模塊、道具制造模塊、分數統(tǒng)計模塊五個模塊進行設計開發(fā)。通過對Base界面類的繼承實現了游戲開場動畫以及游戲資源文件的加載,當獲取用戶點擊(單指)游戲開始時,游戲進入主界面,此時通過工廠類生產出飛機以及敵機,用戶開始控制飛機進行游戲。該設計充分運用java面向對象的原理將所有的飛機建立不同的類用以實現。并且根據玩家的進度適當的出現道具,或是增強玩家飛機
31、的子彈能力,或是贈予玩家刷屏炸彈,并實時對玩家計分。當玩家駕駛飛機死亡后,將出現游戲統(tǒng)計界面,對玩家的信息進行統(tǒng)計。以此鼓勵玩家</p><p><b> 1.3.3適用條件</b></p><p> 本次游戲設計可以在Android4.0版本以上的手機運行,能自適應Android手機的各種分辨率。創(chuàng)建友好的UI界面,較強的游戲可玩性,操作的友好性。并利用游戲設計
32、原則,提高游戲的智能,增強游戲的吸引力。由于游戲設計之處考慮過使用cocos2d,但由于相關文檔的困乏,并未采用。因此軟件運行不如帶引擎的游戲運行的流暢,并可能出現不跟手的現象,實屬正常。</p><p> 2 開發(fā)環(huán)境及相關技術</p><p><b> 2.1 開發(fā)環(huán)境</b></p><p> 硬件環(huán)境:Intel Core i
33、3 2100 MHz + 4GB RAM</p><p> 軟件環(huán)境:Windows 7+Eclipse+JDK+ ADT</p><p> 2.2 相關技術與工具</p><p> 2.2.1 Eclipse</p><p> Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語言開發(fā),通過安裝不同的插
34、件Eclipse可以支持不同的計算機語言,比如C++和Python等開發(fā)工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。</p><p><b> 2.2.2 JDK</b></p><p> JDK(Java Developme
35、nt Kit,Java開發(fā)包,Java開發(fā)工具)是一個寫Java的applet和應用程序的程序開發(fā)環(huán)境。它由一個處于操作系統(tǒng)層之上的運行環(huán)境還有開發(fā)者編譯,調試和運行用Java語言寫的applet和應用程序所需的工具組成。JDK(Java Development Kit)是Sun Microsystems針對Java開發(fā)員的產品。自從Java推出以來,JDK已經成為使用最廣泛的Java SDK(Software development
36、kit)。JDK由一個標準類庫和一組建立,測試及建立文檔的Java實用程序組成。其核心Java API是一些預定義的類庫,開發(fā)人員需要用這些類來訪問Java語言的功能。Java API包括一些重要的語言結構以及基本圖形,網絡和文件I/O。一般來說,Java API的非I/O部分對于運行Java的所有平臺是相同的,而I/O部分則僅在通用Java環(huán)境中實現[1]。</p><p><b> 2.2.3 A
37、DT</b></p><p> 即Android Development Tools,在Eclipse編譯IDE環(huán)境中,需安裝ADT (Android Developer Tools)Plug-in,這是Android在Eclipse上的開發(fā)工具。目前Android開發(fā)所用的開發(fā)工具是Eclipse,在Eclipse編譯IDE環(huán)境中,安裝ADT,為Android開發(fā)提供開發(fā)工具的升級或者變更,簡單理
38、解為在Eclipse下開發(fā)工具的升級下載工具[2]。</p><p> 其中還包括SDK(Software Development Kit),一般是一些被軟件工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應用軟件的開發(fā)工具的集合。在Android中,它為開發(fā)者提供了庫文件以及其它開發(fā)所用到的工具。簡單理解為開發(fā)工具包集合,是整體開發(fā)中所用到的工具包,如果你不用Eclipse作為你的開發(fā)工具,你就不
39、需要下載ADT,只下載SDK即可開發(fā)。</p><p> 2.2.4 碰撞檢測技術</p><p> 碰撞檢測在2D/3D游戲中至關重要,好的碰撞檢測要求人物在場景中可以平滑移動,遇到一定高度內的臺階可以自動上去,而過高的臺階則把人擋住,遇到斜率較小的斜坡可以上去,斜率過大則把人擋住,在各種前進方向被擋住的情況下都要盡可能地讓人物沿合理的方向滑動而不是被迫停下。在滿足這些要求的同時還要
40、做到足夠精確和穩(wěn)定,防止人物在特殊情況下穿墻而掉出場景[7]。</p><p> 2.2.5 SurfaceView</p><p> 可以直接從內存或者DMA等硬件接口取得圖像數據,是個非常重要的繪圖容器。它的特性是:可以在主線程之外的線程中向屏幕繪圖上。這樣可以避免畫圖任務繁重的時候造成主線程阻塞,從而提高了程序的反應速度。在游戲開發(fā)中多用到SurfaceView,游戲中的背景、人
41、物、動畫等等盡量在畫布Canvas中畫出。</p><p><b> 3 需求分析</b></p><p> 3.1 系統(tǒng)功能需求</p><p> 3.1.1 業(yè)務需求分析</p><p> 雖然現在市面上存在著各種各樣的游戲版本,可是飛機大戰(zhàn)其市場還是相當大的,比如微信飛機大戰(zhàn)。因為它的特殊在于它能吸引
42、人更深入,愛不釋手.隨著游戲速度不斷加快,其刺激性也更強.可以說該游戲的優(yōu)勢在于它的簡單易行,不論是手機,還是小游戲機,都能很快順利的運行.對于在外忙碌的人,不可能花費大量時間在娛樂上,大型游戲是行不通的,這樣的小游戲剛好迎合了他們的需求. </p><p> 飛機大戰(zhàn)游戲基于JAVA平臺編寫,采用Android技術開發(fā)的一款手機游戲。手機游戲程序是一項精度要求很高的程序系統(tǒng),因為其代碼利用率很高。一個實時運
43、行的最終作品,每秒都會運行成千上萬行程序,繪圖事件、鍵盤事件都會以極高的頻率在后臺等待響應,若有絲毫的差別都將很容易導致程序在運行不久后可能出現嚴重錯誤,甚至死循環(huán)。因此,其邏輯設計應當相當嚴謹,需將所有可能發(fā)生的事件及意外情況考慮在設計中。JAVA是基于虛擬機的半解釋型編譯系統(tǒng),其執(zhí)行效率較C++等完全編譯后的程序會低很多,程序如果不進行精簡和優(yōu)化,將可能導致運行的不流暢。游戲的結束、開始、動態(tài)信息畫面作為構成一個程序都是必不可少的重
44、要部分。良好的用戶界面更是吸引用戶的硬指標,相關的美術構圖和人性化設置也需要有一定的考慮。 </p><p> 3.1.2 用戶需求分析</p><p> 用戶需求分析指在系統(tǒng)設計之前和設計、開發(fā)過程中對用戶需求所作的調查與分析,是系統(tǒng)設計、系統(tǒng)完善和系統(tǒng)維護的依據。一個的好的用戶需求分析可以讓系統(tǒng)變的更加完善,能貼合玩家的真實需求,從而達到一個游戲與玩家完全契合的水平。</p
45、><p> 本項目中用戶的需求如下圖所示: </p><p> 圖 3.1 用戶需求用例圖</p><p> 游戲開發(fā)成功后,最終用戶為各個年齡段的人群,用戶范圍相當廣泛。但是用戶對軟件產品也有一定的要求: </p><p><b> (1)簡單易學 </b></p><p> 時間不管對于
46、誰來說都是寶貴的,用戶不會愿意花大量時間去學習使用一款 軟件。一款軟件如果操作界面不友好,讓用戶難以上手使用,那就說明這款軟件開發(fā)得不夠成功,從而失去大量的用戶。所以本項目必須擁有良好的交互界面,讓用戶安裝之后就能進行游戲。 </p><p><b> ?。?)運行穩(wěn)定 </b></p><p> 一款軟件設計得不夠好,那么就有可能在運行的時候出現一些不可預
47、料的錯誤從而造成軟件崩潰。如果用戶正在游戲突然軟件崩潰了,無疑會讓用戶感到非常不舒服,有可能就把軟件給卸載了,這樣也會失去很多用戶。 </p><p><b> ?。?)操作簡便 </b></p><p> 用戶不是程序員,他們不知道程序的內部邏輯。所以程序員必須提供給用戶便捷的操作接口來供用戶操作,靈活便捷的操作性直接影響了一款軟件的好壞。軟件是做給用戶使用的,所
48、以一切都要站在用戶的角度來看問題。</p><p> 3.1.3 功能需求分析</p><p> 本項目是一個運行在Android手機上的游戲,玩家可以從手機觸屏開始游戲,操控游戲,結束游戲; 玩家開始游戲后,在手機屏幕上繪制出一架玩家飛機以及多架敵機,玩家飛機可以響應用戶的手指,隨手指移動,并不斷的發(fā)出子彈攻擊敵機,敵機在屏幕上段隨機出現,并沿著垂直線以一定的速度下落至屏幕下端,如
49、果敵機碰上玩家飛機,那么游戲結束。同時生產一個太空幕布不斷的下移。當玩家飛機的子彈碰上敵機時會根據敵機類型以及被攻擊次數來選擇是否墜毀,不論是玩家飛機墜毀或者敵機墜毀,都會出現爆炸畫面。 當游戲結束后,顯示并保存玩家在游戲中所獲得的分數。 </p><p> 本Android飛機大戰(zhàn)游戲,總體分為以下幾個四模塊:</p><p><b> 開場動畫模塊</b>&l
50、t;/p><p> 本模塊用于用戶登陸游戲的設計,該模塊具有初始畫布功能,初始化聲音功能,同時保持屏幕全屏并且屏幕常亮,能繪制飛機的過場動畫以及開始游戲和退出游戲按鈕,通過Java線程及Android線程知識,能通過不同的按鈕點擊返回不同的參數用以判斷是進入游戲主界面還是退出游戲,如果沒有操作的話,則一直停留在此界面,并且不停的播放飛機大戰(zhàn)的過場動畫,該模塊設計精良,界面美觀大方,飛機過場動畫流暢。</p&g
51、t;<p><b> 道具制造模塊</b></p><p> 本模塊用于在用戶進入游戲主界面時,制造出游戲運行時所需的道具,這些道具包括大型敵機、BOSS子彈、BOSS敵機、中型敵機、導彈物品、玩家飛機的子彈(兩種威力)、玩家飛機、小型敵機。該模塊為這些道具初始化了圖片資源以及繪圖方法,并且定義了每個道具的邏輯屬性,以方便游戲操作模塊、分數統(tǒng)計模塊的調用。該模塊充分運用ja
52、va面向對象的知識,合理運用了接口的定義,為每個子彈,飛機都設置了基類,以方便日后對程序進行調整。</p><p><b> 游戲操作模塊</b></p><p> 本模塊為飛機大戰(zhàn)游戲核心模塊,進入本模塊之后,Surface view會描繪出游戲背景幕布,以及玩家飛機,和上方飛來的敵機,本模塊要求能監(jiān)聽玩家操作,玩家可以通過觸摸屏觸點的位置不同來控制飛機。在玩家
53、飛機出現時飛機連續(xù)發(fā)子彈,只要飛機出現,就持續(xù)發(fā)射。飛機具有多樣性供玩家選擇,飛機可以升級子彈威力、飛機可以改變子彈類型、還能出現大招即飛機有清屏導彈。游戲操作模塊定義的敵機為上下飛行的,都是統(tǒng)一從屏幕上方飛下來,敵機不具備發(fā)射子彈功能,但是當敵機碰撞到玩家飛機后,玩家飛機死亡。當敵機只要出現在子彈圖片范圍內,根據子彈威力選擇掉血或者爆炸。在游戲進行中,會出現音效,每次玩家飛機發(fā)射子彈是都會出現聲音,當飛機爆炸是也會出現相應的音效。&l
54、t;/p><p><b> 分數統(tǒng)計模塊</b></p><p> 在游戲進行中時,本模塊進行實時的分數統(tǒng)計,根據不同的擊落類型給予玩家不同的分數,并在玩家游戲結束時,給出玩家分數統(tǒng)計結果,以此鼓勵玩家。增加游戲的趣味性以及可玩性。</p><p> 3.2 功能劃分概圖</p><p> 圖3.2 功能劃分概圖&
55、lt;/p><p><b> 4 概要設計</b></p><p><b> 4.1 總體設計</b></p><p> 4.1.1 系統(tǒng)流程</p><p> 系統(tǒng)主要是設計設計并實現飛機大戰(zhàn)游戲操作,通過畫筆繪制游戲界面展示給玩家。系統(tǒng)流程如圖4.1所示:</p><
56、;p> 圖4.1 系統(tǒng)流程圖</p><p> 4.1.2 系統(tǒng)詳細結構</p><p> 系統(tǒng)流程只是大概描述了系統(tǒng)的整體數據流程并沒有更加具體的數據結構的描述。下面讓我們更深一層的描述系統(tǒng)的整體結構以及細節(jié)問題。</p><p><b> 如圖4.2所示:</b></p><p> 圖4.2 系統(tǒng)結
57、構圖</p><p> 4.2 模塊設計概述</p><p> 如圖4.2的系統(tǒng)詳細結構圖所示,系統(tǒng)雖然主要分為“開場動畫模塊”、“道具制造模塊”、“游戲操作模塊”、“分數統(tǒng)計模塊”四個主要模塊,但是每個模塊都需要很多特殊的技巧以及算法來保證其的正確實施,同時模塊之間也需要良好的接口配合才行的。</p><p> 4.2.1 開場動畫模塊</p>
58、;<p> 開場動畫模塊由MainActivity.java、ReadyView.java類來實現,MainActivity主要為游戲入口,可以通過Handler機制進行游戲各個模塊的切換。ReadyView則是來繪制游戲的初始界面并將MainActivity的功能按鈕顯示在初始界面上,并對初始界面的飛機過場動畫進行定義。繪制完成后將等待玩家操作是進入游戲還是退出游戲。本模塊用于用戶登陸游戲的設計,該模塊具有初始畫布功能
59、,初始化聲音功能,同時保持屏幕全屏并且屏幕常亮,能繪制飛機的過場動畫以及開始游戲和退出游戲按鈕,如果沒有操作的話,則一直停留在此界面,并且不停的播放飛機大戰(zhàn)的過場動畫,該模塊設計精良,界面美觀大方,飛機過場動畫流暢。</p><p> 4.2.2 道具制造模塊</p><p> 道具制造模塊由cn.edu.nuc.object包的眾多物品類來定義各個物品的屬性,創(chuàng)建每個物品的類,Ga
60、meObjectFactory相當于一個工廠類,可以將前面的所有的物品的實現方法定義在本類之中,以此來實現工程模式,工廠模式主要是為創(chuàng)建對象提供過渡接口,以便將創(chuàng)建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。在本模式下僅實例一次對象,提高了工作效率。本類所使用的為簡單工廠模式類,道具包括大型敵機、BOSS子彈、BOSS敵機、中型敵機、導彈物品、玩家飛機的子彈(兩種威力)、玩家飛機、小型敵機。該模塊為這些道具初始化了圖片資源以及繪圖
61、方法,并且定義了每個道具的邏輯屬性,以方便游戲操作模塊、分數統(tǒng)計模塊的調用。道具類詳解如圖4.3所示:</p><p> 圖4.3 道具類詳解圖</p><p> 4.2.3 游戲操作模塊</p><p> 本模塊為飛機大戰(zhàn)游戲核心模塊,由MainView.java來實現。當用戶在ReadyView上點擊開始游戲后,程序進入MainView,本來通過調用工廠
62、方法生產出物品,根據游戲消耗和進行的情況,實時的制造相應的物品;通過游戲進行繪圖模塊,繪制游戲背景圖,繪制飛機控件根據玩家操作進行邏輯判決,繪制畫面。增加分數和等級,并發(fā)出相應的音效;通過背景移動模塊,調整兩個圖片的高度,制造出背景移動效果;通過運行間隔時間控制模塊控制運行間隔時間。在玩家飛機出現時飛機連續(xù)發(fā)子彈,只要飛機出現,就持續(xù)發(fā)射。飛機具有多樣性供玩家選擇,飛機可以升級子彈威力、飛機可以改變子彈類型、還能出現大招即飛機有清屏導彈
63、。游戲操作模塊定義的敵機為上下飛行的,都是統(tǒng)一從屏幕上方飛下來,敵機不具備發(fā)射子彈功能,但是當敵機碰撞到玩家飛機后,玩家飛機死亡。當敵機只要出現在子彈圖片范圍內,根據子彈威力選擇掉血或者爆炸。在游戲進行中,會出現音效,每次玩家飛機發(fā)射子彈是都會出現聲音,當飛機爆炸是也會出現相應的音效。</p><p> 4.2.4 分數統(tǒng)計模塊</p><p> 本模塊由EndView.java來實
64、現,當在MainView.java中檢測到玩家飛機的isAlive()參數為false時,即為玩家所駕駛的飛機因為撞擊到敵機而死亡,此時通過Handler發(fā)出的消息,程序進入EndView中,在本模塊中畫筆繪制開場動畫背景及按鈕;畫筆繪制玩家游戲最終得分;通過Android Handler為重新開始或者退出游戲按鈕綁定相應的功能在游戲進行中時,本模塊進行實時的分數統(tǒng)計,根據不同的擊落類型給予玩家不同的分數,并在玩家游戲結束時,給出玩家分
65、數統(tǒng)計結果,以此鼓勵玩家。增加游戲的趣味性以及可玩性。</p><p> 4.3 數據結構及接口定義</p><p><b> (1)開場動畫模塊</b></p><p> private float fly_x;// 圖片的坐標</p><p> private float fly_y;</p
66、><p> private float fly_height;</p><p> private float text_x;</p><p> private float text_y;</p><p> private float button_x;</p><p> private float button_
67、y;</p><p> private float button_y2;</p><p> private float strwid;</p><p> private float strhei;</p><p> private boolean isBtChange;// 按鈕圖片改變的標記</p><p
68、> private boolean isBtChange2;</p><p> private String startGame = "開始游戲";// 按鈕的文字</p><p> private String exitGame = "退出游戲";</p><p> private Bitmap text;
69、// 文字圖片</p><p> private Bitmap button;// 按鈕圖片</p><p> private Bitmap button2;// 按鈕圖片</p><p> private Bitmap planefly;// 飛機飛行的圖片</p><p> private Bi
70、tmap background;// 背景圖片</p><p> private Rect rect;// 繪制文字的區(qū)域</p><p> protected int currentFrame;// 當前動畫幀</p><p> protected float scalex;// 背景圖片的縮放比例</p>
71、<p> protected float scaley;</p><p> protected float screen_width;// 視圖的寬度</p><p> protected float screen_height;// 視圖的高度</p><p> protected boolean threadFlag;//
72、線程運行的標記</p><p> protected Paint paint; // 畫筆對象</p><p> protected Canvas canvas; // 畫布對象</p><p> protected Thread thread; // 繪圖線程</p><p> protected Surf
73、aceHolder sfh;</p><p> protected GameSoundPool sounds;</p><p> public ReadyView(Context context,GameSoundPool sounds)</p><p> public void surfaceChanged(SurfaceHolder arg0, int a
74、rg1, int arg2, int arg3)</p><p> public void surfaceCreated(SurfaceHolder arg0)</p><p> public void surfaceDestroyed(SurfaceHolder arg0)</p><p> public boolean onTouchEvent(Motio
75、nEvent event) </p><p> public void initBitmap()</p><p> public void release()</p><p> public void drawSelf() </p><p> public void run()</p><p> public
76、 void setThreadFlag(boolean threadFlag) </p><p><b> 道具制造模塊</b></p><p> private static int currentCount = 0; //對象當前的數量</p><p> public static int sumCount = 2; /
77、/對象總的數量</p><p> private Bitmap bigPlane; // 對象圖片</p><p> protected int score; // 對象的分值</p><p> protected int blood; // 對象的當前血量</p><p> protected int b
78、loodVolume; // 對象總的血量</p><p> protected boolean isExplosion; // 判斷是否爆炸</p><p> protected boolean isVisible; // 對象是否為可見狀態(tài)</p><p> public EnemyPlane(Resources res
79、ources)</p><p> public void initial(int arg0,float arg1,float arg2)</p><p> public void initBitmap() </p><p> public void drawSelf(Canvas canvas) </p><p> public vo
80、id release()</p><p> public boolean isCollide(GameObject obj) </p><p> public int getHarm() </p><p> public void setHarm(int harm)</p><p> private static int curren
81、tCount = 0; //對象當前的數量</p><p> private static int sumCount = 1;</p><p> private Bitmap boosPlane;</p><p> private Bitmap boosPlaneBomb;</p><p> private int directi
82、on;//移動的方向</p><p> private int interval;//發(fā)射子彈的間隔</p><p> private float leftBorder;//飛機能移動的左邊界</p><p> private float rightBorder;//飛機能移動的右邊界</p><p> priva
83、te boolean isFire;//是否允許射擊</p><p> private boolean isCrazy;//是否為瘋狂狀態(tài)</p><p> private List<Bullet> bullets;//子彈類</p><p> public void setScreenWH(float screen_width,flo
84、at screen_height)</p><p> public void initial(int arg0,float arg1,float arg2)</p><p> public void initButtle()</p><p> public boolean shoot(Canvas canvas)</p><p> p
85、ublic void logic()</p><p> private int direction;//物品的方向</p><p> private float middle_x; // 飛機的中心坐標</p><p> private float middle_y;</p><p> private long start
86、Time; // 開始的時間</p><p> private long endTime; // 結束的時間</p><p> private boolean isChangeBullet; // 標記更換了子彈</p><p> private Bitmap myplane; // 飛機飛行時的圖片</p><
87、p> private Bitmap myplane2; // 飛機爆炸時的圖片</p><p> private List<Bullet> bullets; // 子彈的序列</p><p> public void changeButtle()</p><p> public void isBulletOverTime()</
88、p><p> public GameObject createSmallPlane(Resources resources)</p><p> public GameObject createMiddlePlane(Resources resources)</p><p> public GameObject createBigPlane(Resources re
89、sources)</p><p> public GameObject createBossPlane(Resources resources)</p><p> public GameObject createMyPlane(Resources resources)</p><p> public GameObject createMyBullet(Reso
90、urces resources)</p><p> public GameObject createMyBullet2(Resources resources)</p><p> public GameObject createBossBullet(Resources resources)</p><p> public GameObject createMi
91、ssileGoods(Resources resources)</p><p> public GameObject createBulletGoods(Resources resources)</p><p><b> 游戲操作模塊</b></p><p> private int missileCount; // 導彈的數量<
92、;/p><p> private int middlePlaneScore;// 中型敵機的積分</p><p> private int bigPlaneScore;// 大型敵機的積分</p><p> private int bossPlaneScore;// boss型敵機的積分</p><p> private in
93、t missileScore;// 導彈的積分</p><p> private int bulletScore;// 子彈的積分</p><p> private int sumScore;// 游戲總得分</p><p> private int speedTime;// 游戲速度的倍數</p><p> p
94、rivate float bg_y;// 圖片的坐標</p><p> private float bg_y2;</p><p> private float play_bt_w;</p><p> private float play_bt_h; </p><p> private float missile_bt_y;
95、 </p><p> private boolean isPlay;// 標記游戲運行狀態(tài)</p><p> private boolean isTouchPlane;// 判斷玩家是否按下屏幕</p><p> private Bitmap background; // 背景圖片</p><p> private B
96、itmap background2; // 背景圖片</p><p> private Bitmap playButton; // 開始/暫停游戲的按鈕圖片</p><p> private Bitmap missile_bt;// 導彈按鈕圖標</p><p> private MyPlane myPlane;// 玩家的飛機</p>
97、;<p> private BossPlane bossPlane;// boss飛機</p><p> private List<EnemyPlane> enemyPlanes;</p><p> private MissileGoods missileGoods;</p><p> private BulletGoods bu
98、lletGoods;</p><p> public MainView(Context context,GameSoundPool sounds)</p><p> public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)</p><p> public void
99、surfaceCreated(SurfaceHolder arg0) </p><p> public void surfaceDestroyed(SurfaceHolder arg0)</p><p> public boolean onTouchEvent(MotionEvent event)</p><p> public void initBitmap
100、() </p><p> public void initObject()</p><p> public void release()</p><p> public void drawSelf()</p><p> public void viewLogic()</p><p> public void
101、addGameScore(int score)</p><p> public void playSound(int key)</p><p><b> (4)分數統(tǒng)計模塊</b></p><p> private int score;</p><p> private float button_x;</p
102、><p> private float button_y;</p><p> private float button_y2;</p><p> private float strwid;</p><p> private float strhei;</p><p> private boolean isBtCh
103、ange;// 按鈕圖片改變的標記</p><p> private boolean isBtChange2;</p><p> private String startGame = "重新挑戰(zhàn)";// 按鈕的文字</p><p> private String exitGame = "退出游戲";</p
104、><p> private Bitmap button;// 按鈕圖片</p><p> private Bitmap button2;// 按鈕圖片</p><p> private Bitmap background;// 背景圖片</p><p> private Rect rect;// 繪
105、制文字的區(qū)域</p><p> public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) </p><p> public void surfaceCreated(SurfaceHolder arg0)</p><p> public void surfaceDes
106、troyed(SurfaceHolder arg0) </p><p> public boolean onTouchEvent(MotionEvent event) </p><p> public void initBitmap() </p><p> public void release()</p><p> public v
107、oid drawSelf()</p><p> public void run()</p><p> public void setScore(int score)</p><p><b> 5 詳細設計</b></p><p> 本飛機大戰(zhàn)游戲的設計看似簡單,只有那么幾個子模塊,每個子模塊的功能很清晰也很簡單
108、的樣子,但是事實上卻不是這樣的。每個子模塊除了要充分完成自己應有的功能外還要考慮與其它子模塊的通信接口的定義,并且完成自己應有的功能時也會用到很多別的細小的編程技巧和方法。本部分名為詳細設計,但是一定要詳詳細細的描述出所有的細節(jié)問題是很有難度的,在這里只是把最主要的問題抽出來詳細說明,有些細節(jié)問題的描述可能會被忽略掉,但是會提到其作用的。本部分分四個大的子模塊來描述詳細設計的過程。</p><p> 5.1
109、開場動畫模塊</p><p> 5.1.1 問題描述</p><p> 開場動畫模塊為整個游戲的入口,在本入口提供給玩家開始游戲、退出游戲的按鈕,本模塊實現的一個大功能就是如何為按鈕實現功能,因為按鈕為圖片控件,并不能通過綁定監(jiān)聽器的方法來做到。而后就是開場動畫的繪制,和初始界面的繪制,本模塊為游戲的入口,因此應該設計的華麗,美觀,能給用戶眼前一亮的感覺。這就對Surface vie
110、w繪圖提出了一個高要求。</p><p> 5.1.2 問題分析</p><p> 關于按鈕的實現設計UI線程和子線程交互的問題。當應用啟動,系統(tǒng)會創(chuàng)建一個主線程(main thread)。這個主線程負責向UI組件分發(fā)事件(包括繪制事件),也是在這個主線程里,你的應用和Android的UI組件發(fā)生交互。所以main thread也叫UI thread也即UI線程。系統(tǒng)不會為每個組件單
111、獨創(chuàng)建線程,在同一個進程里的UI組件都會在UI線程里實例化,系統(tǒng)對每一個組件的調用都從UI線程分發(fā)出去。結果就是,響應系統(tǒng)回調的方法,永遠都是在UI線程里運行。當App做一些比較耗時的工作比如訪問網絡或者數據庫查詢,都會阻塞UI線程,導致事件停止分發(fā)(包括繪制事件)。對于用戶來說,應用看起來像是卡住了。所以必須把所有的UI操作放在UI線程里。</p><p> 5.1.3 實現方法</p>&l
112、t;p> 在Android中,對于UI的操作通常需要放在主線程中進行操作。如果在子線程中有關于UI的操作,那么就需要把數據消息作為一個Message對象發(fā)送到消息隊列中,然后,由Handler中的handlerMessage方法處理傳過來的數據信息,并操作UI。當然,Handler對象是在主線程中初始化的,因為它需要綁定在主線程的消息隊列中。</p><p> 類sendMessage(Message
113、msg)方法實現發(fā)送消息的操作。 在初始化Handler對象時重寫的handleMessage方法來接收Message并進行相關操作。在每個按鈕按下之后,系統(tǒng)會發(fā)送不同的消息送給消息隊列,用以開始游戲或者退出游戲,在游戲開始后,如果玩家飛機死亡也會發(fā)送消息隊列從而進入分數統(tǒng)計界面。Handler運行機制如圖5.1所示:</p><p> 圖5.1 Handler運行機制</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android的日歷系統(tǒng)的設計與實現-畢業(yè)設計
- 基于android的益智游戲的設計與實現本科生畢業(yè)設計
- android畢業(yè)設計--基于android的音樂播放的設計與實現
- 畢業(yè)設計(論文)基于android的日歷系統(tǒng)的設計與實現
- 基于android平臺的飛機游戲畢業(yè)設計
- 基于android平臺的飛機游戲畢業(yè)設計
- 畢業(yè)設計--基于android的視頻通話系統(tǒng)的設計與實現
- android游戲畢業(yè)設計
- 畢業(yè)設計--基于android的無線點餐系統(tǒng)的設計與實現
- 畢業(yè)設計(論文)-基于android的五子棋游戲設計與實現
- 基于android的逃生游戲設計與實現-畢業(yè)論文
- 71695.基于android的畢業(yè)設計管理系統(tǒng)的設計與實現
- 基于android平臺的手機游戲開發(fā)【畢業(yè)設計】
- 基于android平臺的飛機游戲畢業(yè)設計x
- 畢業(yè)設計--基于android的雷電射擊游戲開發(fā)
- 基于android推箱子游戲的設計與實現畢業(yè)論文
- 基于android技術的中國象棋人機對弈游戲的設計與實現畢業(yè)設計論文
- 畢業(yè)設計——基于android系統(tǒng)的失物招領平臺的設計與實現
- 基于android平臺的酒店即時查詢系統(tǒng)設計與實現畢業(yè)設計
- 基于java的掃雷游戲的設計與實現畢業(yè)設計
評論
0/150
提交評論