基于android推箱子游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)設(shè)計(jì)(論文)</p><p>  題 目 基于Android推箱子游戲的設(shè)計(jì)與實(shí)現(xiàn) </p><p>  系(院) 計(jì)算機(jī)科學(xué)與工程學(xué)院 </p><p>  基于Android推箱子游戲的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  摘 要</b></p

2、><p>  本系統(tǒng)主要是實(shí)現(xiàn)基于Android的推箱子游戲,推箱子是一款來(lái)自日本的古老游戲,其設(shè)計(jì)目的是訓(xùn)練人的邏輯思維能力。游戲場(chǎng)景一般是設(shè)定在空間狹小的倉(cāng)庫(kù)中,要求把箱子擺放到指定位置。這就要求玩家巧妙的運(yùn)用有限的空間和通道,合理的安排箱子的位置和移動(dòng)次序才可能完成任務(wù)。隨著計(jì)算機(jī)游戲的發(fā)展,很多編程愛好者基于該游戲的思想開發(fā)出了各種版本、各種類型的推箱子。這其中也包括很多手機(jī)版本的實(shí)現(xiàn),伴隨著Android

3、SDK技術(shù)的不斷發(fā)展,一些基于Android應(yīng)用也不斷推陳出新,很快推箱子游戲便進(jìn)入了千家萬(wàn)戶。此Android推箱子游戲是基于Android SDK2.2基礎(chǔ)上設(shè)計(jì)的,主要分為游戲菜單界面、玩家定制功能、游戲數(shù)據(jù)存儲(chǔ)、游戲背景音樂(lè)設(shè)置、游戲幫助等功能模塊的設(shè)計(jì)與實(shí)現(xiàn),其中游戲菜單界面模塊主要是供用戶功能選擇而用的;玩家定制則主要是通過(guò)提供游戲難度選擇,使玩家根據(jù)自己的情況選擇不同的關(guān)卡;游戲用戶數(shù)據(jù)存儲(chǔ)主要是采用輕量級(jí)數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)存

4、儲(chǔ)游戲用戶的成績(jī);游戲背景音樂(lè)設(shè)置主要是實(shí)現(xiàn)用戶可以選擇自己喜歡的音樂(lè)的功能;其次還包括音量的大小開關(guān);用戶游戲指南等功能模塊。</p><p>  本系統(tǒng)采用MVC開發(fā)模式,使用SQLite數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù),基于Android SDK2.2開發(fā)平臺(tái),使用Eclipse+Android SDK2.2+DDMS+DroidDraw作為系統(tǒng)開發(fā)、調(diào)試的主要工具</p><p>  關(guān)鍵詞:And

5、roid推箱子游戲 MVC SQLite Android SDK2.2</p><p>  The Design and Implementation of the PushBox System Based on Android</p><p><b>  Abstract</b></p><p>  This system mainly

6、 is to realize the pushed box game based on Android ,Pushed box is a section from Japan's oldest game and designed to train people logical thinking ability. Game scene generally are set in the narrow space warehouse,

7、 and demanded the box is put to the appointed place. This requires player clever use limited space and channel, reasonable arrangement of the box location and movement order just may complete the task. Along with the com

8、puter game development, many lovers of program</p><p>  The system USES the MVC development pattern, use SQLite database storage technology, based on SDK2.2 development platform, use Android Eclipse SDK2.2 D

9、DMS + + + Android DroidDraw as system development, the commissioning of the main tools</p><p>  Keywords: Android pushed box game. SDK2.2 MVC SQLite Android目 錄</p><p><b>  1 引言1</b>

10、</p><p>  1.1 開發(fā)背景1</p><p>  1.2 開發(fā)目的和意義2</p><p>  1.3 論文研究?jī)?nèi)容3</p><p>  2 Android推箱子系統(tǒng)的相關(guān)研究4</p><p>  2.1MVC開發(fā)模式4</p><p>  2.2 推箱子游戲策劃5&

11、lt;/p><p>  2.3基于Android SDK2.2的開發(fā)技術(shù)5</p><p>  2.4Android中的文件存儲(chǔ)及輕量級(jí)數(shù)據(jù)庫(kù)SQLite的存儲(chǔ)技術(shù)6</p><p>  2.5 開發(fā)環(huán)境的搭建6</p><p><b>  3系統(tǒng)分析7</b></p><p>  3.1 系

12、統(tǒng)基本功能描述7</p><p>  3.2 可行性分析7</p><p>  3.3 系統(tǒng)需求分析8</p><p>  3.3.1 業(yè)務(wù)流程分析8</p><p>  3.3.1.1 推箱子游戲的主用例分析8</p><p>  3.3.1.1.1推箱子游戲主用例圖8</p><p&

13、gt;  3.3.1.1.1推箱子游戲主用例圖8</p><p>  3.3.1.1.1推箱子游戲主用例圖18</p><p>  3.3.1.1.2推箱子游戲的主用例描述8</p><p>  3.3.1.2推箱子游戲的菜單管理子系統(tǒng)用例分析9</p><p>  3.3.1.2.1 推箱子游戲菜單管理子系統(tǒng)用例圖9</p&

14、gt;<p>  3.3.1.2.2 推箱子游戲菜單管理子系統(tǒng)用例描述10</p><p>  3.3.1.3推箱子游戲的游戲過(guò)程子系統(tǒng)用例分析12</p><p>  3.3.1.3.1推箱子游戲的游戲過(guò)程子系統(tǒng)用例圖12</p><p>  3.3.1.3.2推箱子游戲的游戲過(guò)程子系統(tǒng)用例描述12</p><p>&

15、lt;b>  4系統(tǒng)設(shè)計(jì)14</b></p><p>  4.1 數(shù)據(jù)庫(kù)設(shè)計(jì)14</p><p>  4.1.1 概念結(jié)構(gòu)設(shè)計(jì)14</p><p>  4.1.3 Menu菜單界面14</p><p>  4.1.2 邏輯結(jié)構(gòu)設(shè)計(jì)14</p><p>  4.2 系統(tǒng)模塊設(shè)計(jì)15</

16、p><p>  4.3 系統(tǒng)算法設(shè)計(jì)17</p><p>  4.4 系統(tǒng)類結(jié)構(gòu)設(shè)計(jì)17</p><p>  4.4.1游戲過(guò)程模塊結(jié)構(gòu)圖17</p><p>  4.4.2游戲音量控制模塊類結(jié)構(gòu)圖18</p><p>  4.4.3游戲規(guī)則模塊類結(jié)構(gòu)圖19</p><p>  4.4.4

17、游戲規(guī)則模塊類結(jié)構(gòu)圖19</p><p>  4.4.5游戲規(guī)則模塊類結(jié)構(gòu)圖20</p><p><b>  5 系統(tǒng)實(shí)現(xiàn)22</b></p><p>  5.1 實(shí)現(xiàn)概況22</p><p>  5.2 游戲地圖模塊的實(shí)現(xiàn)22</p><p>  5.2.1游戲地圖模塊存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn)

18、22</p><p>  5.2.2游戲地圖模塊采用2D模擬3D實(shí)現(xiàn)2.5D(斜視角)視覺(jué)效果24</p><p>  5.3 角色動(dòng)畫效果模塊的實(shí)現(xiàn)25</p><p>  5.4箱子移動(dòng)控制模塊的實(shí)現(xiàn)28</p><p>  5.5 其他模塊簡(jiǎn)介31</p><p>  5.6 系統(tǒng)界面設(shè)計(jì)31</

19、p><p>  5.6.1 Menu菜單界面31</p><p>  5.6.2 游戲過(guò)程模塊界面31</p><p>  5.6.3 音量設(shè)置模塊界面33</p><p>  5.6.4 最高游戲記錄查看模塊界面34</p><p>  5.6.5 關(guān)卡設(shè)置模塊界面34</p><p>

20、  5.6.6游戲規(guī)則查看模塊界面35</p><p>  5.6.7 音效選擇模塊界面36</p><p><b>  結(jié)論37</b></p><p><b>  參考文獻(xiàn)38</b></p><p><b>  致謝39</b></p><p

21、><b>  1 引言</b></p><p><b>  1.1 開發(fā)背景</b></p><p>  Android是由Google為首的OHA(Open Handset Alliance)推出的一款開放的嵌入式操作系統(tǒng)平臺(tái),從2008推出的android SDK1.0到現(xiàn)在,Android SDK的最新版本已經(jīng)升級(jí)到了2.3,最新3.

22、0也已產(chǎn)生,Android正以前所未有的速度聚集著來(lái)自世界各地的開發(fā)者,越來(lái)越多的創(chuàng)意被應(yīng)用到Android應(yīng)用程序的開發(fā)中,大有席卷整個(gè)手機(jī)產(chǎn)業(yè)的趨勢(shì)。</p><p>  說(shuō)到Android系統(tǒng),Google于2007年11月5日宣布的基于Linux平臺(tái)的開源手機(jī)操作系統(tǒng)的名稱,該平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號(hào)稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。</p><

23、;p>  Android 的核心系統(tǒng)服務(wù)依賴于 Linux 2.6 內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。由于Android帶有相當(dāng)濃郁的Linux血統(tǒng)這也就意味著他擁有開源Linux的眾多優(yōu)點(diǎn):安全、運(yùn)算速度快、易于開發(fā)等等。</p><p>  正因?yàn)锳ndroid具有上述的優(yōu)點(diǎn),所以它在國(guó)內(nèi)具有相當(dāng)強(qiáng)勁的競(jìng)爭(zhēng)優(yōu)勢(shì)。青年網(wǎng)絡(luò)的主要負(fù)責(zé)人潘長(zhǎng)華先生說(shuō)到:Android作為一款十分優(yōu)秀的

24、移動(dòng)開發(fā)平臺(tái)十分適合國(guó)內(nèi)的開發(fā)環(huán)境。尤其是中小企業(yè)開發(fā)團(tuán)隊(duì)低成本以及源代碼的分享可以為企業(yè)節(jié)省大量資金,這對(duì)于中小企業(yè)來(lái)說(shuō)無(wú)疑是最大的誘惑。青年網(wǎng)絡(luò)推出的"星網(wǎng)睿話"就是國(guó)內(nèi)成功的Android開發(fā)產(chǎn)品。</p><p>  同時(shí)一個(gè)資深的Android開發(fā)愛好者告訴記者:如果你是個(gè)人開發(fā)愛好者,那么Android就是Google為你量身打造的,放棄閉源的種種吧,開源才是王道,Android才

25、是未來(lái)的主宰。</p><p>  伴隨著Google Android操作系統(tǒng)的盛行,國(guó)內(nèi)外的開發(fā)團(tuán)隊(duì)也逐漸的壯大起來(lái)了,基于Android SDK的系統(tǒng)開發(fā),基于Android應(yīng)用的開發(fā)等已逐漸倍受大家關(guān)注,而手機(jī)游戲開發(fā)歷來(lái)是移動(dòng)開發(fā)中分量最重的部分,面對(duì)如此火爆的Android市場(chǎng)自然也不甘示弱,由于Android的應(yīng)用層開發(fā)是基于Java的開發(fā),所以必有其可以快速移植J2ME開發(fā)的游戲的優(yōu)勢(shì),但是移植的游

26、戲必定也不能發(fā)揮Android操作系統(tǒng)獨(dú)特的特性,所以目前基于Android游戲開發(fā)的市場(chǎng)還是不夠成熟的,用戶對(duì)游戲的需求量卻在不斷擴(kuò)大中。</p><p>  1.2 開發(fā)目的和意義</p><p>  根據(jù)iResearch艾瑞市場(chǎng)咨詢整理的國(guó)外數(shù)據(jù)顯示,全球手機(jī)游戲市場(chǎng)的收入規(guī)模在2005年達(dá)到了102億美元, 2008年達(dá)到520億美元 。07年之后,手機(jī)游戲市

27、場(chǎng)增速開始減緩,傳統(tǒng)手機(jī)游戲逐漸顯現(xiàn)頹勢(shì),市場(chǎng)增長(zhǎng)主要由基于智能手機(jī)平臺(tái)的游戲所帶動(dòng)。Android游戲進(jìn)入智能手機(jī)游戲市場(chǎng),必將打破原有格局,開辟手機(jī)游戲新紀(jì)元。</p><p><b>  圖1-1 調(diào)查結(jié)果</b></p><p>  Android平臺(tái)上的游戲相比應(yīng)用軟件,不需要進(jìn)行嚴(yán)格的市場(chǎng)細(xì)分,不需要針對(duì)目標(biāo)用戶量身定制。這是因?yàn)橛螒蛲婕业暮诵男枨笫墙y(tǒng)一的

28、,那就是:娛樂(lè)與打發(fā)時(shí)間(乃至更高層面的競(jìng)技需求和群體認(rèn)同需求),這種需求附著于特定的社會(huì)發(fā)展階段,不受地域的限制,甚至于能夠穿透文化壁壘。因此,絕大多數(shù)種類的游戲都具備傳染性與普適性,每一個(gè)售出的游戲都像一個(gè)火種,將會(huì)點(diǎn)燃周圍潛在玩家的激情,激情的火焰迅速蔓延,最終吞噬整個(gè)需求市場(chǎng),當(dāng)然前提是開發(fā)的游戲是高質(zhì)量的。</p><p>  此外,幾乎每一個(gè)Android手機(jī)用戶都是游戲的需求者,都是潛在的顧客,現(xiàn)今

29、的400多萬(wàn)Android用戶不過(guò)是冰山一角,隨著Android手機(jī)市場(chǎng)進(jìn)一步壯大,游戲的市場(chǎng)容量將具備較大的增長(zhǎng)空間,游戲開發(fā)者不會(huì)愁吃不飽,只會(huì)愁胃口不夠大。</p><p>  面對(duì)如此潛在的游戲市場(chǎng),為Android手機(jī)游戲用戶量身定做一款兼具Android平臺(tái)特色的手機(jī)游戲也實(shí)為意義深遠(yuǎn)。</p><p>  1.3 論文研究?jī)?nèi)容</p><p>  研究

30、并開發(fā)一個(gè)基于Android的推箱子游戲,所做的主要工作在于:</p><p>  基于Android SDK2.2的開發(fā)技術(shù)</p><p>  Android SDK包含了開發(fā)所應(yīng)用的類庫(kù),用戶要基于Android平臺(tái)開發(fā)應(yīng)用就應(yīng)熟悉SDK的對(duì)外接口,其中開發(fā)Android游戲應(yīng)用通常會(huì)用到如下一些類,Surfaceview類作為MVC中視圖類的基類的開發(fā)框架是一般游戲開發(fā)比較常用的一

31、種開發(fā)框架,使用此類時(shí)還需要對(duì)其進(jìn)行創(chuàng)建、銷毀,情況改變時(shí)的監(jiān)聽,這就還需要實(shí)現(xiàn)SurfaceHolder.Callback接口。其中Android游戲開發(fā)還需要通過(guò)Graphics類來(lái)顯示2D圖形,Graphics中包括了Canvas(畫布)、Paint(畫筆)、Color(顏色)、Bitmap(圖像)、2D幾何圖形等常用類,并且還涉及一些OpenGL圖形程序接口方面的技術(shù)。</p><p>  2、2.5d的

32、呈現(xiàn)技術(shù)</p><p>  所謂的2.5D,介乎于模真的3D與完全平面的2D之間。即模擬了3D的空間感,也兼具2D的靈動(dòng)簡(jiǎn)單,是一種“優(yōu)勢(shì)”的綜合體。就我個(gè)人認(rèn)為,誠(chéng)然2.5D最早的出現(xiàn)動(dòng)機(jī)只是為了2D到3D間過(guò)渡。但就其應(yīng)用而講,好的2.5D圖形即有3D的自由度與質(zhì)感,又能利用2D圖形將漫畫式人物塑造得惟妙惟肖,使其擁有純3D還無(wú)法做到的優(yōu)勢(shì)。因此2.5D在現(xiàn)在乃至未來(lái)的一段較長(zhǎng)時(shí)間里還會(huì)和3D并存,直到3D

33、圖形的開發(fā)效率及表現(xiàn)形式能徹底取代2.5D為止。</p><p>  3、數(shù)據(jù)存儲(chǔ)采用文件存儲(chǔ)及輕量級(jí)數(shù)據(jù)庫(kù)SQLite的存儲(chǔ)技術(shù)</p><p>  Android的數(shù)據(jù)存儲(chǔ)有4種方式,分別是Shared Preferences存儲(chǔ)技術(shù)以“key-value paires” 格式的數(shù)據(jù)存儲(chǔ)機(jī)制,F(xiàn)iles存儲(chǔ)技術(shù)通過(guò)FileInputStrean和FileOutputStream操作,N

34、etwork技術(shù)通過(guò)網(wǎng)絡(luò)來(lái)存儲(chǔ)和獲取數(shù)據(jù)。還有一種就是輕量級(jí)數(shù)據(jù)庫(kù)SQLite,它是Android的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù),支持SQL語(yǔ)句。SQLite數(shù)據(jù)庫(kù)功能非常強(qiáng)大,使用起來(lái)也非常方便。</p><p><b>  4、系統(tǒng)的構(gòu)建</b></p><p>  本系統(tǒng)采用MVC開發(fā)模式,使用SQLite數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù),基于Android SDK2.2開發(fā)平臺(tái),使用Eclips

35、e+Android SDK2.2+DDMS+DroidDraw作為系統(tǒng)開發(fā)、調(diào)試的主要工具。</p><p>  2 Android推箱子系統(tǒng)的相關(guān)研究</p><p>  2.1MVC開發(fā)模式</p><p>  Android遵循MVC開發(fā)模式,所謂MVC也就是Model-View-Controller的首字母縮寫,MVC開發(fā)模式把應(yīng)用程序開發(fā)分成三個(gè)部分,Mo

36、del即模型用于管理數(shù)據(jù),View即視圖用來(lái)制作用戶界面,而Controller即控制器管理應(yīng)用程序的邏輯。以下主要講了Android中MVC的框架原理。</p><p>  從用戶的角度出發(fā),用戶可以根據(jù)自己的需求,選擇自己合適的瀏覽數(shù)據(jù)的方式。比如說(shuō),對(duì)于一篇在線文檔,用戶可以選擇以HTML網(wǎng)頁(yè)的方式閱讀,也可以選擇以pdf的方式閱讀。從開發(fā)者的角度,MVC把應(yīng)用程序的邏輯層與界面是完全分開的,最大的好處是:

37、界面設(shè)計(jì)人員可以直接參與到界面開發(fā),程序員就可以把精力放在邏輯層上。而不是像以前那樣,設(shè)計(jì)人員把所有的材料交給開發(fā)人員,由開發(fā)人員來(lái)實(shí)現(xiàn)界面。在VS 2008開發(fā)工具中設(shè)計(jì)人員就可以直接通過(guò)Silverlight來(lái)開發(fā)界面,在Eclipes工具中開發(fā)Android采用了更加簡(jiǎn)單的方法,設(shè)計(jì)人員在DroidDraw中設(shè)計(jì)界面,以XML方式保存,在Eclipes中直接打開就可以看到設(shè)計(jì)人員設(shè)計(jì)的界面。</p><p>

38、;  Android中界面部分也采用了當(dāng)前比較流行的MVC框架,在Android中M就是應(yīng)用程序中二進(jìn)制的數(shù)據(jù),V就是用戶的界面。Android的界面直接采用XML文件保存的,界面開發(fā)變的很方便。在Android中C也是很簡(jiǎn)單的,一個(gè)Activity可以有多個(gè)界面,只需要將視圖的ID傳遞到setContentView(),就指定了以哪個(gè)視圖模型顯示數(shù)據(jù)。</p><p>  在Android SDK中的數(shù)據(jù)綁定,

39、也都是采用了與MVC框架類似的方法來(lái)顯示數(shù)據(jù)。在控制層上將數(shù)據(jù)按照視圖模型的要求(也就是Android SDK中的Adapter)封裝就可以直接在視圖模型上顯示了,從而實(shí)現(xiàn)了數(shù)據(jù)綁定。比如顯示Cursor中所有數(shù)據(jù)的ListActivity,其視圖層就是一個(gè)ListView,將數(shù)據(jù)封裝為L(zhǎng)istAdapter,并傳遞給ListView,數(shù)據(jù)就在ListView中現(xiàn)實(shí)。</p><p>  圖2-1:Android

40、中的MVC框架結(jié)構(gòu)圖</p><p>  2.2 推箱子游戲策劃</p><p>  游戲的策劃主要包括游戲的情節(jié)、目標(biāo)受眾、運(yùn)行的目標(biāo)平臺(tái)、采用的呈現(xiàn)技術(shù)、操作方式等幾個(gè)方面。下面就針對(duì)本游戲?qū)ι鲜鰩讉€(gè)方面進(jìn)行簡(jiǎn)單的介紹,如下所列。</p><p>  游戲情節(jié),本游戲?yàn)檩p量級(jí)的益智游戲,因此不存在很復(fù)雜的情節(jié)。這方面主要要做的工作主要為設(shè)計(jì)游戲各關(guān)倉(cāng)庫(kù)的形狀、大

41、小、可通過(guò)區(qū)域,以及各關(guān)中箱子的初始位置與目的地。 </p><p>  目標(biāo)受眾 ,這個(gè)游戲受眾面比較廣,應(yīng)該是老少皆宜的??紤]到受眾面廣的原因,應(yīng)該將操作方式設(shè)計(jì)得更加人性化,畫面更加清新。 </p><p>  運(yùn)行的目標(biāo)平臺(tái),本游戲的目標(biāo)平臺(tái)為Android2.0及以上版本。</p><p>  采用的呈現(xiàn)技術(shù),推箱子游戲一般采用的都是2D的呈現(xiàn)技術(shù),本案例

42、為了增強(qiáng)游戲的吸引力,采用2.5D呈現(xiàn)技術(shù)。2.5D呈現(xiàn)技術(shù)也有多種視角可供選擇,本游戲采用45度視角。 </p><p>  操作方式,本游戲擬采用手機(jī)鍵盤進(jìn)行操作,對(duì)于沒(méi)有鍵盤的型號(hào)也可以考慮采用虛擬鍵盤。 </p><p>  2.3基于Android SDK2.2的開發(fā)技術(shù)</p><p>  主要技術(shù)就是運(yùn)用Android SDK中的內(nèi)置類庫(kù),來(lái)完成整個(gè)游

43、戲的繪制與控制,其中主要用到的內(nèi)置類有Surfaceview并實(shí)現(xiàn)SurfaceHolder.Callback接口以及Graphics中的Canvas(畫布)、Paint(畫筆)、Color(顏色),Bitmap(圖像)、2D幾何圖形等常用類,并且還涉及一些OpenGL圖形程序接口方面的技術(shù)。</p><p>  2.4Android中的文件存儲(chǔ)及輕量級(jí)數(shù)據(jù)庫(kù)SQLite的存儲(chǔ)技術(shù)</p><

44、p>  Android的數(shù)據(jù)存儲(chǔ)有4種方式,分別是Shared Preferences存儲(chǔ)技術(shù)以“key-value paire”格式的數(shù)據(jù)存儲(chǔ)機(jī)制Files存儲(chǔ)技術(shù)通過(guò)FileInputStrean和FileOutputStream操作,Network技術(shù)通過(guò)網(wǎng)絡(luò)來(lái)存儲(chǔ)和獲取數(shù)據(jù)。還有一種就是輕量級(jí)數(shù)據(jù)庫(kù)SQLite,它是Android的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù),支持SQL語(yǔ)句。SQLite數(shù)據(jù)庫(kù)功能非常強(qiáng)大,使用起來(lái)也非常方便。</p

45、><p>  2.5 開發(fā)環(huán)境的搭建</p><p>  1)下載SDK下載安裝器,網(wǎng)址http://androidappdocs.appspot.com/sdk/index.html,選擇Windows的平臺(tái)的下載。</p><p>  2)運(yùn)行Android SDK下載安裝器SDK Setup.exe</p><p>  圖2-2 SD

46、K 下載器</p><p>  配置和下載SDK,選擇 Available Packages 然后選擇你要安裝的sdK包,最后按 Install Selected 按鈕進(jìn)行安裝。</p><p>  圖2-3 下載SDK</p><p>  其實(shí)一般啟動(dòng)SDK Setup,都會(huì)自動(dòng)檢查更新包,彈出類似如下界面。根據(jù)你的要求自行選擇所需安裝包,安裝即可。其功能同上面(

47、圖2-3)</p><p>  圖2-4更新(下載)SDK</p><p>  當(dāng)電腦不支持https連接,選擇setting的將Force https://... Sources to be fetched by using http://... 的選項(xiàng)打勾。</p><p>  圖2-5 https->http選項(xiàng)</p><p>

48、<b>  3系統(tǒng)需求分析</b></p><p>  3.1 系統(tǒng)基本功能描述</p><p>  推箱子是一款來(lái)自日本的古老游戲,其設(shè)計(jì)目的是訓(xùn)練人的邏輯思維能力。游戲場(chǎng)景一般是設(shè)定在空間狹小的倉(cāng)庫(kù)中,要求把箱子擺放到指定位置。這就要求玩家巧妙的運(yùn)用有限的空間和通道,合理的安排箱子的位置和移動(dòng)次序才可能完成任務(wù)。</p><p><b

49、>  具體的功能如下:</b></p><p>  1)游戲菜單界面,此界面主要提供用戶功能選擇。</p><p>  2)玩家定制功能,通過(guò)提供游戲難度選擇,使玩家根據(jù)自己的情況選擇不同的關(guān)卡進(jìn)行游戲。 </p><p>  3)游戲數(shù)據(jù)存儲(chǔ),關(guān)卡采用文件存儲(chǔ),游戲成績(jī)采用sqlite輕量級(jí)數(shù)據(jù)庫(kù)存儲(chǔ)。</p><p> 

50、 4)游戲背景音樂(lè)設(shè)置,主要實(shí)現(xiàn)讓該游戲提供若干種背景音樂(lè)以供用戶的選擇。</p><p>  5)游戲幫助,還需要為本游戲添加幫助界面,簡(jiǎn)單介紹游戲的基本功能及玩法。</p><p><b>  3.2 可行性分析</b></p><p>  本系統(tǒng)的可行性分析包括以下幾個(gè)方面的內(nèi)容:</p><p><b>

51、;  1) 技術(shù)可行性</b></p><p>  SQLite數(shù)據(jù)庫(kù)與Android SDK2.2技術(shù)的有機(jī)結(jié)合,可以很輕松地開發(fā)出推箱子游戲。</p><p>  因此技術(shù)上是可以實(shí)現(xiàn)的。</p><p><b>  2) 經(jīng)濟(jì)可行性</b></p><p>  隨著計(jì)算機(jī)游戲的發(fā)展,很多編程愛好者基于該

52、游戲的思想開發(fā)了出各種版本、各種類型的推箱子。這其中也包括很多手機(jī)版本的實(shí)現(xiàn),伴隨著手機(jī)與計(jì)算機(jī)的普及,很快推箱子游戲便進(jìn)入了千家萬(wàn)戶。</p><p>  因此,從經(jīng)濟(jì)上來(lái)說(shuō),開發(fā)推箱子游戲不需要很大的投入,硬件上只需普通的PC電腦一臺(tái),附加配置好模擬器的運(yùn)行環(huán)境即可,有條件的話可以再配備Android2.2系統(tǒng)的真機(jī)一臺(tái),用于真機(jī)測(cè)試。</p><p><b>  3) 操作

53、可行性</b></p><p>  由于Android可以和Eclipse配置開發(fā)環(huán)境,且實(shí)際開發(fā)環(huán)境為開源的,所以在操作上是可行的。</p><p>  綜上所述,基于Android的推箱子系統(tǒng)在高校中是可行的。</p><p>  3.3 系統(tǒng)需求分析</p><p>  本游戲主要是設(shè)定在空間狹小的倉(cāng)庫(kù)中,要求小人把箱子擺放

54、到指定位置。當(dāng)小人將箱子推到指定位置時(shí)箱子變色,當(dāng)小人碰到障礙物墻壁時(shí)小人將無(wú)法移動(dòng),當(dāng)所有的箱子都被推到指定的位置時(shí),游戲成功,因此這就要求玩家巧妙的運(yùn)用有限的空間和通道,合理的安排箱子的位置和移動(dòng)次序才可能完成任務(wù)。</p><p>  3.3.1 業(yè)務(wù)流程分析</p><p>  3.3.1.1 推箱子游戲的主用例分析</p><p>  推箱子游戲主用例主要

55、分為一些菜單選項(xiàng)的設(shè)置和玩游戲的整個(gè)過(guò)程。</p><p>  3.3.1.1.1推箱子游戲主用例圖</p><p><b>  如圖3-1所示:</b></p><p>  圖3-1 系主統(tǒng)用例圖</p><p>  3.3.1.1.2推箱子游戲的主用例描述</p><p>  1、如上圖3-1

56、:用例1菜單管理</p><p><b>  用例描述:菜單管理</b></p><p><b>  執(zhí)行者:玩家</b></p><p>  前置條件:android手機(jī)用戶、安裝有推箱子應(yīng)用程序 </p><p>  后置條件:可以進(jìn)行相關(guān)游戲選項(xiàng)的設(shè)置 </p><p>

57、;<b>  基本路徑:</b></p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><p><b>  2)進(jìn)入菜單界面</b></p><p>  3)進(jìn)行相關(guān)游戲選項(xiàng)的設(shè)置或選擇開始游戲</p><p>  2、如上圖3-1:用例2玩游戲</p>

58、<p><b>  用例描述:玩游戲</b></p><p><b>  執(zhí)行者:玩家</b></p><p><b>  前置條件:開始游戲</b></p><p>  后置條件:退出游戲或游戲成功</p><p><b>  基本路徑</b>

59、;</p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><p>  2)進(jìn)入菜單并選擇游戲開始</p><p>  3)通過(guò)手機(jī)硬鍵盤控制小人移動(dòng)從而將箱子移動(dòng)到指定位置</p><p>  3.3.1.2推箱子游戲的菜單管理子系統(tǒng)用例分析</p><p>  玩家通過(guò)菜單管理子系統(tǒng)主要

60、可以進(jìn)行音量大小的設(shè)置,可以查看游戲的幫助文檔,可以進(jìn)行游戲關(guān)卡的選擇,可以查看玩家的最高游戲記錄并且還可以選擇游戲背景音樂(lè)。</p><p>  3.3.1.2.1 推箱子游戲菜單管理子系統(tǒng)用例圖</p><p><b>  如圖3-2所示:</b></p><p>  圖3-2菜單管理子系統(tǒng)用例圖</p><p> 

61、 3.3.1.2.2 推箱子游戲菜單管理子系統(tǒng)用例描述</p><p>  1、如上圖3-2:用例1.1設(shè)置音量大小</p><p>  用例描述:設(shè)置音量大小</p><p><b>  執(zhí)行者:玩家</b></p><p>  前置條件:進(jìn)入菜單界面 </p><p>  后置條件:返回菜單界

62、面或開始游戲 </p><p><b>  基本路徑:</b></p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><p><b>  2)進(jìn)入菜單界面</b></p><p>  3)觸摸菜單界面的音量調(diào)節(jié)的按鈕</p><p>  4)拖

63、動(dòng)音量調(diào)節(jié)的控件調(diào)節(jié)音量的大小</p><p>  2、如上圖3-2:用例1.2查看游戲規(guī)則</p><p>  用例描述:查看游戲規(guī)則</p><p><b>  執(zhí)行者:玩家</b></p><p>  前置條件:進(jìn)入菜單界面 </p><p>  后置條件:返回菜單界面或開始游戲 </

64、p><p><b>  基本路徑:</b></p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><p><b>  2)進(jìn)入菜單界面</b></p><p>  3)觸摸菜單界面的查看游戲規(guī)則的按鈕</p><p>  4)跳轉(zhuǎn)到游戲規(guī)則的查看界

65、面,玩家可以對(duì)照游戲規(guī)則開始游戲</p><p>  3、如上圖3-2:用例1.3選擇關(guān)卡</p><p><b>  用例描述:選擇關(guān)卡</b></p><p><b>  執(zhí)行者:玩家</b></p><p>  前置條件:進(jìn)入菜單界面 </p><p>  后置條件:返

66、回菜單界面或開始游戲 </p><p><b>  基本路徑:</b></p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><p><b>  2)進(jìn)入菜單界面</b></p><p>  3)觸摸菜單界面的關(guān)卡選擇按鈕</p><p>  

67、4)進(jìn)入關(guān)卡選擇的界面,關(guān)卡選擇分為中、易、難三個(gè)級(jí)別的選項(xiàng),其中第一關(guān)是相對(duì)簡(jiǎn)單的,第二關(guān)代表的的是難度中等的,第三關(guān)代表較有難度的關(guān)卡。玩家可以根據(jù)自己的能力水平選擇自己適合的關(guān)卡。</p><p>  4、如上圖3-2:用例1.4查看玩家最高游戲記錄</p><p>  用例描述:查看玩家最高游戲記錄</p><p><b>  執(zhí)行者:玩家<

68、/b></p><p>  前置條件:進(jìn)入菜單界面 </p><p>  后置條件:返回菜單界面或開始游戲 </p><p><b>  基本路徑:</b></p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><p><b>  2)進(jìn)入菜單界面&

69、lt;/b></p><p>  3)觸摸菜單界面的玩家最高記錄查詢按鈕</p><p>  4)進(jìn)入最高記錄查詢的界面,最高記錄查詢界面主要從數(shù)據(jù)庫(kù)中獲取玩家的最高游戲記錄然后呈現(xiàn)在界面上。</p><p>  5、如上圖3-2:用例1.5選擇游戲背景音樂(lè)</p><p>  用例描述:選擇游戲背景音樂(lè)</p><

70、p><b>  執(zhí)行者:玩家</b></p><p>  前置條件:進(jìn)入菜單界面 </p><p>  后置條件:返回菜單界面或開始游戲 </p><p><b>  基本路徑:</b></p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><

71、;p><b>  2)進(jìn)入菜單界面</b></p><p>  3)點(diǎn)擊手機(jī)硬鍵盤的menu按鈕,調(diào)用menu菜單 </p><p>  4)點(diǎn)擊音效選擇的選項(xiàng),進(jìn)入游戲背景音樂(lè)設(shè)置的界面,游戲背景音樂(lè)設(shè)置分為關(guān)閉音效及四種背景音效的選擇</p><p>  3.3.1.3推箱子游戲的游戲過(guò)程子系統(tǒng)用例分析</p><

72、p>  推箱子游戲的游戲過(guò)程子系統(tǒng)用例主要分為開始游戲和退出游戲。</p><p>  3.3.1.3.1推箱子游戲的游戲過(guò)程子系統(tǒng)用例圖</p><p><b>  如圖3-3所示:</b></p><p>  圖3-3 游戲過(guò)程子系統(tǒng)用例圖</p><p>  3.3.1.3.2推箱子游戲的游戲過(guò)程子系統(tǒng)用例描

73、述</p><p>  1、如上圖3-3:用例2.1開始游戲</p><p><b>  用例描述:開始游戲</b></p><p><b>  執(zhí)行者:玩家</b></p><p>  前置條件:進(jìn)入開始游戲界面 </p><p>  后置條件:可以選擇退出游戲或者保存玩家

74、記錄后繼續(xù)游戲 </p><p><b>  基本路徑:</b></p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><p><b>  2)進(jìn)入游戲主界面</b></p><p>  3)將箱子推到指定的位置后保存玩家記錄繼續(xù)玩下一關(guān)或者直接退出游戲</p&

75、gt;<p>  2、如上圖3-3:用例2.2退出游戲</p><p><b>  用例描述:退出游戲</b></p><p><b>  執(zhí)行者:玩家</b></p><p>  前置條件:進(jìn)入開始游戲界面 </p><p><b>  后置條件:無(wú)</b>&l

76、t;/p><p><b>  基本路徑:</b></p><p><b>  1)運(yùn)行應(yīng)用程序</b></p><p><b>  2)進(jìn)入游戲主界面</b></p><p>  3)點(diǎn)擊手機(jī)硬鍵盤上的menu按鍵,調(diào)出menu菜單</p><p>  4

77、)選擇退出游戲的menu選項(xiàng),游戲結(jié)束 </p><p><b>  4系統(tǒng)設(shè)計(jì)</b></p><p><b>  4.1 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p>  4.1.1 概念結(jié)構(gòu)設(shè)計(jì)</p><p>  推箱子游戲所涉及的主要實(shí)體及其屬性有:</p><p>  1)

78、 用戶(用戶編號(hào),用戶名,成績(jī))</p><p>  E-R模型如圖4-1所示。</p><p>  圖 4-1系統(tǒng)實(shí)體及其屬性</p><p>  4.1.2 邏輯結(jié)構(gòu)設(shè)計(jì)</p><p><b>  1.數(shù)據(jù)表總體設(shè)計(jì)</b></p><p>  根據(jù)以上的分析,將E-R模型轉(zhuǎn)換成邏輯模型,設(shè)

79、計(jì)出本系統(tǒng)數(shù)據(jù)庫(kù)。根據(jù)需要,設(shè)計(jì)了一個(gè)數(shù)據(jù)表。如下所示:</p><p>  用戶信息表:該表記錄了用戶的基本信息,包括用戶編號(hào)、用戶名、成績(jī)</p><p><b>  2.表結(jié)構(gòu)</b></p><p>  根據(jù)上面的邏輯結(jié)構(gòu)設(shè)計(jì),設(shè)計(jì)相應(yīng)的表結(jié)構(gòu)如下表4-1所示。</p><p>  該表記錄了用戶的基本信息及用戶

80、成績(jī),包括用戶編號(hào)、用戶名、成績(jī)</p><p><b>  表4-1 User</b></p><p>  4.2 系統(tǒng)模塊設(shè)計(jì)</p><p>  模塊設(shè)計(jì)的主要方法是結(jié)構(gòu)化方法,主導(dǎo)思想是以系統(tǒng)的邏輯功能設(shè)計(jì)和數(shù)據(jù)流關(guān)系為基礎(chǔ),采用“自頂向下,逐步求精”的設(shè)計(jì)方法,將本系統(tǒng)分解為功能明確,易于修改,大小適中的模塊結(jié)構(gòu)。 本系統(tǒng)主要分為七個(gè)

81、基本模塊:游戲過(guò)程模塊、游戲音量設(shè)置模塊、游戲規(guī)則模塊、游戲關(guān)卡設(shè)置模塊、音效選擇模塊、玩家最高記錄查詢,保存記錄退出模塊,系統(tǒng)各模塊功能圖如圖4-2所示。</p><p>  圖4-2 系統(tǒng)功能模塊圖</p><p>  系統(tǒng)各模塊功能說(shuō)明:</p><p><b>  1.音量設(shè)置模塊</b></p><p>  此

82、模塊主要是調(diào)節(jié)系統(tǒng)背景音樂(lè)音量大小的模塊,給用戶增加用戶體驗(yàn)。</p><p>  2.游戲規(guī)則查看模塊</p><p>  此模塊主要給用戶提供玩法指南的模塊。</p><p><b>  3. 音效選擇模塊</b></p><p>  此模塊主要給用戶提供背景音效選擇的模塊,其中主要分為關(guān)閉音效及對(duì)其余3種音效的選擇

83、的模塊。</p><p>  4. 玩家最高游戲記錄查詢模塊</p><p>  此模塊主要提供用戶查看最高游戲記錄,由于本游戲支持多用戶,所以會(huì)把每個(gè)用戶的最高游戲記錄都呈現(xiàn)出來(lái)。</p><p>  5.游戲關(guān)卡設(shè)置模塊</p><p>  此模塊主要是給用戶進(jìn)行關(guān)卡的選擇,本游戲中主要設(shè)置易、中、難三個(gè)級(jí)別的關(guān)卡選擇。</p>

84、;<p>  6、游戲過(guò)程控制模塊</p><p>  此模塊主要是控制游戲過(guò)程界面的繪制、鍵盤事件的監(jiān)聽、對(duì)監(jiān)聽事件的響應(yīng)處理等,是整個(gè)游戲的核心功能模塊。其中游戲過(guò)程模塊又可以分為如下五個(gè)子模塊如圖4-3所示。</p><p>  圖4-3 游戲過(guò)程模塊子模塊圖</p><p>  對(duì)游戲過(guò)程模塊的子模塊描述如下:</p><p

85、><b>  1)初始化模塊。</b></p><p>  該模塊包括屏幕初始化和游戲第一關(guān)的初始化。屏幕初始化用于繪制整個(gè)初始畫面,游戲每一關(guān)的初始化是構(gòu)建每一關(guān)的關(guān)卡。</p><p><b>  2)畫圖模塊。</b></p><p>  該模塊主要是被其它模塊調(diào)用,用于畫墻、畫箱子、在目的地畫箱子、畫小人和畫

86、目的地的模塊。</p><p><b>  3)移動(dòng)箱子模塊</b></p><p>  該模塊用于移動(dòng)箱子,包括目的地之間、空地之間和目的地與空地之間的箱子移動(dòng)。</p><p><b>  4)移動(dòng)角色模塊</b></p><p>  該模塊用于控制小人移動(dòng),從而推動(dòng)箱子到目的地的模塊。<

87、/p><p>  5)鍵盤事件監(jiān)聽模塊</p><p>  該模塊主要通過(guò)對(duì)鍵盤事件,觸摸事件的響應(yīng)處理模塊。</p><p>  4.3 系統(tǒng)算法設(shè)計(jì)</p><p>  本系統(tǒng)核心部分是游戲的控制過(guò)程,游戲畫面事件監(jiān)聽與游戲畫面的繪制過(guò)程。其整個(gè)游戲過(guò)程控制算法設(shè)計(jì)如下圖4-4</p><p>  圖4-4游戲過(guò)程控制

88、算法設(shè)計(jì)</p><p>  4.4 系統(tǒng)類結(jié)構(gòu)設(shè)計(jì)</p><p>  4.4.1游戲過(guò)程模塊結(jié)構(gòu)圖</p><p>  游戲過(guò)程控制模塊中GameView是游戲模塊的核心類,它除了控制整個(gè)界面繪制外,還要響應(yīng)用戶的觸屏或鍵盤操作信息,然后通過(guò)消息通信機(jī)制,將最新主控信息返回給公共類MainActivity,類結(jié)構(gòu)圖如下圖4-5所示</p><

89、p>  圖4-5游戲過(guò)程模塊結(jié)構(gòu)圖</p><p>  4.4.2游戲音量控制模塊類結(jié)構(gòu)圖</p><p>  游戲音量設(shè)置模塊中主要調(diào)節(jié)音量大小的類是SeekBarActivity,它通過(guò)AudioManager控制后臺(tái)Service來(lái)實(shí)現(xiàn)音量的上調(diào)、下降的功能。其中與它相關(guān)的類有GameView類,調(diào)節(jié)好音量大小后可以直接通過(guò)MainActivity跳轉(zhuǎn)到游戲界面。類結(jié)構(gòu)如下圖4

90、-6所示。</p><p>  圖4-6游戲音量控制模塊類結(jié)構(gòu)圖</p><p>  4.4.3游戲規(guī)則模塊類結(jié)構(gòu)圖</p><p>  游戲規(guī)則模塊中主要提供游戲規(guī)則查看的類是GameRuleActivity,與它相關(guān)聯(lián)的類是MainActivity類,MainActivity主要是控制整個(gè)頁(yè)面跳轉(zhuǎn)和消息處理的公共類。</p><p>&l

91、t;b>  如圖4-7所示。</b></p><p>  圖4-7 游戲規(guī)則模塊類結(jié)構(gòu)圖</p><p>  4.4.4游戲規(guī)則模塊類結(jié)構(gòu)圖</p><p>  游戲關(guān)卡設(shè)置模塊通過(guò)LevelSelectActivity響應(yīng)游戲關(guān)卡的的設(shè)置,然后通過(guò)公共類MainActivity去讀取相應(yīng)的map關(guān)卡文件(地圖文件主要存儲(chǔ)在Android系統(tǒng)文件的

92、Assets目錄下)。類結(jié)構(gòu)圖如圖4-8所示</p><p>  圖4-8游戲關(guān)卡設(shè)置類結(jié)構(gòu)圖</p><p>  4.4.5游戲規(guī)則模塊類結(jié)構(gòu)圖</p><p>  游戲音效選擇模塊主要類是ActivityList類,核心類是后臺(tái)服務(wù)MyService類,ActivityList類提供了一系列供選擇的音效,通過(guò)用戶的響應(yīng)后,向公共類發(fā)出請(qǐng)求信息,公共類MainAc

93、tivity接受到請(qǐng)求信息后向處于后臺(tái)服務(wù)的音樂(lè)播放器提出服務(wù)請(qǐng)求,最后后臺(tái)服務(wù)MySevice將響應(yīng)處理結(jié)果返回給用戶。</p><p>  類結(jié)構(gòu)圖如圖4-9所示</p><p>  圖4-9游戲音效選擇類結(jié)構(gòu)圖</p><p><b>  5 系統(tǒng)實(shí)現(xiàn)</b></p><p><b>  5.1 實(shí)現(xiàn)概況

94、</b></p><p>  本系統(tǒng)可分為游戲過(guò)程控制模塊、游戲音量設(shè)置模塊、游戲規(guī)則模塊、游戲關(guān)卡設(shè)置模塊、音效選擇模塊、玩家最高記錄查詢,保存記錄退出模塊七個(gè)功能模塊。游戲過(guò)程控制模塊主要是對(duì)整個(gè)游戲進(jìn)行控制的模塊。游戲音量設(shè)置模塊主要是調(diào)節(jié)背景音量大小的模塊。游戲規(guī)則模塊主要是提供游戲規(guī)則查看的模塊。游戲音效選擇模塊供用戶選擇喜好的音效,增強(qiáng)用戶體驗(yàn),玩家最高游戲記錄查詢供用戶查看游戲水平,保存

95、記錄退出模塊主要是提供用戶保存歷史記錄的功能。</p><p>  下面詳細(xì)介紹各個(gè)游戲核心模塊的實(shí)現(xiàn)。</p><p>  5.2 游戲地圖模塊的實(shí)現(xiàn)</p><p>  5.2.1游戲地圖模塊存儲(chǔ)結(jié)構(gòu)的實(shí)現(xiàn)</p><p>  游戲地圖模塊實(shí)現(xiàn)是整個(gè)游戲過(guò)程的核心,由于游戲的整個(gè)過(guò)程呈現(xiàn)三維立體的效果,所以游戲地圖設(shè)置也是至關(guān)重要的一塊,

96、游戲地圖整體是用二維數(shù)組存儲(chǔ)在文件中的,每次打開游戲會(huì)初始化一次地圖文件,游戲地圖分為兩層地板:</p><p>  底層地板分為三類情況,二維數(shù)組值1代表灰色地磚,二維數(shù)組值0代表米色地磚,二維數(shù)組值3代表目的地。(例第一關(guān)底層地圖文件map1.txt存儲(chǔ)數(shù)據(jù)為0101010101010101010101010131010101310101010101010101010101010101010101010101

97、1010131010101010101010101011101010)</p><p>  上層地板也分為三類情況,二維數(shù)組值1代表障礙物墻壁,二維數(shù)組值3代表箱子,二維數(shù)組值4代表小人。(例第一關(guān)上層地圖文件map1.1.txt存儲(chǔ)數(shù)據(jù)為1111111111110040000001103000300011000000000110001000001100003000011000000000110000000001

98、1000000000111111111111)</p><p>  具體地圖文件在實(shí)現(xiàn)中的位置如下圖assets文件夾:</p><p>  圖5-1:地圖文件存儲(chǔ)結(jié)構(gòu)</p><p><b>  關(guān)鍵代碼如下:</b></p><p>  com.cslg.pushBox.util.GetMapFromFile.jav

99、a類</p><p>  /** 從assets 文件夾中獲取文件并讀取數(shù)據(jù) */</p><p>  public class GetMapFromFile {</p><p>  public static final String ENCODING = "UTF-8"; </p><p>  Activity m

100、ainActivity;</p><p>  public GetMapFromFile(Activity mainActivity)</p><p><b>  {</b></p><p>  this.mainActivity=mainActivity;</p><p><b>  }</b>&

101、lt;/p><p>  public String getFromAssets(String fileName){ </p><p>  String result = ""; </p><p><b>  try { </b></p><p>  InputStream in = mainA

102、ctivity.getResources().getAssets().open(fileName); </p><p>  //獲取文件的字節(jié)數(shù) </p><p>  int lenght = in.available(); </p><p>  //創(chuàng)建byte數(shù)組 </p><p>  byte[] buffer = n

103、ew byte[lenght]; </p><p>  //將文件中的數(shù)據(jù)讀到byte數(shù)組中 </p><p>  in.read(buffer); </p><p>  result = EncodingUtils.getString(buffer, ENCODING); </p><p>  } catch (Except

104、ion e) { </p><p>  e.printStackTrace(); </p><p><b>  } </b></p><p>  return result; </p><p><b>  } </b></p><p><b> 

105、 }</b></p><p>  com.cslg.pushBox.MainActivity.java類</p><p>  /**底層地板地圖*/</p><p>  char[]mapChar=new char[mapStr.length()];</p><p>  mapChar=mapStr.toCharArray();/

106、/轉(zhuǎn)化為一維字符數(shù)組</p><p>  int num=0;//初始化一維數(shù)組下標(biāo)</p><p>  for(int i=0;i<10;i++)</p><p>  for(int j=0;j<11;j++)</p><p><b>  {</b></p><p>  map[i]

107、[j]=Integer.parseInt(String.valueOf(mapChar[num]));</p><p><b>  num++;</b></p><p><b>  }</b></p><p>  /**上層地板地圖*/</p><p>  char[] map2Char=new c

108、har[map2Str.length()];</p><p>  map2Char=map2Str.toCharArray();//先轉(zhuǎn)化成一維字符數(shù)組</p><p>  num=0;//初始化數(shù)組下標(biāo)</p><p>  for(int i=0;i<10;i++)</p><p>  for(int j=0;j<11;j++)

109、</p><p><b>  {</b></p><p>  map2[i][j]=Integer.parseInt(String.valueOf(map2Char[num]));</p><p><b>  num++;</b></p><p>  if(map2[i][j]==3)</p&

110、gt;<p><b>  {</b></p><p>  sumScore++;//箱子的個(gè)數(shù)</p><p><b>  }</b></p><p><b>  }</b></p><p>  5.2.2游戲地圖模塊采用2D模擬3D實(shí)現(xiàn)2.5D(斜視角)視覺(jué)效果

111、</p><p>  整個(gè)推箱子游戲采用斜45度視覺(jué)效果,在整體上給人以立體仿真的效果,具體實(shí)現(xiàn)過(guò)程如下:</p><p>  45度視覺(jué)效果通常需要采用斜視圖的坐標(biāo)變換,最直接的想法可能就是利用三角函數(shù)。從某種意義上說(shuō),俯視角度與正斜視角度的變化就是三角函數(shù)的應(yīng)用,我也見過(guò)這類的45度斜視用例。但是,利用cos在Java中進(jìn)行三角函數(shù)的運(yùn)算,首先速度不能達(dá)到要求,其次圖像銜接度結(jié)果并不理

112、想,結(jié)果可能令圖像有鋸齒狀偏移,所以我并不推薦使用。</p><p><b>  對(duì)于如:</b></p><p>  類的菱形斜視圖像,我們可以利用一個(gè)簡(jiǎn)單的行列運(yùn)算獲得俯視角度地磚的繪制坐標(biāo)與斜視角度地磚的繪制坐標(biāo)的變換,公式如下:</p><p>  X:2.5D圖形中X軸位置=(目標(biāo)圖像Width/2)*(2D圖形中X-2D圖形中Y)&

113、lt;/p><p>  Y:2.5D圖形中Y軸位置=(目標(biāo)圖像Height/2)*(2D圖形中X+2D圖形中Y)/2</p><p><b>  關(guān)鍵代碼如下:</b></p><p>  com.cslg.pushBox.GameView.java類</p><p>  public void rectDraw(Canva

114、s canvas,int x,int y)</p><p><b>  {</b></p><p>  Path path = new Path();</p><p>  path.moveTo(coordinateXChange(x,y), coordinateYChange(x,y));</p><p>  path

115、.lineTo(coordinateXChange(x+9,y), coordinateYChange(x+9,y));//右上角頂點(diǎn)</p><p>  path.lineTo(coordinateXChange(x+9,y+9),coordinateYChange(x+9,y+9));//右下角頂點(diǎn)</p><p>  path.lineTo(coordinateXChange(x,y

116、+9), coordinateYChange(x,y+9));//左下角頂點(diǎn)</p><p>  path.lineTo(coordinateXChange(x,y), coordinateYChange(x,y));//左上角頂點(diǎn)</p><p>  canvas.drawPath(path, paint);</p><p><b>  }</b&

117、gt;</p><p>  public int coordinateXChange(int x,int y)</p><p><b>  {</b></p><p><b>  int newX;</b></p><p>  newX=(9/2)*(x-y);// X:2.5D圖形中X軸位置=(目

118、標(biāo)圖像Width/2)*(2D圖形中X-2D圖形中Y)</p><p>  return newX;</p><p><b>  }</b></p><p>  public int coordinateYChange(int x,int y)</p><p><b>  {</b></p&g

119、t;<p><b>  int newY;</b></p><p>  newY=(9/2)*(x+y)/2;// Y:2.5D圖形中Y軸位置=(目標(biāo)圖像Height/2)*(2D圖形中X+2D圖形中Y)/2</p><p>  return newY;</p><p><b>  }</b></p&g

120、t;<p>  5.3 角色動(dòng)畫效果模塊的實(shí)現(xiàn)</p><p>  本系統(tǒng)角色的運(yùn)動(dòng)分為兩種類型的運(yùn)動(dòng)實(shí)現(xiàn),一種類型是在未遇到障礙物與箱子的情況下,角色可以上下左右的走動(dòng),如圖5-2為角色向下移動(dòng)的圖示效果,另一種類型是當(dāng)角色在線路上遇到箱子時(shí)角色可以推這箱子移動(dòng)如圖5-3為角色推箱向下移動(dòng)的效果。</p><p>  圖5-2角色向下運(yùn)動(dòng)的圖片</p><

121、;p>  圖5-3角色推箱向下運(yùn)動(dòng)的圖片</p><p>  角色換幀圖片以數(shù)組的形式實(shí)現(xiàn),分為4個(gè)上下左右換幀數(shù)組和4個(gè)推箱子上下左右運(yùn)動(dòng)的數(shù)組</p><p><b>  關(guān)鍵代碼如下:</b></p><p>  Integer[] manDown=new Integer[]{R.drawable.a1,</p>&l

122、t;p>  R.drawable.a4,</p><p>  R.drawable.a8,</p><p>  R.drawable.a9,};//角色向下移動(dòng)</p><p>  Integer[] manPushDown=new Integer[]{</p><p>  R.drawable.e1,</p><p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論