版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)設(shè)計</b></p><p> 題 目 基于Android策略型游戲開發(fā)畢業(yè)設(shè)計 </p><p> 系 別 計算機科學(xué)與工程系 </p><p> 專 業(yè) 計算機科學(xué)與技術(shù) </p><p> 年
2、 級 級 </p><p> 層 次 </p><p> 學(xué) 號 </p><p> 姓 名 </p><p> 指導(dǎo)老師
3、 </p><p><b> 目錄</b></p><p> Abstract:5</p><p><b> 摘要:1</b></p><p><b> 1.前言1</b></p><p> 1.1 手機游戲的現(xiàn)
4、狀2</p><p> 1.1.1 手機系統(tǒng)2</p><p> 1.1.2 手機游戲的種類3</p><p> 1.1.3 android手機的特性3</p><p> 1.2 對研究課題的啟發(fā)4</p><p> 2. 需求分析與系統(tǒng)設(shè)計結(jié)構(gòu)4</p><p> 2.
5、1 Android架構(gòu)4</p><p> 2.2 系統(tǒng)設(shè)計6</p><p> 2.2.1 功能模塊劃分6</p><p> 2.2.2 運行環(huán)境7</p><p> 2.2.3 控制引擎8</p><p> 2.3 游戲研究思路10</p><p> 2.4 游戲
6、所涉及的各個類11</p><p> 2.4.1 前臺表示模塊的類結(jié)構(gòu)11</p><p> 2.4.2 游戲?qū)嶓w模塊的類結(jié)構(gòu)12</p><p> 2.4.3 數(shù)據(jù)存取模塊的類結(jié)構(gòu)12</p><p> 2.4.4 游戲工具模塊的類結(jié)構(gòu)13</p><p><b> 3.游戲?qū)崿F(xiàn)13&
7、lt;/b></p><p> 3.1 游戲開始菜單頁面設(shè)計13</p><p> 3.2 游戲主界面設(shè)計14</p><p> 3.3 數(shù)據(jù)存取模塊的開發(fā)20</p><p> 3.4 英雄角色模塊的開發(fā)23</p><p> 3.5 管理面板模塊的開發(fā)26</p><p
8、><b> 4.結(jié)束語29</b></p><p><b> 參考文獻:29</b></p><p><b> 致謝30</b></p><p> Develop The Simulation Game of Android 2.1 </p><p>
9、 Abstract: With the rapid development of SciTech and culture in nowadays, people raise their requirements for video games. From the earliest ‘Snake’ and ‘Tetris’ to network games, the charm of video games swept over the
10、world. Moreover, the emerging smart phone has offer a platform for the rapid growth of video games. These terminals provide better environment for developing mobile casual games and applications, especially iPhone and An
11、droid.</p><p> This article will research and develop a strategy game Dynasties in Flame, which is based on the Android system provided by Google. Adopting game design, map design, the development of Said l
12、ayer interface module, data access Module and Map in case of an entity module, this game is a combination of great entertainment interface and logical content. </p><p> Firstly this article introduces the s
13、trategy game’s related basic theory, operation platform and implementation technique. Secondly, it mainly researches the technical feature of Case of an entity module and data access method, which brings higher efficienc
14、y on mass data integration and data assessment. Thirdly, it researches graphic component and audio component in order to enhance the visual and audio effects of the game. Lastly, it carries a performance test of differen
15、t modules.</p><p> Keyword: Android; Simulation Game; Smartphone; Data access</p><p> Android2.1策略型游戲開發(fā)</p><p> 摘要:在科技文化高速發(fā)展的今天,人們對電子游戲娛樂的需求也日益高漲。從最初的運行于掌上游戲機的“貪吃蛇”和“俄羅斯方塊”到如今風(fēng)靡全
16、世界的網(wǎng)游無不體現(xiàn)了游戲的魅力。而隨著智能手機終端的涌現(xiàn),更是為電子游戲提供了高速發(fā)展的平臺。特別是iPhone智能手機和Android智能手機的面世,為掌上休閑游戲與應(yīng)用提供了更完善的的開發(fā)環(huán)境。</p><p> 本文基于Google公司為廣大智能手機開發(fā)者提供的Android系統(tǒng)環(huán)境,研究并開發(fā)了一款名為“烽火三國”的策略型游戲。該游戲主要是綜合使用游戲的策劃,地圖設(shè)計,表示層界面模塊的開發(fā),數(shù)據(jù)存取模塊
17、的開發(fā),地圖中可遇實體模塊的開發(fā),并將它們整合開發(fā)出一個具有良好娛樂界面和思維性的策略型游戲。</p><p> 首先,論文介紹了實現(xiàn)策略游戲的相關(guān)理論基礎(chǔ)、運行平臺和實現(xiàn)技術(shù);其次,論文重點研究了可遇實體模塊的技術(shù)特點及游戲數(shù)據(jù)的存取,讓本游戲的大量數(shù)據(jù)更易整合,提高數(shù)據(jù)的存取效率;再次,為了讓游戲具有較強的視覺和聽覺沖擊,本論文研究并融入了圖形圖像組件和音效組件;最后,論文對游戲的各個模塊進行了功能和性能測
18、試。</p><p> 關(guān)鍵詞:android;策略游戲;智能手機;數(shù)據(jù)存取</p><p><b> 1.前言</b></p><p> 隨著人們生活水平的提高,以及商品的多樣化更新的加快,人們對游戲娛樂已經(jīng)成為了生活中不可或缺的一部分。與此同時,人們的生活節(jié)奏也隨著加快,這就直接影響了人們是否只能在電腦上玩游戲。再加上經(jīng)濟全球化和智能
19、手機的普及,人們逐漸認識到手機游戲的方便,因而手機游戲成為了人們娛樂的另一種娛樂方式[1]。手機游戲帶使人們在隨時隨地都能享受到它帶來的樂趣,成為人們跨地域娛樂的重要渠道,因而逐漸的改變?nèi)藗儕蕵纺J胶拖M觀念,讓手機游戲成為了當(dāng)今的時尚[2]。</p><p> 電腦游戲從八九十年代開始便在大家的記憶里扎根,二十年過去了,說起“貪吃蛇”和“超級瑪麗”依然在腦海里根深蒂固。近來二十年,隨著計算機硬件的性能不斷的提
20、升以及軟件開發(fā)者的努力,游戲作品在創(chuàng)意和視聽效覺都有飛躍的發(fā)展。目前電腦游戲行業(yè)非常繁榮,競爭激烈。隨著智能手機的普及,越來越多的游戲開發(fā)人員逐漸把目光轉(zhuǎn)移向這個新興行業(yè)。</p><p> 目前手機游戲應(yīng)用開發(fā)方面以Android SDK、J2ME MIDP、Objective C為主流開發(fā)環(huán)境。Android SDK為開發(fā)者提供大量全面的API,包括SQLite數(shù)據(jù)庫操作的API, 2D圖形渲染的Surfa
21、ceView,3D圖形圖像框架OPENGL ES。論文在研究了Android SQLite、圖形圖像處理、AppWidget框架、多點觸控接口、多線程等游戲相關(guān)技術(shù)的基礎(chǔ)上融合中國古代三國歷史文化實現(xiàn)的一款策略型游戲。</p><p> 1.1 手機游戲的現(xiàn)狀</p><p> 無論是出于效仿,還是迫于競爭,多數(shù)的游戲運營商也加入了手機游戲的行列,使手機游戲極具競爭性。這樣導(dǎo)致了個游戲
22、研發(fā)商為了贏得最終的消費者,對手機游戲的優(yōu)缺都進行了大優(yōu)化。</p><p> 1.1.1 手機系統(tǒng)</p><p> 現(xiàn)在主流的智能手機操作系統(tǒng)主要有Google的Android系統(tǒng),蘋果公司的iOS系統(tǒng)以及微軟的Windows Mobile系列。</p><p> Android系統(tǒng)是Google推出的基于Linux平臺的開源手機操作系統(tǒng),它采用軟件疊層的
23、架構(gòu),由三層組成。底層只提供基本功能,在Linux內(nèi)核工作,由C語言開發(fā);中間層是由C++開發(fā)的Library和Virtual Machine;上層是由java開發(fā)的各種應(yīng)用軟件,本次的設(shè)計Android游戲便是在上層開發(fā)的[3]。</p><p> iOS系統(tǒng)是蘋果公司開發(fā)iPhone所用的操作系統(tǒng),它是以Darwin為基礎(chǔ),主要用于蘋果公司的平板產(chǎn)品。iOS的系統(tǒng)架構(gòu)為四層組成,分別是核心服務(wù)處、核心操作系
24、統(tǒng)層、可輕觸層、媒體層。Windows Mobile 系列操作系統(tǒng)是從微軟計算機的Windows操作系統(tǒng)演化而來的。</p><p> Windows Mobile系統(tǒng)是微軟從windows操作系統(tǒng)演化而來的。使用Windows mobile系統(tǒng)的智能手機大多采用英特爾嵌入式處理器,主頻比較高,再加上內(nèi)存、儲存卡容量也比采用其他操作系統(tǒng)的智能手機高出很多,所以性能比強勁,速度比較快。</p>&l
25、t;p> 1.1.2 手機游戲的種類</p><p> 手機游戲的種類基本和電腦游戲一樣,目前在手機上開發(fā)出的較為成功的游戲主要有FTG格斗游戲、PUZ益智類游戲、RPG角色扮演游戲、SLG策略型游戲五類。其中格斗游戲誕生于街機,曾經(jīng)風(fēng)靡一時的“街頭霸王”就是典型的代表。FTG系統(tǒng)的核心是對戰(zhàn)斗部分進行碰撞檢測計算。益智游戲需要玩家以自己的智慧對游戲的規(guī)則進行思考、判斷從而通關(guān)以獲得成就感[4]。PUZ
26、系統(tǒng)對玩家要求不高,是手機游戲中受眾面最廣的游戲,代表作品是“推箱子”。角色扮演游戲是最能與用戶共鳴的游戲,開啟了一扇通往虛擬現(xiàn)實的大門,讓玩家融入到游戲的世界里,沉浸在成長中,“仙劍奇?zhèn)b傳”是其經(jīng)典例子。RPG游戲的核心是代表玩家角色成長的升級系統(tǒng),一個個故事情節(jié)貫穿游戲,牽動著玩家的情感。策略型游戲沒有固定的玩法,玩家根據(jù)自己的喜好排兵布陣,與敵方展開戰(zhàn)斗。SLG游戲的核心是游戲的不定性,完全由玩家主觀意識控制,其代表作是“三國志”
27、。</p><p> 手機游戲研發(fā)的重點是游戲的情節(jié)和UI。視覺是人的第一感知,UI的好壞直接影響人們對于游戲的第一印象,所以一個好的UI是非常重要的。游戲的情節(jié)是一個游戲可玩性的重點,是否有內(nèi)涵、有深度,有未知的東西可玩,有否求追,還是無盡的刷刷刷,關(guān)系到一個游戲的壽命。韓國游戲就因為不重視情節(jié),沒有什么深度,所以被戲稱為泡菜游戲。游戲的操縱方面也有革命性發(fā)展,從最初按鍵操縱到后來的屏幕多點觸控再發(fā)展到現(xiàn)在的
28、重力感應(yīng)操縱。</p><p> 隨著手機游戲的高速發(fā)展,Google公司也越來越重視游戲的開發(fā)。在推出的Android2.3版本時增強了對游戲開發(fā)支持力度,同時提升了多媒體影音和通信功能。增加了新的垃圾回收和優(yōu)化處理事件,以提高對游戲的支持能力。原生代碼可直接存取輸入和感應(yīng)器事件、EGL/OpenGL ES、OpenSL ES、新的管理窗口和生命周期的框架。同時還強化了SQLite數(shù)據(jù)庫管理功能,更加方便游戲
29、數(shù)據(jù)的存取[5]。</p><p> 1.1.3 android手機的特性</p><p> Android系統(tǒng)是一個處處體現(xiàn)與手機相關(guān)特性,應(yīng)用于智能手機之上的操作系統(tǒng)。Android SDK2.2只要的特性有:</p><p> 可重用和可替換組件的程序應(yīng)用框架</p><p> 針對移動設(shè)備優(yōu)化過的dalvik虛擬機</p
30、><p> 繼承了基于開源webkit引擎的網(wǎng)頁瀏覽器</p><p> 經(jīng)過優(yōu)化的自定義2D圖形庫和基于opensl ES 1.0庫 可選硬件加速</p><p> SQLite結(jié)構(gòu)化的數(shù)據(jù)存儲數(shù)據(jù)庫</p><p> 支持常規(guī)的音頻視頻多媒體格式</p><p> 藍牙、GPRS-EDGE、3G和wifi無線
31、網(wǎng)絡(luò)</p><p> 相機、GPS全球定位、導(dǎo)航和感應(yīng)加速器</p><p> 豐富的開發(fā)環(huán)境包含設(shè)備模擬器、工具、調(diào)試器、內(nèi)存和性能分析工具以及Eclipse繼承開發(fā)環(huán)境插件</p><p> 1.2 對研究課題的啟發(fā)</p><p> 論文研究了Andriod SDK開發(fā)環(huán)境以及該環(huán)境下的appwidget框架、SQLite數(shù)據(jù)
32、庫、surfaceview 2D圖形渲染技術(shù)等手機游戲開發(fā)相關(guān)技術(shù)。在本游戲軟件中,首先運用android內(nèi)嵌的SQLite數(shù)據(jù)庫實現(xiàn)游戲數(shù)據(jù)的存取,為游戲的各個功能模塊提供數(shù)據(jù)源。本論文重點研究了兩種游戲數(shù)據(jù)的存取方式,第一種方式是android內(nèi)置的sqlite數(shù)據(jù)庫,用于存取大容量的永久性游戲數(shù)據(jù),提供給游戲一個安全穩(wěn)定的數(shù)據(jù)源;第二種方式是share preferences,是一個輕量級的數(shù)據(jù)存儲,用于暫存游戲的中間數(shù)據(jù)。二者構(gòu)
33、成游戲的數(shù)據(jù)核心。其次通過appwidget框架的broadcast和service機制,將游戲界面映射至手機桌面,使用戶更直接的體驗游戲的精彩。</p><p> 2. 需求分析與系統(tǒng)設(shè)計結(jié)構(gòu)</p><p> 這里要講的是android的架構(gòu),系統(tǒng)的需求分析與系統(tǒng)設(shè)計結(jié)構(gòu),分析本游戲的可運行性以及詳細的介紹了烽火三國系統(tǒng)的結(jié)構(gòu)。</p><p> 2.1
34、Android架構(gòu)</p><p> Android平臺大致可以劃分成三個大層次,包括一個操作系統(tǒng),中間件和應(yīng)用程序,android是一組面向移動設(shè)備的軟件包。</p><p> 圖2.1為android系統(tǒng)軟件層架構(gòu)圖,android系統(tǒng)軟件層由上往下分成應(yīng)用程序(applications)、應(yīng)用框架(application frameworks)、庫函數(shù)(libraries)、運行
35、時庫(android runtime)、操作系統(tǒng)(linux kernel):</p><p> 圖2.1 android軟件層架構(gòu)圖</p><p><b> 1.應(yīng)用程序</b></p><p> Android將同一系列核心應(yīng)用程序包一起發(fā)布,基本上都是通過JAVA語言開發(fā)的能夠獨立完成特別功能的應(yīng)用程序。該應(yīng)用程序包包括SMS短消
36、息程序,日歷,電子地圖,瀏覽器,聯(lián)系人等基本的應(yīng)用程序。</p><p> 應(yīng)用程序的框架組件主要包括9種: UI組件,如按鈕、文本框、標簽、列表等,如果想方便高效的創(chuàng)建友好的用戶交互界面就必須要靈活的運用這些組件; Content Providers內(nèi)容提供者,可以簡單的理解成為應(yīng)用程序提供的一種服務(wù),讓服務(wù)與應(yīng)用程序之間能夠?qū)崿F(xiàn)數(shù)據(jù)的共享與相互訪問; Resource Manager資源管理,android
37、中大量的資源很多例如顏色、字體、圖片、UI組件的Id、用戶界面(Layout xml)等等都被稱之為資源,這些豐富的資源,都需要通過Resource Manager來統(tǒng)一進行管理; Notification Manager消息通知管理,它可以在不影響用戶使用設(shè)備喝正常操作的時候在系統(tǒng)的狀態(tài)欄上自動的提供消息提示,讓用戶可以及時的看到; Activity Manager活動管理,它管理著所有應(yīng)用程序的生命周期,并且控制著應(yīng)用程序的導(dǎo)航,充
38、當(dāng)一個控制器的角色。每個Activity相當(dāng)于Windows應(yīng)用中的一個窗口。通常的應(yīng)用一般都是通過多個Activity交互的構(gòu)成; Window Manager窗口管理,所有啟動的窗口都被其管理; Location Ma</p><p><b> 2.應(yīng)用框架</b></p><p> 開發(fā)人員也可以在自己開發(fā)的項目中直接訪問應(yīng)用程序所使用的API框架。該應(yīng)用程
39、序的架構(gòu)設(shè)計簡化了組件的重用;在遵循框架安全性限制的原則下,任何一個應(yīng)用程序都可以發(fā)布它的功能塊給任何其它的應(yīng)用程序使用。同樣,該應(yīng)用程序重用機制也使用戶可以重構(gòu)來突破原先組件的功能限制。</p><p> 3.庫函數(shù)/運行時庫</p><p> 該層內(nèi)容大部分已經(jīng)涉及到底層,普通的應(yīng)用不需直接對此層進行操作。每一個Android應(yīng)用程序都在它自己的進程中運行,都擁有一個獨立的Dalv
40、ik虛擬機實例。Dalvik VM是android平臺下的一個虛擬機。Dalvik虛擬機執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對小內(nèi)存使用做了優(yōu)化。同時虛擬機是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯,然后通過SDK中 的“dx” 工具轉(zhuǎn)化成“.dex”格式由虛擬機執(zhí)行[6]。</p><p> 4.Linux 內(nèi)核</p><p> Android 的核心系統(tǒng)服
41、務(wù)是在 Linux 2.6 內(nèi)核的基礎(chǔ)上開發(fā)出來的,包括安全性,內(nèi)存管理,進程管理, 網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型[7]。驅(qū)動程序模型包含觸摸屏驅(qū)動、攝像頭驅(qū)動、WiFi驅(qū)動、閃存驅(qū)動、音頻驅(qū)動、按鍵驅(qū)動、電源管理驅(qū)動、IPC驅(qū)動共八個重要驅(qū)動。</p><p><b> 2.2 系統(tǒng)設(shè)計</b></p><p> 2.2.1 功能模塊劃分</p><
42、p> 該策略型游戲應(yīng)該具備有視圖面板、管理面板、游戲提示、可遇實體、英雄角色、地圖加載、存檔與讀檔、公式計算、常量管理等功能。根據(jù)游戲系統(tǒng)功能的需求分析,可以將系統(tǒng)的功能劃分為4個模塊。</p><p> ◆ 前臺表示模塊</p><p> 該模塊用于游戲的畫面渲染,包括視圖界面、管理面板、游戲提示,面向所有的玩家,是玩家直接操作的頁面。</p><p
43、> ◆ 游戲?qū)嶓w模塊</p><p> 該模塊是游戲主要用于后臺游戲邏輯,包括可遇實體模塊、英雄角色模塊,可遇實體模塊是地圖上那些可以被英雄遇到并假發(fā)一系列動作的實體,由于每個玩家的玩法不同導(dǎo)致成長不同,所獲取的頁面也會不同。</p><p> ◆ 數(shù)據(jù)存取模塊</p><p> 該模塊用于獲取源文件信息和玩家游戲數(shù)據(jù),包括地圖加載模塊和游
44、戲的存檔與讀檔模塊。地圖加載主要是將從地圖設(shè)計器中所獲取的地圖信息文件加載到游戲中生成地圖矩陣的過程。存檔與讀檔用于玩家對游戲的連續(xù)性。</p><p> ◆ 工具類模塊</p><p> 該模塊將自身的靜態(tài)類提供給游戲中的其他類使用。本游戲中的工具類包括對常量進行統(tǒng)一管理的constantUtil和用于存儲公式的gameformula類,游戲的公式主要是對戰(zhàn)斗的結(jié)果、英雄體力增
45、減等計算。</p><p> 根據(jù)本系統(tǒng)的功能模塊介紹,本游戲的系統(tǒng)功能模塊圖如圖2.2所示。</p><p> 圖2.2 烽火三國系統(tǒng)功能模塊圖</p><p> 2.2.2 運行環(huán)境</p><p> 操作系統(tǒng):Android2.1</p><p> 要求手機有足夠大容量的內(nèi)存。</p>
46、<p> 2.2.3 控制引擎</p><p> Activit是Android構(gòu)造塊中最基本的也是必須的一種,所有程序的流程都必須運行于Activity中。在游戲程序中,各個Activity是層級的關(guān)系,一個Activity通常就是一個單獨的屏幕。每一個Activity都被實現(xiàn)為一個獨立的類,并且繼承于Activity這個基類。這個Activity類將會顯示由幾個Views組件組成的用戶接口,并
47、對事件做出響應(yīng)。Activity是Android用戶唯一可以看見的東西,幾乎所有的Activity都與用戶進行交互,它最主要的作用是創(chuàng)建顯示窗口,在程序中可以通過setContentView(View)來顯示在Res/Layout中自定義的UI界面,并可提取UI元素進行操作[8]。</p><p> 一個游戲由若干屏幕頁面組成,所以便有多個Activity。Activity之間的可以相互切換,并通過Intent
48、來實現(xiàn)通信。Android系統(tǒng)是通過Activity棧來管理Activity的,在游戲的運行過程不同的Activity會經(jīng)歷不同的生命周期。 Activity的生命周期中本質(zhì)上分為四種狀態(tài)即:</p><p> ?。?)activity在屏幕的前景中則處于activity棧的頂端,它是active或者running狀態(tài)。 </p><p> ?。?)activity失去了焦點但是仍然可見,
49、如這個activity頂上遮擋了一個透明的或者非全屏的activity,它的狀態(tài)則是paused。一個paused狀態(tài)的activity完全是alive的。它維護自己所有的狀態(tài)和成員信息,而且仍然在window manager的管理中,但當(dāng)系統(tǒng)內(nèi)存極度貧乏時也會將其killed[9]。</p><p> ?。?)activity由于其他的activity而完全變暗,它就進入了stopped狀態(tài)。它仍然保持著所有的
50、狀態(tài)和成員的信息,可是,他對于用戶來說不可見,當(dāng)別的地方需要內(nèi)存的時候它經(jīng)常會被killed。 </p><p> (4)activity是paused或者stopped,系統(tǒng)需要將其清理出內(nèi)存的時可以命令其finish或者簡單kill其進程。當(dāng)它重新在用戶面前顯示的時候,它必須完全重新啟動并且將其關(guān)閉之前的狀態(tài)全部恢復(fù)回來。</p><p> 游戲在操作過程中可能會發(fā)生界面切換,遇到
51、接電話、收發(fā)短信甚至電量不足關(guān)機等偶發(fā)情況都會影響Activity的狀態(tài)。Android系統(tǒng)對資源控制較嚴,在狀態(tài)的轉(zhuǎn)換時可能對資源回收,為了保證程序的正確性,必須在onPause()里寫上持久層操作的代碼,將游戲產(chǎn)生的數(shù)據(jù)都保存到存數(shù)據(jù)庫中。游戲運行中生命周期的變化而帶來的其他問題也很多,例如游戲創(chuàng)建的線程在運行中被中斷了,則可以暫停、殺掉或數(shù)據(jù)回滾來維護此線程。因為Activity可能被殺掉,所以線程中使用的變量和一些界面元素就需要
52、采用Android的消息機制Handler或Message來處理多線程和界面交互的問題。</p><p> Intent是Android系統(tǒng)中用于通信和交互的一種機制,不但可以實現(xiàn)不同應(yīng)用間的通信與交互還可以在應(yīng)用程序內(nèi)部的不同Activity以及Service間實現(xiàn)交互。在通信過程Intent起了一個媒介的作用,提供組件互相調(diào)用的相關(guān)信息,為調(diào)用者與被調(diào)用者解耦。在不同應(yīng)用程序交互時,Intent負責(zé)對應(yīng)用中
53、一次操作的動作、動作涉及數(shù)據(jù)、附加數(shù)據(jù)進行描述,Android則根據(jù)此Intent的描述,負責(zé)找到對應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。在本寵物游戲中不同Activity就是通過Intent來交換數(shù)據(jù)的[10]。</p><p> 游戲中Activity的相互調(diào)用的動作需要在AndroidManiFest.xml的Intent Filter中進行描述,當(dāng)發(fā)生調(diào)用關(guān)系時,Android會
54、解析對應(yīng)的Intent來決定如何來調(diào)用Activity,需要解析Intent屬性包括以下六類:</p><p> ?。?)Action,指定要執(zhí)行的動作??梢允亲约憾x的動作也可以是系統(tǒng)預(yù)定義的動作。寵物游戲中指定的通常是自定義的動作以完成特定功能,如掉調(diào)用輸入屏幕為游戲提供用戶數(shù)據(jù)。系統(tǒng)預(yù)定義的動作通常是與手機使用緊密相關(guān)的動作,例如發(fā)送短信的動作ACTION_CALL。</p><p>
55、; ?。?)Data,指定動作要操作的數(shù)據(jù),通常用URI來表示,例如聯(lián)系人的URI為content://contacts/1。</p><p> (3)type,顯式指定Intent的數(shù)據(jù)類型。</p><p> ?。?)category,動作的類別,例如LAUNCHER_CATEGORY 表示此動作為頂級應(yīng)用,在應(yīng)用軟件啟動后便執(zhí)行,相當(dāng)于MAIN函數(shù)。</p><
56、p> (5)component,指定Intent的的目標組件的類名稱。</p><p> (6)extras,指定動作的附加信息集合。需要傳遞的數(shù)據(jù)都可以保存到extras中來實現(xiàn)數(shù)據(jù)通信。</p><p> 相應(yīng)動作在Intent Filter中配置好后就可以在Activity中實例化,如果需要傳遞參數(shù)則需要綁定Bundle來附加需要傳遞的數(shù)據(jù),最后使用startActivi
57、ty(myIntent)來啟動動作。</p><p> Service是一種沒有用戶界面的后臺程序,通常為前臺Activity服務(wù)。它在Activity中由Content.startService()啟動,也可以使用Content.bindService連接到另一個Service,之后可以通過Service提供的接口進行通信。當(dāng)一個Service啟動之后其他組件可以綁定到此Service,并通過遠程調(diào)用來調(diào)用它
58、定義的方法。在寵物游戲中定義了一個為AppWidget服務(wù)的Service和一個實現(xiàn)游戲版本升級的Service。由于Service運行于主進程中的,為減少對主線程或UI操作的阻塞,通常在Service中另啟動一個新線程來完成特定操作。Service的生命周期不一定與前臺Activity同步,可以使用stopService()方法來結(jié)束Service從而回收線程占用的資源</p><p> 在策略游戲中要實現(xiàn)角
59、色動畫以及游戲聲效,必須要采用多線程技術(shù)來與游戲同步,另外為AppWidget提供動畫的Service也需要后臺線程來支持。在Android虛擬機中每個線程的資源都有一定的限制,游戲在渲染角色動畫時會消耗大量的系統(tǒng)資源,有時會出現(xiàn)內(nèi)存溢出的狀況,為減少線程阻塞的情況發(fā)生可以采取多線程渲染的方式。</p><p> 游戲在運行后會進入主屏幕的Activity,這時會啟動一個主線程,這個線程主要負責(zé)與UI相關(guān)的工作
60、,通常又稱為UI線程。之后主線程根據(jù)需要實例化渲染線程、聲效線程以及其他服務(wù)線程并用Run()方法啟動。當(dāng)這些線程需要與其他線程或主線程通信同步時可以通過Android提供的Handle和Looper來進行數(shù)據(jù)以及參數(shù)傳遞。</p><p> Android的線程分為有消息循環(huán)的線程和沒有消息循環(huán)的線程。有消息循環(huán)的線程一般都會有一個Looper,主線程就是一個消息循環(huán)的線程。針對這種消息循環(huán)的機制引入了一個新
61、的機制Handler。如果有消息循環(huán),就要往消息循環(huán)里面發(fā)送相應(yīng)的消息,自定義消息一般都會有自己對應(yīng)的處理,消息的發(fā)送和清除,把這些都封裝在Handler里面。Handler只是針對那 些有Looper的線程,不管是UI線程還是子線程,只要有Looper,就可以往消息隊列里面添加?xùn)|西,并做相應(yīng)的處理。但是關(guān)于UI相關(guān)的東西,就不能放在子線程中,因為子線程是不能操作UI的,只能進行數(shù)據(jù)、系統(tǒng)等其他非UI的操作。一個Handler的創(chuàng)建它就
62、會被綁定到這個線程的消息隊列中,如果是在主線程創(chuàng)建的,那就不需要寫代碼來創(chuàng)建消息隊列了,默認的消息隊列會在主線程被創(chuàng)建。但是如果是在子線程的話,就必須在創(chuàng)建Handler之前先初始化線程的消息隊列。</p><p> 2.3 游戲研究思路</p><p> 本游戲的故事背景定在三國時期,游戲中的人名、城池名、對話等都根據(jù)三國時期的歷史背景來確定。玩家的目標是控制英雄在三國亂世中并起中通
63、過不斷擴張自己的勢力最終統(tǒng)一漢室。</p><p> 本游戲的地圖界面采用圖元技術(shù),由于本游戲中的地圖元素不僅僅只有通過與否那么簡單,因此開發(fā)該游戲時必須使用地圖設(shè)計器,否則在設(shè)計地圖及地圖元素時很難進行。</p><p> 本游戲采用的游戲時間為正90°2.5D俯視視角。同時由于地圖的尺寸超過了手機屏幕的尺寸,還需要在游戲中實現(xiàn)滾屏功能。</p><p&
64、gt; 2.4 游戲所涉及的各個類</p><p> 游戲中各個類的應(yīng)用的好壞將直接影響到游戲的可玩性和實現(xiàn)的效果。本節(jié)將對實現(xiàn)了游戲各個功能模塊的具體類進行簡單的說明。</p><p> 2.4.1 前臺表示模塊的類結(jié)構(gòu)</p><p> 圖2.3 前臺表示模塊的類結(jié)構(gòu)</p><p> AboutView、MenuView和Ga
65、meView等一系列繼承自SurfaceView的視圖是組成游戲視圖界面的主要部分</p><p> GameAlert是繼承自O(shè)bject的自定義類,其子類組成了游戲提示模塊</p><p> 2.4.2 游戲?qū)嶓w模塊的類結(jié)構(gòu)</p><p> 圖2.4 游戲?qū)嶓w模塊的類結(jié)構(gòu)</p><p> MyDrawable對象是繪制地圖的圖
66、元,其抽象類MyMeetableDrawable類實現(xiàn)對象在與英雄相遇,在相遇之后可以觸發(fā)特定的操作。</p><p> Hero對象是游戲中另一個重要的實體對象,其封裝了英雄的屬性</p><p> 2.4.3 數(shù)據(jù)存取模塊的類結(jié)構(gòu)</p><p> 圖2.5 游戲存取模塊的類結(jié)構(gòu)</p><p> GameData負責(zé)加載并生成下
67、層平鋪層的地圖。</p><p> GameData2負責(zé)加載并生成上層平鋪層的地圖,地圖中的可遇實體對象位于上層平鋪層。</p><p> SerializableGame實現(xiàn)存儲游戲狀態(tài)和加載已存儲的游戲。</p><p> 2.4.4 游戲工具模塊的類結(jié)構(gòu)</p><p> 圖2.6 游戲工具模塊的類結(jié)構(gòu)</p>
68、<p> 工具類模塊比較簡單,主要是對游戲中用到的常量進行統(tǒng)一管理。</p><p><b> 3.游戲?qū)崿F(xiàn)</b></p><p> 從游戲功能模塊可以知道,本游戲的模塊可以分為一下幾個部分。</p><p><b> 數(shù)據(jù)存取模塊</b></p><p><b>
69、英雄角色模塊</b></p><p><b> 表示層界面模塊</b></p><p><b> 管理面板模塊</b></p><p><b> 地圖中可遇實體模塊</b></p><p><b> 英雄技能模塊</b></p&g
70、t;<p><b> 游戲提示模塊</b></p><p> 下面對烽火三國的一些關(guān)鍵部分的模塊給予介紹。</p><p> 3.1 游戲開始菜單頁面設(shè)計</p><p> 菜單頁面是玩家打開游戲后所見到的第一個頁面,其中提供了初入江湖、風(fēng)云再起、音效設(shè)置、江湖指引、群英薈萃、封劍歸隱等選項。設(shè)計的頁面如圖3.1所示。&l
71、t;/p><p> 圖3.1 烽火三國開始菜單頁面</p><p> 3.2 游戲主界面設(shè)計</p><p> 當(dāng)玩家開始游戲后,進入游戲的主界面。玩家可以通過自己的玩法來擴張自己的領(lǐng)地,招募更多的武將。主UI的設(shè)計如圖3.2所示。</p><p> 圖3.2 烽火三國主UI</p><p> 主UI各個功能代碼
72、實現(xiàn)如程序清單。</p><p> ackage wyf.ytl;</p><p> import android.app.Activity;</p><p> import android.os.Bundle;</p><p> import android.os.Handler;</p><p> imp
73、ort android.os.Looper;</p><p> import android.os.Message;</p><p> import android.view.KeyEvent;</p><p> import android.view.View;</p><p> import android.view.Window
74、;</p><p> import android.view.WindowManager;</p><p> public class HDZGActivity extends Activity {</p><p> LoadingView loadingView;//進度條界面的引用</p><p> MenuView menuVi
75、ew;//開始游戲的主菜單界面 </p><p> GameView gameView;//游戲主界面</p><p> HelpView helpView;//幫助界面</p><p> SoundView soundView;//剛開始時選擇是否開啟聲音的界面</p><p> SoundManageView soundMan
76、ageView;//聲音設(shè)置界面</p><p> ScreenRollView screenRoll;//竹簡滾屏界面</p><p> AboutView aboutView;//關(guān)于界面</p><p> boolean isBackSound = true;//是否有背景聲音</p><p> boolean isStartS
77、ound = true;//開場聲音</p><p> boolean isBattleSound = true;//戰(zhàn)斗聲音</p><p> boolean isEnvironmentSound = true;//環(huán)境音</p><p> View currentView = null;//當(dāng)前的View</p><p> Han
78、dler myHandler = new Handler(){//用來更新UI線程中的控件</p><p> public void handleMessage(Message msg) {</p><p> switch(msg.what){</p><p> case 1://收到LoadingView的消息,切到MenuView</p>&
79、lt;p> if(loadingView != null){</p><p> loadingView = null;//釋放LoadingView</p><p><b> }</b></p><p> toMenuView();//切換到開始游戲時的主菜單</p><p><b> brea
80、k;</b></p><p> case 2://收到MenuView的消息,切換到ScreenRoll竹簡滾屏</p><p> if(loadingView != null){</p><p> loadingView = null;</p><p><b> }</b></p>&
81、lt;p> if(menuView != null){//釋放</p><p> menuView = null;</p><p> } </p><p> screenRoll = new ScreenRollView(HDZGActivity.this);</p><p> setContentView(
82、screenRoll);</p><p><b> break;</b></p><p> case 3://收到LoadingView的消息,切到GameView</p><p> if(loadingView != null){</p><p> loadingView = null;//釋放LoadingV
83、iew</p><p><b> }</b></p><p> toGameView();//切換到游戲的主界面</p><p><b> break; </b></p><p> case 4://收到MenuView界面的消息,切換到HelpView</p><p&g
84、t; helpView = new HelpView(HDZGActivity.this,5);</p><p> HDZGActivity.this.currentView = helpView;//設(shè)置當(dāng)前的View為HelpView</p><p> HDZGActivity.this.setContentView(helpView);</p><p>
85、<b> break;</b></p><p><b> case 5:</b></p><p> menuView = new MenuView(HDZGActivity.this);</p><p> toMenuView();</p><p><b> break;<
86、/b></p><p><b> case 6:</b></p><p> toGameView();//切換到游戲的主界面</p><p><b> break;</b></p><p> case 7://開始時的聲音選擇界面?zhèn)鱽淼南?lt;/p><p>
87、toLoadingView(1);</p><p> new Thread(){//后臺啟動加載需要加載的View</p><p> public void run(){</p><p> Looper.prepare();</p><p> menuView = new MenuView(HDZGActivity.this);//初
88、始化MenuView</p><p><b> }</b></p><p> }.start();</p><p><b> break;</b></p><p><b> case 8:</b></p><p> helpView = new
89、 HelpView(HDZGActivity.this,6);</p><p> HDZGActivity.this.currentView = helpView;//設(shè)置當(dāng)前的View為HelpView</p><p> HDZGActivity.this.setContentView(helpView);</p><p><b> break;&
90、lt;/b></p><p><b> case 9:</b></p><p> soundManageView = new SoundManageView(HDZGActivity.this,5);</p><p> HDZGActivity.this.currentView = soundManageView; </p&g
91、t;<p> HDZGActivity.this.setContentView(soundManageView);</p><p><b> break;</b></p><p><b> case 10:</b></p><p> soundManageView = new SoundManageV
92、iew(HDZGActivity.this,6);</p><p> HDZGActivity.this.currentView = soundManageView;</p><p> HDZGActivity.this.setContentView(soundManageView);</p><p><b> break;</b><
93、;/p><p><b> case 11:</b></p><p> if(loadingView != null){</p><p> loadingView = null;</p><p><b> }</b></p><p> if(screenRoll != n
94、ull){//釋放</p><p> screenRoll = null;</p><p><b> } </b></p><p> toLoadingView(3);</p><p> new Thread(){ </p><p> public void run(){</p&
95、gt;<p> Looper.prepare();</p><p> gameView = new GameView(HDZGActivity.this);//初始化GameView</p><p><b> }</b></p><p> }.start();</p><p><b>
96、break;</b></p><p> case 12://從AboutView傳來的消息,需要到MenuView</p><p> menuView = new MenuView(HDZGActivity.this); </p><p> HDZGActivity.this.setContentView(menuView);&l
97、t;/p><p> HDZGActivity.this.currentView = menuView;</p><p><b> break;</b></p><p> case 13://從MenuView傳來的消息,要到AboutView</p><p> if(aboutView == null){</p
98、><p> aboutView = new AboutView(HDZGActivity.this);</p><p><b> }</b></p><p> HDZGActivity.this.setContentView(aboutView);</p><p> HDZGActivity.this.current
99、View = aboutView;</p><p><b> break;</b></p><p> case 14://從GameView傳來的消息,要到MenuView</p><p> menuView = new MenuView(HDZGActivity.this);</p><p> HDZGActi
100、vity.this.setContentView(menuView);</p><p> HDZGActivity.this.currentView = menuView;</p><p> break; </p><p><b> case 99:</b></p><p> if
101、(loadingView != null){</p><p> loadingView = null;</p><p><b> }</b></p><p> currentView = null;</p><p> if(SerializableGame.check(HDZGActivity.this)){&l
102、t;/p><p> toLoadingView(101);</p><p> new Thread(){</p><p> public void run(){</p><p><b> try{</b></p><p> Thread.sleep(2000);</p><
103、;p><b> }</b></p><p> catch(Exception e){</p><p> e.printStackTrace();</p><p><b> }</b></p><p> Looper.prepare();</p><p> i
104、f(gameView==null)</p><p><b> {</b></p><p> gameView = new GameView(HDZGActivity.this);</p><p><b> }</b></p><p> SerializableGame.loadingGame
105、Status(gameView);</p><p><b> }</b></p><p> }.start();</p><p><b> }</b></p><p><b> break;</b></p><p><b> case
106、 100:</b></p><p> if(gameView != null){</p><p> HDZGActivity.this.setContentView(gameView);</p><p><b> }</b></p><p><b> break;</b><
107、/p><p><b> }</b></p><p><b> }</b></p><p><b> };</b></p><p> public void onCreate(Bundle savedInstanceState) {</p><p>
108、 super.onCreate(savedInstanceState);</p><p><b> //全屏</b></p><p> requestWindowFeature(Window.FEATURE_NO_TITLE); </p><p> getWindow().setFlags(WindowManager.LayoutPara
109、ms.FLAG_FULLSCREEN , </p><p> WindowManager.LayoutParams.FLAG_FULLSCREEN);</p><p> soundView = new SoundView(this);</p><p> this.setContentView(soundView);//先切到簡單的聲音開關(guān)界面</p&g
110、t;<p> GameData.resources=this.getResources();</p><p> GameData.initMapImage();</p><p> GameData.initMapData();</p><p> GameData2.resources=this.getResources();</p>
111、<p> GameData2.initBitmap();</p><p> GameData2.initMapData();</p><p> GameView.initBitmap(this.getResources());</p><p> BattleField.initBitmap(this.getResources());</p
112、><p> ManPanelView.initBitmap(this.getResources());</p><p> WuJiangView.initBitmap(this.getResources());</p><p> UseSkillView.initBitmap(this.getResources());</p><p>
113、CityManageView.initBitmap(this.getResources());</p><p> SelectGeneral.initBitmap(this.getResources());</p><p> TianXiaView.initBitmap(this.getResources());</p><p><b> }<
114、/b></p><p> public void toLoadingView(int toViewID){</p><p> loadingView = new LoadingView(this,toViewID);//初始化進度條</p><p> this.currentView = loadingView;</p><p>
115、 this.setContentView(loadingView);//切換到進度條View</p><p><b> }</b></p><p> //切換到開始游戲的主菜單</p><p> public void toMenuView(){</p><p> if(this.menuView != nul
116、l){//當(dāng)menuView不為空時切屏</p><p> this.currentView = menuView;</p><p> this.setContentView(menuView);</p><p><b> }</b></p><p> else{//當(dāng)為空時打印并退出</p>&l
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于android平臺的手機游戲開發(fā)【畢業(yè)設(shè)計】
- 畢業(yè)設(shè)計--基于android的雷電射擊游戲開發(fā)
- android游戲畢業(yè)設(shè)計
- 基于android平臺的飛機游戲畢業(yè)設(shè)計
- 基于android平臺的飛機游戲畢業(yè)設(shè)計
- 基于android數(shù)獨游戲設(shè)計_畢業(yè)設(shè)計論文
- 基于android平臺的手機游戲開發(fā)【畢業(yè)設(shè)計+開題報告+文獻綜述】
- 基于android平臺的飛機游戲畢業(yè)設(shè)計x
- 基于Android的游戲設(shè)計與開發(fā).pdf
- 手機游戲開發(fā)畢業(yè)設(shè)計
- 畢業(yè)論文--基于android平臺的beatplane游戲開發(fā)
- 基于android系統(tǒng)的打氣球游戲的設(shè)計與實現(xiàn)畢業(yè)設(shè)計
- 策略型手機游戲設(shè)計與開發(fā).pdf
- android游戲畢業(yè)設(shè)計開題報告和外文翻譯
- 畢業(yè)設(shè)計---游戲開發(fā)實現(xiàn)與設(shè)計
- 基于android的游戲開發(fā)開題報告
- 基于android平臺開發(fā)的飛機射擊游戲-畢業(yè)論文
- 基于android的游戲開發(fā)開題報告
- 基于android的斗地主游戲的設(shè)計與開發(fā)
- 基于android的esl管理系統(tǒng)的設(shè)計與開發(fā)【畢業(yè)設(shè)計】
評論
0/150
提交評論