版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 畢 業(yè) 論 文</b></p><p> 題目:基于Android操作系統(tǒng)的飛機(jī)大戰(zhàn)手機(jī)游戲 </p><p> 學(xué) 號: </p><p> 姓 名: </p><p>
2、 專業(yè)班級:軟件技術(shù)(游戲方向)09-24 班</p><p> 指導(dǎo)教師: </p><p> 完成日期: 2011-12-22 </p><p> 摘要: 飛機(jī)大戰(zhàn)是滾動屏動作類游戲的一種,其中融入了很多動作類游戲特有的技術(shù),并且畫面流暢、聲音震撼。</p>&l
3、t;p> 當(dāng)今網(wǎng)絡(luò)發(fā)展迅速,益智類游戲被廣泛運用到網(wǎng)絡(luò)各大平臺上。借鑒網(wǎng)絡(luò)各大平臺上的游戲,通過Eclipse Android SDK 利用Java語言編寫的《飛機(jī)大戰(zhàn)》。</p><p> 本文闡述了在Android平臺上,面向?qū)ο蟮能浖_發(fā)思想對飛機(jī)大戰(zhàn)游戲系統(tǒng)的分析、設(shè)計及實現(xiàn)過程。在項目的實踐過程中,主要用到了以下技術(shù):手機(jī)布局主要使用了XML設(shè)計,程序及其子模塊的生命周期管理用到了Activi
4、ty流程控制,游戲的畫面更新使用的是手機(jī)的2D圖形編程。本論文的前半部分將簡要介紹系統(tǒng)相關(guān)的行業(yè)信息及基礎(chǔ)的技術(shù)知識,后半部分將對本人在系統(tǒng)各模塊中所使用的關(guān)鍵技術(shù)的實現(xiàn)進(jìn)行了全面的介紹。</p><p> 關(guān)鍵詞:滾屏游戲;飛機(jī)大戰(zhàn);手機(jī)游戲 ;Android平臺</p><p> Abstract: the World War II aircraft rolling screen
5、action game one, incorporating many action games unique technology, and smooth picture, sound rock.The network is developing rapidly, a puzzle game is widely applied to the network the platform. From the network the plat
6、form game, through the Eclipse Android SDK Java language prepared by the" World War II aircraft".</p><p> This paper elaborated on the platform of Android, object-oriented software development tho
7、ught to the World War II aircraft game system analysis, design and implementation process. In the practice of the project process, the main use of the following techniques: the layout of the main mobile phone using XML d
8、esign, procedures and sub module life cycle management used in the Activity process control, the game screen is updated using the mobile phone 2D graphics programming. In this paper, the fro</p><p> Key wor
9、ds: scrolling game; World War II aircraft; mobile phone games; Android platform</p><p> 目 錄</p><p> 緒論…………………………………………………………………5</p><p> 相關(guān)研究綜述…………………………………………………………6</
10、p><p> ?。ㄒ唬╆P(guān)于java語言………………………………………………6</p><p> (二) 關(guān)于Android……………………………………………………8</p><p> 三、系統(tǒng)開發(fā)環(huán)境及相關(guān)技術(shù)……………………………………………10</p><p> 四、游戲所需類的分析與實現(xiàn)……………………………………………11</
11、p><p> (一)游戲的框架簡介…………………………………………………11</p><p> ?。ǘ┯螒蚪缑娴目蚣芎喗椤?2</p><p> ?。ㄈ└鱾€類的簡要介紹…………………………………………………13</p><p> 五、游戲界面展示…………………………………………………………22</p&
12、gt;<p> 總結(jié)……………………………………………………………………27</p><p> 致謝………………………………………………………………………28</p><p> 參考文獻(xiàn)…………………………………………………………………29</p><p><b> 前 言</b></p><p>
13、; 隨著3G移動網(wǎng)絡(luò)應(yīng)用的推廣,手機(jī)游戲的規(guī)模、復(fù)雜程度日益增強(qiáng);其技術(shù)手段、設(shè)計思想、系統(tǒng)體系結(jié)構(gòu)都發(fā)生了深刻的變化。手機(jī)操作系統(tǒng)正朝著高處理能力、多功能、智能化的方向發(fā)展。近年來,網(wǎng)絡(luò)文化市場發(fā)展很快,隨著互聯(lián)網(wǎng)的迅速普及、寬帶的接入社區(qū)和家庭,我國網(wǎng)絡(luò)游戲市場發(fā)展迅速并進(jìn)入了一個高速增長期,并已經(jīng)創(chuàng)造了較大的產(chǎn)值,帶動了相關(guān)產(chǎn)業(yè)的發(fā)展。</p><p> 現(xiàn)在,游戲的類型也由最初的動作游戲和簡單益智游戲
14、向更復(fù)雜、更高智力,更具真實性的游戲發(fā)展。目前的游戲種類繁多,包括角色扮演、仿真模擬類、人工智能、休閑類、渲染類、網(wǎng)絡(luò)類等等,甚至有的游戲包含了好幾種類型。</p><p> 機(jī)戰(zhàn)類游戲一直以來都很多。但仿真模擬類的游戲卻有不少,現(xiàn)在休閑類的技術(shù)廣泛的應(yīng)用到很多游戲里面等等。</p><p> 飛機(jī)大戰(zhàn)游戲是廣泛人士喜愛的游戲,通過上下左右鍵控制方向A鍵發(fā)射子彈,游戲中有加血道具與子彈
15、升級道具。并有關(guān)卡BOSS等著與你死戰(zhàn)。</p><p> 鑒于游戲的對社會的巨大影響力和光輝的發(fā)展前景,以及我們自己對游戲愛好,這次的畢業(yè)設(shè)計我們決定嘗試設(shè)計和制作一個具有一定可玩性的游戲。期間,我們收集相關(guān)資料、研究同類型的游戲、閱讀有關(guān)這類型游戲和相關(guān)技術(shù)性的書籍,通過制作游戲項目來熟悉游戲的制作思路、過程,加深對面向?qū)ο缶幊陶Z言的掌握,培養(yǎng)自己的耐心、細(xì)心和考慮問題的全面性,同時解決本課題要完成的問題,
16、如游戲框架如何構(gòu)建,如何完善游戲的各種功能,如何能讓游戲有音樂和音效的實現(xiàn),如何能讓游戲過關(guān),如何能讓游戲界面美觀,看起來舒服感覺。</p><p><b> 一、緒論</b></p><p><b> 1.1 研究內(nèi)容</b></p><p> Android平臺飛機(jī)大戰(zhàn)是基于Android手機(jī)平臺,運用Java語
17、言編寫的一款手機(jī)滾屏類射擊游戲。</p><p><b> 1.2 研究意義</b></p><p> Android平臺手機(jī)游戲的開發(fā)的意義在于活動人的思維,使人精神放松,鍛煉人的反應(yīng)能力與應(yīng)變能力。</p><p> 1.3研究現(xiàn)狀和發(fā)展趨勢</p><p> 據(jù)Gartner最新數(shù)據(jù)顯示,2010年第二、三
18、季度全球智能手機(jī)銷售繼續(xù)大幅增長,其中第三季度安卓占全球智能手機(jī)市場的25.5%,僅次于塞班,成為第二大智能手機(jī)系統(tǒng)。2010第二、三季度與去年同期相比,增度分別是15.4%及22%,增勢迅猛。而塞班系統(tǒng)較09年的市場份額,盡管終端銷量有大幅度提升,但增勢下滑10%,形勢非常嚴(yán)峻。其他操作系統(tǒng)的表現(xiàn)則要平穩(wěn)很多。</p><p> 安卓是首款開源代碼的操作系統(tǒng),采用Linux內(nèi)核,開放手機(jī)聯(lián)盟(OHA)成員可以
19、任意使用和修改安卓的SDK軟件包。系統(tǒng)的開源性使其具有良好的拓展性,一方面,為眾多移動應(yīng)用開發(fā)者提供了良好的系統(tǒng)性平臺,有利于移動應(yīng)用的集合;另一方面,終端廠商可以針對自身的特殊需要“定制化開發(fā)”。與此相比,盡管2010年2月,塞班基本完成開源工作,但由于代碼臃腫,用戶界面設(shè)計缺失,塞班的開源并無實際意義,錯失發(fā)展良機(jī)。</p><p> 我們認(rèn)為,安卓在全球市場的成長壯大,塞班市場份額不斷下跌已成不爭事實。安
20、卓操作系統(tǒng)發(fā)展迅猛主要得益于免費、開源和良好產(chǎn)業(yè)運作策略,這三點為安卓在智能手機(jī)市場贏得更多的發(fā)展機(jī)遇。系統(tǒng)的免費讓更多的廠商加入,推動了份額的上升;代碼的開源讓更多的開發(fā)者進(jìn)入應(yīng)用開發(fā);應(yīng)用的豐富吸引了更多用戶選擇,這也是谷歌值得眾多廠商學(xué)習(xí)的地方。此外,谷歌通過OHA聯(lián)合眾多廠商進(jìn)行系統(tǒng)研發(fā),不斷更新版本,將系統(tǒng)應(yīng)用推廣到更多的終端產(chǎn)品中,確保用戶體驗持續(xù)改善。</p><p><b> 二、相關(guān)
21、研究綜述</b></p><p> 2.1 關(guān)于java語言</p><p><b> Java編程特點</b></p><p> 1、Java語言是簡單的。Java語言的語法與C語言和C++語言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用Java。另一方面,Java丟棄了C++ 中很少使用的、很難理解的、令人迷惑的那些特性,如操
22、作符重載、多繼承、自動的強(qiáng)制類型轉(zhuǎn)換。特別地,Java語言不使用指針,并提供了自動的廢料收集,使得程序員不必為內(nèi)存管理而擔(dān)憂。 </p><p> 2、Java語言是一個面向?qū)ο蟮?。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現(xiàn)機(jī)制(關(guān)鍵字為implements)。Java語言全面支持動態(tài)綁定,而C++ 語言只對虛函數(shù)使用動態(tài)綁定??傊?/p>
23、,Java語言是一個純的面向?qū)ο蟪绦蛟O(shè)計語言。 </p><p> 3、Java語言是分布式的。Java語言支持Internet應(yīng)用的開發(fā),在基本的Java應(yīng)用編程接口中有一個網(wǎng)絡(luò)應(yīng)用編程接口(java net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開發(fā)分布式應(yīng)用的重要手段。 </p>
24、;<p> 4、Java語言是健壯的。Java的強(qiáng)類型機(jī)制、異常處理、廢料的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機(jī)制使得Java更具健壯性。 </p><p> 5、Java語言是安全的。Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個安全機(jī)制以防惡意代碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網(wǎng)絡(luò)下載的類具有
25、一個安全防范機(jī)制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機(jī)制(類SecurityManager)讓Java應(yīng)用設(shè)置安全哨兵。 </p><p> 6、Java語言是體系結(jié)構(gòu)中立的。Java程序(后綴為java的文件)在Java平臺上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件), 然后可以在實現(xiàn)這個Java平臺的任何系統(tǒng)中運行。這種途徑適合
26、于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。 </p><p> 7、Java語言是可移植的。這種可移植性來源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個基本數(shù)據(jù)類型的長度。Java系統(tǒng)本身也具有很強(qiáng)的可移植性,Java編譯器是用Java實現(xiàn)的,Java的運行環(huán)境是用ANSI C實現(xiàn)的。 </p><p> 8、Java語言是解釋型的。如前所述,Java程序在Java平臺上被編譯為字節(jié)碼格式,然
27、后可以在實現(xiàn)這個Java平臺的任何系統(tǒng)中運行。在運行時,Java平臺中的Java解釋器對這些字節(jié)碼進(jìn)行解釋執(zhí)行,執(zhí)行過程中需要的類在聯(lián)接階段被載入到運行環(huán)境中。 </p><p> 9、Java是高性能的。與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實上,Java的運行速度隨著JIT(Just-In-Time)編譯器技術(shù)的發(fā)展越來越接近于C++。 </p><p> 10
28、、Java語言是多線程的。在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構(gòu)為Thread(Runnable) 的構(gòu)造子將一個實現(xiàn)了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對象即為線程。值得注意的是Thread類已經(jīng)實現(xiàn)了Runnable接口,因此,任何一個線程均有它的run方法,而run方法中包
29、含了線程所要運行的代碼。線程的活動由一組方法來控制。Java語言支持多個線程的同時執(zhí)行,并提供多線程之間的同步機(jī)制(關(guān)鍵字為synchronized)。 </p><p> 11、Java語言是動態(tài)的。Java語言的設(shè)計目標(biāo)之一是適應(yīng)于動態(tài)變化的環(huán)境。Java程序需要的類能夠動態(tài)地被載入到運行環(huán)境,也可以通過網(wǎng)絡(luò)來載入所需要的類。這也有利于軟件的升級。另外,Java中的類有一個運行時刻的表示,能進(jìn)行運行時刻的類
30、型檢查。 </p><p><b> Java語言的優(yōu)點</b></p><p> 1 java最初是為對家用電器進(jìn)行集成控制而設(shè)計的一種語言,因此它必須簡單明了。Java語言的簡單性主要體現(xiàn)在以下三個方面:1.Java的風(fēng)格類似于C++,因而C++程序員是非常熟悉的。從某種意義上講,Java語言是C及C++語言的一個變種,因此,C++程序員可以很快就掌握J(rèn)av
31、a編程技術(shù)。2.Java摒棄了C++中容易引發(fā)程序錯誤的地方,如指針和內(nèi)存管理。3.Java提供了豐富的類庫。</p><p> 2 面向?qū)ο罂梢哉f是Java最重要的特性。Java語言的設(shè)計完全是面向?qū)ο蟮模恢С诸愃艭語言那樣的面向過程的程序設(shè)計技術(shù)。Java支持靜態(tài)和動態(tài)風(fēng)格的代碼繼承及重用。單從面向?qū)ο蟮奶匦詠砜矗琂ava類似于SmallTalk,但其它特性、尤其是適用于分布式計算環(huán)境的特性遠(yuǎn)遠(yuǎn)超越了
32、SmallTalk。</p><p> 3 另外,為了建立Java作為網(wǎng)絡(luò)的一個整體,Java將它的程序編譯成一種結(jié)構(gòu)中立的中間文件格式。只要有Java運行系統(tǒng)的機(jī)器都能執(zhí)行這種中間代碼?,F(xiàn)在,Java運行系統(tǒng)有Solaris2.4(SPARC),Win32系統(tǒng)(Windows95和WindowsNT)等.Java源程序被編譯成一種高層次的與機(jī)器無關(guān)的byte-code格式語言,這種語言被設(shè)計在虛擬機(jī)上運行,
33、由機(jī)器相關(guān)的運行調(diào)試器實現(xiàn)執(zhí)行。</p><p> 2.2 關(guān)于Android </p><p> 2.2.1 android構(gòu)架</p><p> Android作為一個移動設(shè)備的平臺,其軟件層次結(jié)構(gòu)包括了一個操作系統(tǒng)(OS),中間件(MiddleWare)和應(yīng)用程序(Application)。根據(jù)Android的軟件框圖,其軟件層次結(jié)構(gòu)自下而上分為以下幾個
34、層次:</p><p> 圖2.2 Android系統(tǒng)架構(gòu)</p><p> 2.2.2 XUL界面布局</p><p> XUL 是一種基于 XML 的語言,因此需要對 XML(特別是 XML 名稱空間)很熟悉。XUL是英文“XML User Interface Language”的首字母縮寫。顧名思義,它是一種應(yīng)用XML來描述使用者界面的標(biāo)示語言。 <
35、;/p><p> 2.2.3 Android的Activity組件</p><p> Activity,一般代表手機(jī)屏幕的一屏,相當(dāng)于瀏覽器的一個頁面。在Activity中添加view,實現(xiàn)應(yīng)用界面和用戶交互。一個應(yīng)用程序一般由多個Activity構(gòu)成,這些Activity之間可互相跳轉(zhuǎn),可進(jìn)行頁面間的數(shù)據(jù)傳遞。每個Activity都有自己的生命周期。</p><p&g
36、t; 2.2.4 SQLite數(shù)據(jù)庫</p><p> 在Android平臺上,集成了一個嵌入式關(guān)系型數(shù)據(jù)庫—SQLite。SQLite是支持結(jié)構(gòu)化查詢的輕量級數(shù)據(jù)庫,能很好得適應(yīng)于移動設(shè)備的應(yīng)用。</p><p> Android提供了一個名為SQLiteDatabase的類,該類封裝了一些操作數(shù)據(jù)庫的API,使用該類可以完成對數(shù)據(jù)進(jìn)行添加(Create)、查詢(Retrieve)
37、、更新(Update)和刪除(Delete)操作(這些操作簡稱為CRUD)。</p><p> 2.2.5 Android 2D圖形編程 </p><p> 1、Simple Graphics in View:就是直接使用Android已經(jīng)實現(xiàn)的一些畫圖操作,比如說images,shapes,colors,pre-defined animation等等。這種方式只能畫靜態(tài)或者極為簡單的
38、2D圖畫,對于實時性很強(qiáng)的動畫,高品質(zhì)的游戲都是沒法實現(xiàn)的。2、Canvas:首先我們要明白這個Canvas是一個2D的概念,是在Skia中定義的。也就是說在這個方式下還是說的畫2D圖形。</p><p> 三、系統(tǒng)開發(fā)環(huán)境及相關(guān)技術(shù)</p><p> 3.1 Android開發(fā)環(huán)境介紹</p><p> Android的上層應(yīng)用程序是用Java語言開發(fā),同時
39、還需要基于Dalvik虛擬機(jī),所以,Google公司推薦使用主流的Java繼承開發(fā)環(huán)境Eclipse。只有Eclipse還不夠,因為是使用Java語言進(jìn)行開發(fā),還應(yīng)該有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的應(yīng)用程序開發(fā)和Java開發(fā)有較大區(qū)別的,所以還需要有Google提供的Android SDK。同時,還需要在Eclipse安裝ADT,為Andro
40、id開發(fā)提供開發(fā)工具的升級或者變更,是Eclipse下開發(fā)工具的升級下載的工具。</p><p> (1) Java SDK</p><p> (2) Eclipse</p><p> (3) Android SDK</p><p> 3.2 Android開發(fā)平臺搭建</p><p> Android開發(fā)
41、平臺搭建步驟:</p><p> ?、偈紫鹊絟ttp://www.eclipse.org/downloads/下載Eclipse集成開發(fā)環(huán)境并且解壓,這里推薦下載Java EE 集成版本,可以為平臺的搭建省下不少工作。接著再去http://java.sun.com/javase/downloads/index.jsp 站點下載SDK后安裝,下載http://dl.google.com/android/androi
42、d-sdk-windows-1.5_r1.zip,Android SDK1.5后解壓。第一步下載工序就結(jié)束了。</p><p> ?、陔p擊Eclipse解壓后目錄中的eclipse.exe然后啟動,選擇Eclipse菜單中的Help-> Install New Software-> 選項卡上的Available Software,點擊右側(cè)的“Add”輸入http://dl-ssl.google.com
43、/android/eclipse/后確定,然后在“Work with”下拉菜單中選擇剛才輸入的網(wǎng)址。過一會就會出現(xiàn)一個Developer Tools選項,勾上以后點擊Next以后Eclipse會自動網(wǎng)上查找Android 開發(fā)工具插件,然后找到Android DDMS和Android Development Tools,選中這兩個點擊Finish,Eclipse就會自動下載并安裝Android插件了,最后會提示重啟Eclipse。<
44、;/p><p> ?、壑貑⒑筮x擇Eclipse菜單中的Windows-> Preferences 在左側(cè)的Android項目中SDK Location中填入Android SDK解壓后的目錄,然后點擊Apply。</p><p> 在WindowsXP的系統(tǒng)變量中的path變量中添加一個值,該值指向解壓后的Android SDK目錄下的tools文件夾。</p><
45、p> 四、游戲所需類的分析與實現(xiàn)</p><p> 4.1 游戲的框架簡介</p><p> 圖4.1 游戲的類框架</p><p> 1、啟動游戲,在PlaneActivity中會先進(jìn)入加載界面ProcessView,然后后臺加載歡迎界面WelcomView,當(dāng)加載完成后屏幕切換到歡迎界面,并啟動WelcoeViewThread線程生成歡迎界面的動畫
46、效果。</p><p> 2、當(dāng)歡迎動畫播放完成后屏幕會停留在選擇狀態(tài)等待玩家操作。</p><p> 3、當(dāng)玩家單擊“幫助”時將初始化幫助界面HelpView并將其顯示出來。</p><p> 4、當(dāng)玩家大幾“開始游戲”按鈕時,屏幕將顯示加載界面。后臺將初始化游戲界面GameView,在地圖信息類Maps中初始化此關(guān)卡中的所有敵機(jī)、變槍的道具、補(bǔ)血的道具等。
47、</p><p> 5、初始化游戲界面的同時啟動GameViewBackGroundThread線程,以初始滾動游戲界面的背景圖片。</p><p> 6、當(dāng)玩家發(fā)射炮彈或敵機(jī)發(fā)射炮彈時會創(chuàng)建Bullet對象,并將其添加到已知的容器中。</p><p> 7、在游戲過程中如果需要顯示爆炸效果,會創(chuàng)建爆炸效果類Explode以及ExplodeThread類來渲染
48、爆炸效果。</p><p> 8、游戲中所有類中使用的常量全部封裝到常量類ConstantUtil類中。</p><p> 4.2 游戲界面的框架簡介</p><p> 圖4.2 游戲界面的類框架</p><p> 1、GameView在初始化是會從Maps讀取當(dāng)前關(guān)卡的地圖信息,包括敵機(jī)、補(bǔ)血道具、換槍道具等。</p>
49、<p> 2、在界面初始化的同時,還需要啟動MoveThread線程、GameViewBackGroundThread線程、KeyThread線程以及ExplodeThread線程。</p><p> 3、GameView會在適當(dāng)?shù)臅r候從Plane類中讀取主戰(zhàn)飛機(jī)的信息進(jìn)行繪制。</p><p> 4、當(dāng)主戰(zhàn)飛機(jī)發(fā)射子彈時,會創(chuàng)建Bullet對象并添加到指定容器中,此時M
50、oveThread同樣需要定時改變子彈對象的位置。</p><p> 5、在以上過程中,全部都需要PianeActivity的管理與ConstanUtil的參與。</p><p> 4.3各個類的簡要介紹</p><p><b> 共有類:</b></p><p> Activity的實現(xiàn)類PlaneActivi
51、ty,該類是通過擴(kuò)展基類Activity實現(xiàn)的,是整個游戲程序的入口。</p><p> 鍵盤監(jiān)聽線程KeyThread,該類為手機(jī)鍵盤的監(jiān)聽線程,每隔一段時間讀取一次鍵盤的狀態(tài)值,并根據(jù)當(dāng)前鍵盤狀態(tài)做出相應(yīng)的操作</p><p> package wyf.ytl;</p><p> public class KeyThread extends Thread
52、{</p><p> int span = 20;// 睡眠的毫秒數(shù)</p><p> int countMove = 0;// 飛機(jī)移動的計數(shù)器</p><p> int countFine = 0;// 飛機(jī)發(fā)子彈的計數(shù)器</p><p> int moveN = 3;// 每三次循環(huán)移動一下</p><p&g
53、t; int fineN = 5;// 每五次循環(huán)發(fā)一次子彈</p><p> PlaneActivity activity;// Activity的引用</p><p> private boolean flag = true;// 循環(huán)標(biāo)志</p><p> int action;// 鍵盤狀態(tài)碼</p><p> privat
54、e boolean KEY_UP = false;// 向上鍵是否被按下</p><p> private boolean KEY_DOWN = false;// 向下鍵是否被按下</p><p> private boolean KEY_LEFT = false;// 向左的鍵被按下</p><p> private boolean KEY_RIGHT =
55、false;// 向右的鍵被按下</p><p> private boolean KEY_A = false;// A的鍵被按下</p><p> private boolean KEY_B = false;// B的鍵被按下</p><p> public KeyThread(PlaneActivity activity) {// 構(gòu)造器</p>
56、;<p> this.activity = activity;</p><p><b> }</b></p><p> public void setFlag(boolean flag) {// 設(shè)置標(biāo)志位</p><p> this.flag = flag;</p><p><b>
57、}</b></p><p> public void run() {// 重寫的方法</p><p> while (flag) {</p><p> action = activity.action;// 得到當(dāng)前鍵盤的狀態(tài)碼</p><p> if (action == 19) {// 上</p><
58、;p> KEY_UP = true;</p><p><b> } else {</b></p><p> KEY_UP = false;</p><p><b> }</b></p><p> if (action == 20) {// 下</p><p>
59、 KEY_DOWN = true;</p><p><b> } else {</b></p><p> KEY_DOWN = false;</p><p><b> }</b></p><p> if (action == 21) {// 左</p><p>
60、KEY_LEFT = true;</p><p><b> } else {</b></p><p> KEY_LEFT = false;</p><p><b> }</b></p><p> if (action == 22) {// 右</p><p> KE
61、Y_RIGHT = true;</p><p><b> } else {</b></p><p> KEY_RIGHT = false;</p><p><b> }</b></p><p> if (action == 29) {// A</p><p> KE
62、Y_A = true;</p><p><b> } else {</b></p><p> KEY_A = false;</p><p><b> }</b></p><p> if (activity.gameView.status == 1 || activity.gameView.s
63、tatus == 3) {</p><p> if (countMove == 0) {// 每moveN次移動一次</p><p> if (KEY_UP == true) {// 向上鍵被按下</p><p> // 檢測在不碰到上邊界的情況下</p><p> if (!((activity.gameView.plane.get
64、Y() - activity.gameView.plane</p><p> .getSpan()) < ConstantUtil.top)) {</p><p> // 向上移動10個像素</p><p> activity.gameView.plane</p><p> .setY(activity.gameView.pla
65、ne.getY()</p><p> - activity.gameView.plane.getSpan());</p><p><b> }</b></p><p> // 通過dir更換圖標(biāo)</p><p> activity.gameView.plane.setDir(ConstantUtil.DIR_UP
66、);</p><p><b> }</b></p><p> if (KEY_DOWN == true) {// 向下鍵被按下</p><p> if (!((activity.gameView.plane.getY() + activity.gameView.plane</p><p> .getSpan())
67、 > ConstantUtil.screenHeight</p><p> - activity.gameView.plane.bitmap1.getHeight())) {</p><p> activity.gameView.plane</p><p> .setY(activity.gameView.plane.getY()</p>
68、<p> + activity.gameView.plane.getSpan());</p><p><b> }</b></p><p> activity.gameView.plane.setDir(ConstantUtil.DIR_DOWN);</p><p><b> }</b></p>
69、;<p> if (KEY_LEFT == true) {// 向左鍵被按下</p><p> if (!((activity.gameView.plane.getX() - activity.gameView.plane</p><p> .getSpan()) < -40)) {</p><p> activity.gameView.
70、plane</p><p> .setX(activity.gameView.plane.getX()</p><p> - activity.gameView.plane.getSpan());</p><p><b> }</b></p><p><b> }</b></p>
71、<p> if (KEY_RIGHT == true) {// 向右鍵被按下</p><p> if (!((activity.gameView.plane.getX() + activity.gameView.plane</p><p> .getSpan()) > ConstantUtil.screenWidth</p><p> -
72、 activity.gameView.plane.bitmap1.getWidth())) {</p><p> activity.gameView.plane</p><p> .setX(activity.gameView.plane.getX()</p><p> + activity.gameView.plane.getSpan());</p&g
73、t;<p><b> }</b></p><p><b> }</b></p><p><b> //水平態(tài)</b></p><p> if (KEY_RIGHT == false && KEY_LEFT == false</p><p>
74、 && KEY_DOWN == false && KEY_UP == false) {</p><p> activity.gameView.plane.setDir(ConstantUtil.DIR_STOP);</p><p><b> }</b></p><p> //如果按下a鍵發(fā)射子彈</
75、p><p> if (countFine == 0) {// 每fineN發(fā)一次子彈</p><p> if (KEY_A == true) {// A鍵被按下</p><p> activity.gameView.plane.fire();</p><p><b> }</b></p><p&g
76、t;<b> }</b></p><p><b> }</b></p><p> countMove = (countMove + 1) % moveN;</p><p> countFine = (countFine + 1) % fineN;</p><p><b> }&l
77、t;/b></p><p><b> try {</b></p><p> Thread.sleep(span);// 睡覺指定毫秒數(shù)</p><p> } catch (Exception e) {</p><p> e.printStackTrace();</p><p><
78、;b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 常量類ConstantUtil,游戲中用到的所有的常量全部封裝到該類中,便于管理與維護(hù)。</
79、p><p><b> 輔助界面相關(guān)類</b></p><p> 歡迎界面WelcomeView,該類為游戲歡迎界面的實現(xiàn)類,主要負(fù)責(zé)歡迎界面的繪制工作。</p><p> 歡迎界面的動畫實現(xiàn)類WelcomeViewThread,該類是為WelcomeView服務(wù)的線程類,主要負(fù)責(zé)歡迎界面中動畫的生成。</p><p>
80、 幫助界面HelpView,該類非常簡單,主要負(fù)責(zé)繪制幫助界面的相關(guān)圖片。</p><p> 加載界面ProcessView,為了使游戲更加人性化,給玩家更好的體驗,在長時間加載某些資源時,需要給出加載界面以提示玩家后臺加載的進(jìn)度。</p><p> 勝利界面WinView,該類為玩家順利過關(guān)后的恭喜過關(guān)界面。</p><p> 失敗界面FailView,該
81、類為主戰(zhàn)飛機(jī)死亡后顯示的失敗界面,在該界面中玩家可以選擇重新開始游戲或者退出游戲。</p><p><b> 游戲界面相關(guān)類</b></p><p> 游戲主界面類GameView,該類為游戲菜單界面的實現(xiàn)類,負(fù)責(zé)界面繪制工作。</p><p> 背景滾動線程GameViewBackGroundThread,該類主要負(fù)責(zé)背景的滾動、敵機(jī)以
82、及各種道具的出現(xiàn)。</p><p> package wyf.ytl;</p><p><b> /**</b></p><p><b> * </b></p><p> * 該類為背景滾動、物品出現(xiàn)的類</p><p><b> * </b>
83、</p><p><b> */</b></p><p> public class GameViewBackGroundThread extends Thread {</p><p> private int sleepSpan = 100;// 睡眠的毫秒數(shù)</p><p> private int span
84、 = 3;// 圖片移動的步長</p><p> private boolean flag = true;// 循環(huán)標(biāo)志位</p><p> GameView gameView;// GameView的引用</p><p> long touchTime = 0;// 當(dāng)前所到的時間</p><p> public GameViewB
85、ackGroundThread(GameView gameView) {// 構(gòu)造器</p><p> this.gameView = gameView;</p><p><b> }</b></p><p> public void setFlag(boolean flag) {// 設(shè)置標(biāo)記位</p><p>
86、 this.flag = flag;</p><p><b> }</b></p><p> public void run() {</p><p> while (flag) {</p><p> if (gameView.status == 1) {// 游戲中時</p><p>
87、 gameView.backGroundIX -= span;</p><p> if (gameView.backGroundIX < -ConstantUtil.pictureWidth) {</p><p> gameView.i = (gameView.i + 1) % ConstantUtil.pictureCount;</p><p> ga
88、meView.backGroundIX += ConstantUtil.pictureWidth;</p><p><b> }</b></p><p> gameView.cloudX -= span;// 移動云彩</p><p> if (gameView.cloudX < -1000) {</p><p&
89、gt; gameView.cloudX = 1000;</p><p><b> }</b></p><p> touchTime++;// 時間自加</p><p> // 滾動地圖的時候</p><p><b> try {</b></p><p> for
90、(EnemyPlane ep : gameView.enemyPlanes) {// 到時間出現(xiàn)敵機(jī)</p><p> if (ep.touchPoint == touchTime) {</p><p> ep.status = true;</p><p> if (ep.type == 3) {// 到關(guān)口了</p><p> ga
91、meView.status = 3;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> for (Life l : gameView.lifes) {// 到時間出現(xiàn)血塊</p>
92、;<p> if (l.touchPoint == touchTime) {</p><p> l.status = true;</p><p><b> }</b></p><p><b> }</b></p><p> for (ChangeBullet cb : gam
93、eView.changeBollets) {// 到時間出現(xiàn)吃了改變槍的物體</p><p> if (cb.touchPoint == touchTime) {</p><p> cb.status = true;</p><p><b> }</b></p><p><b> }</b>
94、</p><p> } catch (Exception e) {// 捕獲異常</p><p> e.printStackTrace();// 打印異常信息</p><p><b> }</b></p><p> // 一分多鐘后游戲結(jié)束</p><p> if (touchTime
95、== 641) {// 到關(guān)口時</p><p> this.flag = false;</p><p><b> }</b></p><p><b> }</b></p><p><b> try {</b></p><p> Thread.
96、sleep(sleepSpan);// 睡眠</p><p> } catch (Exception e) {// 捕獲異常</p><p> e.printStackTrace();// 打印異常信息</p><p><b> }</b></p><p><b> }</b></p&
97、gt;<p><b> }</b></p><p><b> }</b></p><p> 地圖信息Maps,該類包含著地圖的相關(guān)信息,例如敵機(jī)所有的移動路線、各個關(guān)卡中補(bǔ)血道具、換槍道具等。</p><p> 物體的移動線程類MoveThread,該線程負(fù)責(zé)除了我方主戰(zhàn)飛機(jī)外所有可移動物的移動。&l
98、t;/p><p><b> 情景相關(guān)類</b></p><p> 主戰(zhàn)飛機(jī)Plane,該類為主戰(zhàn)飛機(jī)的封裝類,可由玩家控制其方向以及移動狀態(tài)。</p><p> 敵機(jī)EnemyPlane,該類為敵機(jī)的封裝類。</p><p> 子彈類Bullet,子彈的封裝類,游戲中所有的子彈都為該類的對象。</p>
99、<p> 爆炸效果類Explode,該類為爆炸效果的渲染類,負(fù)責(zé)在指定位置繪制爆炸效果。</p><p> 爆炸換幀線程Explode,該類是為爆炸效果類服務(wù)的,當(dāng)爆炸存在時定時為每個爆炸效果換幀。</p><p> 補(bǔ)血道具類Life,該類為補(bǔ)血道具類,當(dāng)主戰(zhàn)飛機(jī)與該類對象碰撞時,會為主戰(zhàn)飛機(jī)增加一格血。</p><p> 換槍道具類Change
100、Bullet,該類為換槍道具類,當(dāng)主戰(zhàn)飛機(jī)與該類對象碰撞時,會增強(qiáng)主戰(zhàn)飛機(jī)所攜帶的武器。</p><p><b> 五、游戲界面展示</b></p><p><b> 1、主界面</b></p><p><b> 圖5.1主界面</b></p><p><b>
101、 2、游戲界面</b></p><p><b> 圖5.2游戲界面</b></p><p><b> 3、射擊</b></p><p> 圖5.3射擊(子彈未升級)</p><p> 4、射擊(子彈升級后)</p><p> 圖5.4射擊(子彈升級后)
102、</p><p><b> 5、子彈升級道具</b></p><p> 圖5.5子彈升級道具</p><p><b> 6、加血道具</b></p><p><b> 圖5.6加血道具</b></p><p><b> 7、擊中敵機(jī)&
103、lt;/b></p><p><b> 圖5.7擊中敵機(jī)</b></p><p><b> 8、關(guān)卡boss</b></p><p> 圖5.8關(guān)卡BOSS</p><p><b> 9、游戲結(jié)束</b></p><p><b>
104、 圖5.9游戲結(jié)束</b></p><p><b> 總結(jié)</b></p><p> 經(jīng)過一段時間的努力,Android平臺飛機(jī)大戰(zhàn)游戲終于完成了。由于對JAVA濃厚的興趣引發(fā)了我對Android的好奇心,從一開始什么都不懂一直摸索著運用了很多高級技術(shù)完成了這個軟件。</p><p> 在這次畢業(yè)設(shè)計的制作過程中,我強(qiáng)烈感覺
105、到自己知識的貧乏,和對以往學(xué)習(xí)過的知識掌握不夠。從最初的茫然,到慢慢的進(jìn)入狀態(tài),再到對思路逐漸的清晰,整個寫作過程難以用語言來表達(dá)。在這個過程中,我學(xué)會了很多知識,比如Android環(huán)境的搭建、Intent、Activity、Service、ContentProvider、SQLite等,但我學(xué)會的最重要的一點是,利用現(xiàn)有的資源去解決問題,在圖書館、在網(wǎng)絡(luò)上尋找答案。</p><p> 雖然,這個軟件目前運行良
106、好,但是我認(rèn)為代碼的健壯行還很差,在整個工程的構(gòu)思方面也不足,用戶操作界面還不夠靈活,這些問題還需要今后逐一解決。與此同時,這個軟件還可以進(jìn)一步擴(kuò)展,例如雙人聯(lián)機(jī)合作,還有更多功能強(qiáng)大的道具和各式各樣的敵機(jī)。還需要更多的努力,做出讓用戶體驗更好的游戲。</p><p> 知識必須通過時間才能實現(xiàn)其價值!頭寫東西一位學(xué)會了,但真正用到的時候才發(fā)現(xiàn)是兩回事,所以我認(rèn)為只有真正會用的時候才是真正的學(xué)會了。</p
107、><p><b> 致謝</b></p><p> 本課題的設(shè)計和論文撰寫過程中,我的指導(dǎo)老師**老師給于了極大的幫助,為我提供了大量的相關(guān)資料。在完成課題設(shè)計的過程中,老師在總體設(shè)計思想上給予了許多重要的實際指導(dǎo),拓展了我的思路,使得我得以完成了任務(wù)。在此,我對劉永偉老師的指導(dǎo)表示衷心的感謝。</p><p> 同時,我也衷心的感謝**學(xué)院
108、幾年來對我的精心栽培,良好的校園環(huán)境、精良的師資隊伍、濃厚的校園文化都讓我深深懷念,都為我進(jìn)入社會提供了莫大的幫助。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 王正軍 著,《Java程序設(shè)計》,北京:人民郵電出版社,2006年。</p><p> [2] 王樹偉 著,《Java游戲編程基礎(chǔ)》,北京:電子工業(yè)出版
109、社,2005年。</p><p> [3]榮欽科技編著. Java游戲設(shè)計.北京:科海電子出版社</p><p> [4]夏云龍編著.最新Java使用手冊.電子工業(yè)出版社</p><p> [5] 武瑩 彭文明編著Java開發(fā)實用編程200例中國鐵道出版社2006年</p><p> [6] 吳亞峰 蘇亞龍 編著Android游戲開發(fā)
110、寶典2.0 人民郵電出版社。</p><p> [7] 夏少瓊.《Photoshop實戰(zhàn)教程--游刃有余》. 暨南大學(xué)出版社. 2008年第1版</p><p> [8] (美)貝斯克.《游戲開發(fā)與制作》.清華大學(xué)出版社.未著明出版時間</p><p> [9] 黃維通 魯明羽著,《Java程序設(shè)計》北京:清華大學(xué)出版社,2005年。</p>&
111、lt;p> 附錄:游戲部分主要代碼</p><p> 1、PlaneActivity類的實現(xiàn)</p><p> package wyf.ytl;</p><p> import android.app.Activity;//引入相關(guān)類</p><p> import android.os.Bundle;//引入相關(guān)類</
112、p><p> import android.os.Handler;//引入相關(guān)類</p><p> import android.os.Looper;//引入相關(guān)類</p><p> import android.os.Message;//引入相關(guān)類</p><p> import android.view.KeyEvent;//引入相關(guān)
113、類</p><p> import android.view.Window;//引入相關(guān)類</p><p> import android.view.WindowManager;//引入相關(guān)類</p><p> public class PlaneActivity extends Activity {// 在任何一個主線程中都會自動生成一個Looper(消息隊
114、列)用來儲存發(fā)送的信息通過Looper.loop();來調(diào)用儲存到Looper中的信息</p><p> int action = 0;// 鍵盤的狀態(tài),二進(jìn)制表示 從左往右表示上下左右</p><p> GameView gameView;// GameView的引用</p><p> WelcomeView welcomeView;// WelcomeVi
115、ew的引用</p><p> FailView failView;// 游戲失敗界面的引用</p><p> HelpView helpView;// HelpView的引用</p><p> WinView winView;// 歡迎界面的引用</p><p> ProcessView processView;// 進(jìn)度條界面的引用
116、</p><p> boolean isSound = true;// 是否播放聲音</p><p> Handler myHandler = new Handler() {// 用來更新UI線程中的控件</p><p> public void handleMessage(Message msg) {</p><p> if (ms
117、g.what == 1) {// 游戲失敗,玩家飛機(jī)墜毀</p><p> if (gameView != null) {</p><p> gameView.keyThread.setFlag(false);// 停止鍵盤監(jiān)聽</p><p> gameView.gameThread.setFlag(false);</p><p>
118、 gameView.moveThread.setFlag(false);</p><p> gameView = null;</p><p><b> }</b></p><p> initFailView();// 切換到FialView</p><p> } else if (msg.what == 2) {
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android操作系統(tǒng)的飛機(jī)大戰(zhàn)手機(jī)游戲畢業(yè)論文(設(shè)計)
- 基于android操作系統(tǒng)的足球小將手機(jī)游戲畢業(yè)論文
- 畢業(yè)論文-基于android操作系統(tǒng)的中國象棋手機(jī)游戲
- 基于android操作系統(tǒng)的足球小將手機(jī)游戲
- android操作系統(tǒng)畢業(yè)論文
- 基于android平臺開發(fā)的飛機(jī)射擊游戲-畢業(yè)論文
- 智能手機(jī)的操作系統(tǒng)畢業(yè)論文
- 智能手機(jī)的操作系統(tǒng)畢業(yè)論文
- 飛機(jī)大戰(zhàn)游戲開發(fā)文檔(android版)
- 基于android系統(tǒng)的手機(jī)防盜畢業(yè)論文
- 飛機(jī)大戰(zhàn)游戲開發(fā)文檔(android版)
- 畢業(yè)論文-- 基于android系統(tǒng)的股票預(yù)測游戲
- 基于Android平臺開發(fā)的飛機(jī)射擊游戲-畢業(yè)論文終稿.doc
- 基于Android平臺開發(fā)的飛機(jī)射擊游戲-畢業(yè)論文終稿.doc
- android手機(jī)輔助系統(tǒng)畢業(yè)論文
- 基于android的手機(jī)衛(wèi)士——畢業(yè)論文
- 基于android的手機(jī)衛(wèi)士——畢業(yè)論文
- 畢業(yè)論文——基于安卓坦克大戰(zhàn)游戲
- 畢業(yè)論文范文——基于android植物大戰(zhàn)僵尸
- 畢業(yè)論文范文——基于android植物大戰(zhàn)僵尸
評論
0/150
提交評論