2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢 業(yè) 論 文</b></p><p>  設(shè)計(論文)題目: 基于Android 益智拼圖游戲設(shè)計 </p><p><b>  目 錄</b></p><p><b>  摘 要II</b></p><p>  Abstract

2、III</p><p><b>  1 緒 論1</b></p><p>  1.1 課題開發(fā)的背景1</p><p>  1.2 課題意義1</p><p>  2 Android架構(gòu)與開發(fā)平臺搭建2</p><p>  2.1 Android的系統(tǒng)架構(gòu)2</p><

3、;p>  2.2 Window下Android開發(fā)環(huán)境的搭建4</p><p>  3 流程介紹與概要設(shè)計5</p><p>  3.1 游戲流程介紹5</p><p>  3.2 系統(tǒng)概要設(shè)計6</p><p>  3.2.1 界面布局模塊6</p><p>  3.2.2 難度選擇模塊6</

4、p><p>  3.2.3 圖片選擇模塊7</p><p>  3.2.4 步數(shù)和時間模塊7</p><p>  3.2.5 游戲?qū)崿F(xiàn)模塊7</p><p>  4 系統(tǒng)詳細(xì)設(shè)計與實現(xiàn)8</p><p>  4.1 界面布局實現(xiàn)8</p><p>  4.1.1 選擇界面布局8</

5、p><p>  4.1.2 游戲界面布局9</p><p>  4.2 游戲功能實現(xiàn)11</p><p>  4.2.1 難度選擇11</p><p>  4.2.2 圖片選擇12</p><p>  4.2.3 步數(shù)和時間設(shè)置13</p><p>  4.2.4 拼圖的實現(xiàn)14<

6、/p><p><b>  5 系統(tǒng)測試17</b></p><p>  5.1 Android仿真器介紹17</p><p>  5.2 功能模塊測試17</p><p>  5.3 出現(xiàn)的錯誤及解決方案20</p><p>  6 總結(jié)與展望21</p><p&g

7、t;<b>  參考文獻(xiàn)22</b></p><p><b>  附 錄23</b></p><p><b>  致 謝33</b></p><p>  基于Android益智拼圖游戲設(shè)計</p><p><b>  摘 要</b></p>

8、;<p>  隨著移動設(shè)備的日益普及,使用Android技術(shù)開發(fā)手機軟件受到越來越多人的青睞。在此背景下,本課題開發(fā)了一款A(yù)ndroid平臺下的手機游戲——益智拼圖。</p><p>  本文首先對Android的研究背景,系統(tǒng)架構(gòu)以及開發(fā)環(huán)境進(jìn)行介紹,然后就玩家對游戲的需求進(jìn)行一定的分析,最后運用Android技術(shù)實現(xiàn)拼圖游戲的開發(fā),并合理布局游戲界面,使游戲界面更加美觀和人性化,實現(xiàn)了游戲的基本

9、功能,最終可以讓玩家享受拼圖游戲的樂趣。</p><p>  關(guān)鍵詞:Android;拼圖游戲;Activity;架構(gòu) </p><p>  The development and features of Android</p><p><b>  Abstract</b></p><p>  Key words: An

10、droid;Jigsaw puzzle game;Activity;sturcture</p><p><b>  1 緒 論</b></p><p>  1.1 課題開發(fā)的背景</p><p>  隨著嵌入式技術(shù)的發(fā)展,手持終端設(shè)備也迅速發(fā)展起來,目前,全球手機用戶數(shù)已超過了PC機用戶數(shù),其中智能手機的比例越來越高。智能手機是指像電腦一樣可以

11、通過下載、安裝軟件來拓展基本功能的手機,一般具有智能手機操作系統(tǒng)。相較于非智能手機,它功能更強,處理速度更快?;贚inux的Android手機操作系統(tǒng),由于具有開源、免費的特性,迅速得到廣大愛好者及廠商的支持。目前,移動應(yīng)用軟件中的手機游戲開發(fā)是一項非常熱門的技術(shù)。</p><p>  Android系統(tǒng)對第三方軟件是開放的,這促進(jìn)了第三方軟件的發(fā)展。Android系統(tǒng)以Linux 2.6為核心,其安全機制比較

12、完善,增強了手機使用的安全性。Android平臺已經(jīng)形成由 Google牽頭,OHA組織參與,系統(tǒng)支持商和服務(wù)供應(yīng)商完善搭配的運作機制,為Android平臺的快速發(fā)展提供了堅實的基礎(chǔ)。</p><p>  由于Android構(gòu)建在開源代碼的框架之上,并且提供了強大的SDK庫和開放的理念,所以它為廣大的沒有任何移動應(yīng)用程序開發(fā)經(jīng)驗的新手開辟了一條開發(fā)完美移動應(yīng)用程序的康莊大道。而富有經(jīng)驗的移動開發(fā)人員現(xiàn)在也可以方便

13、地擴展到Android平臺上來,利用它獨特的功能來改進(jìn)現(xiàn)有產(chǎn)品或者開發(fā)其他新穎產(chǎn)品。</p><p><b>  1.2 課題意義</b></p><p>  Android軟件在一兩年的時間內(nèi)已經(jīng)迅速發(fā)展,在各類型應(yīng)用系統(tǒng)中都有令用戶滿意的成果,本課題研究的就是基于此背景下Android手機的一款益智拼圖游戲。通過該游戲的設(shè)計,將自己學(xué)到的Java,Android方

14、面的理論知識應(yīng)用于實踐,提高自己的動手能力。在設(shè)計的過程中,不斷的修補知識方面的漏洞,加深自己對程序設(shè)計的理解,為將來從事軟件開發(fā)事業(yè)打下基礎(chǔ)。</p><p>  2 Android架構(gòu)與開發(fā)平臺搭建</p><p>  2.1 Android的系統(tǒng)架構(gòu)</p><p>  Android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從圖2.1中可以看出,Andr

15、oid分為四個層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和Linux核心層。</p><p>  圖2.1 Android系統(tǒng)架構(gòu)圖</p><p><b>  應(yīng)用程序</b></p><p>  Android會同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括Email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人

16、管理程序等。所有的應(yīng)用程序都是使用JAVA語言編寫的。</p><p><b>  應(yīng)用程序框架</b></p><p>  開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計簡化了組件的重用;任何一個應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機制也使用戶可以

17、方便的替換程序組件。</p><p>  隱藏在每個應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;</p><p>  豐富而又可擴展的視圖(Views):可以用來構(gòu)建應(yīng)用程序,它包括列表(lists),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons),甚至可嵌入的web瀏覽器。</p><p>  內(nèi)容提供器(Content Provide

18、rs):使得應(yīng)用程序可以訪問另一個應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),或者共享它們自己的數(shù)據(jù)。</p><p>  資源管理器(Resource Manager):提供非代碼資源的訪問,如本地字符串,圖形,和布局文件(layout files)。</p><p>  通知管理器(Notification Manager):使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。</p>

19、<p>  活動管理器(Activity Manager):用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。</p><p><b>  (3) 系統(tǒng)運行庫</b></p><p><b>  1) 程序庫</b></p><p>  Android包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組

20、件使用。它們通過 Android應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下是一些核心庫:</p><p>  系統(tǒng)C庫:一個從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(libc), 它是專門為基于embedded linux的設(shè)備定制的。</p><p>  媒體庫:基于PacketVideo OpenCORE,該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態(tài)圖像文件。編碼格式包括MPEG4,H.2

21、64,MP3,AAC,AMR,JPG,PNG。</p><p>  Surface Manager:對顯示子系統(tǒng)的管理,并且為多個應(yīng)用程序提供了2D和3D圖層的無縫融合。</p><p>  LibWebCore:一個最新web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。</p><p>  SGL:底層的2D圖形引擎。</p>&

22、lt;p>  3D libraries:基于OpenGL ES 1.0 APIs實現(xiàn);該庫可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。</p><p>  FreeType:位圖(bitmap)和矢量(vector)字體顯示。</p><p>  SQLite:一個對于所有應(yīng)用程序可用,功能強勁的輕型關(guān)系型數(shù)據(jù)庫引擎。</p><p>  2

23、) Android 運行庫</p><p>  Android包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。</p><p>  每一個Android應(yīng)用程序都在它自己的進(jìn)程中運行,都擁有一個獨立的Dalvik虛擬 機實例。Dalvik被設(shè)計成一個設(shè)備可以同時高效地運行多個虛擬系統(tǒng)。Dalvik虛擬機執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對小內(nèi)存使用做

24、了優(yōu)化。同時虛擬機是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯,然后通過SDK的"dx"工具轉(zhuǎn)化成.dex格式由虛擬機執(zhí)行。</p><p>  Dalvik虛擬機依賴于Linux內(nèi)核的一些功能,比如線程機制和底層內(nèi)存管理機制。</p><p>  (4) Linux內(nèi)核</p><p>  Android的核心系統(tǒng)服務(wù)依賴于Linux 2.

25、6內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型。Linux內(nèi)核也同時作為硬件和軟件棧之間的抽象層。</p><p>  2.2 Window下Android開發(fā)環(huán)境的搭建</p><p>  為了在PC主機上得到Android的開發(fā)環(huán)境,我們選擇在Windows操作系統(tǒng)中進(jìn)行對Android開發(fā)環(huán)境的搭建,具體步驟如下:</p><p><b>

26、; ?。?)JDK安裝</b></p><p>  首先下載JDK,按照提示安裝成功后,最重要的是進(jìn)行環(huán)境變量的配置,步驟如下:我的電腦->屬性->高級->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量:</p><p>  Java_HOME值為:C:\Program Files\Java\jdk1.6.0_20(安裝JDK的目錄)</p><p>  CLA

27、SSPATH值為:.;%Java_HOME%lib\tools.jar;%Java_HOME%\lib\dt. jar;%Java _HOME%\bin;</p><p>  Path值:添加C:\Program Files\Java\jdk1.6.0_20\bin;</p><p> ?。?)Eclipse安裝可下載一個綠色版的Eclipse,無需安裝,和安裝版一樣都能為Android開

28、發(fā)提供功能。</p><p> ?。?)Android SDK安裝在Android Developers下載Android-sdk_r07-windows.zip,下載完成后解壓到任意路徑。</p><p>  運行SDK Manager.exe,出現(xiàn)如圖以下界面,點擊Available Package。選擇希望安裝的SDK及其文檔或者其它包,點擊Installation Selected

29、、Accept All、Install Accepted,開始下載安裝所選包。</p><p>  下載完成后出現(xiàn)如下圖的所有Android-sdk_r07-windows文件夾內(nèi)容;</p><p><b> ?。?)ADT安裝</b></p><p>  ADT實際上是一個工具,它可以連接sdk和Eclipse,幫助Eclipse找到sdk

30、打開Eclipse界面,進(jìn)入進(jìn)入菜單中的“Help”-> “Install New Software”,點擊Add按鈕彈出對話框要求輸入Name和Location,完成之后,選擇Window >Preferences;在左邊的面板選擇Android,然后在右側(cè)點擊Browse;并選中SDK路徑,本機為;D:\YJSH\Android\Android-sdk_r07-windows;點擊Apply、OK。配置完成。</p>

31、<p><b> ?。?)創(chuàng)建AVD</b></p><p>  為使Android應(yīng)用程序可以在模擬器上運行,必須創(chuàng)建AVD,步驟如下:</p><p>  在Eclipse中,選擇Windows > Android SDK and AVD Manager,點擊左側(cè)面板的Virtual Devices,再右側(cè)點擊New,填入Name,選擇Targe

32、t的API,SD Card大小任意,Skin隨便選,Hardware目前保持默認(rèn)值,點擊CreateAVD即可完成創(chuàng)建AVD。</p><p>  3 流程介紹與概要設(shè)計</p><p>  3.1 游戲流程介紹</p><p>  根據(jù)拼圖游戲的游戲規(guī)則,本設(shè)計擬出游戲的大致流程如圖3.1所示:</p><p>  圖3.1 拼圖游戲流程圖

33、</p><p>  3.2 系統(tǒng)概要設(shè)計</p><p>  本設(shè)計參考了拼圖游戲流程圖(圖3.1)按照自頂向下的設(shè)計方式將拼圖游戲分為以下模塊進(jìn)行設(shè)計,如圖3.2所示:</p><p>  圖3.2 拼圖游戲模塊</p><p>  3.2.1 界面布局模塊</p><p>  由于本課題的題材是一款游戲,對于游戲

34、的界面以及一些基本控件有必要介紹一下。本系統(tǒng)一共有兩個界面:一個選擇界面,一個游戲界面,基本的控件有文本框,下拉列表,網(wǎng)格視圖,按鈕,圖片視圖等。下面簡單介紹下它們的作用:</p><p>  文本框主要是用來顯示一些文本,這些文本基本是描述文本框所在位置的功能。</p><p>  下拉列表主要用在了難度選擇部分,當(dāng)玩家點擊難度時,會出現(xiàn)下拉列表。</p><p>

35、;  網(wǎng)格視圖主要用于圖片選擇部分,利用網(wǎng)格視圖將圖片一一列出,供玩家選擇圖片進(jìn)行游戲。</p><p>  按鈕是兩個界面的鏈接樞紐,在第一個選擇界面按下確定按鈕,會跳轉(zhuǎn)到游戲界面。在游戲界面也設(shè)置了一個按鈕,主要是給玩家提供“重新游戲”的機會。</p><p>  圖片視圖只要用來顯示圖片,在游戲界面用圖片視圖顯示圖片,供玩家游戲。</p><p>  3.2.

36、2 難度選擇模塊</p><p>  拼圖游戲的難度在于圖片被分割后的塊數(shù),數(shù)量越多,自然難度就越大。</p><p>  (1)難度最小的是將其設(shè)置為3*3 </p><p>  當(dāng)難度設(shè)置為3*3時,系統(tǒng)將圖片分割為3行3列,也就是將圖片分成了9塊。</p><p> ?。?)難度最大的是將其設(shè)置為4*4</p><p

37、>  當(dāng)難度設(shè)置為4*4時,系統(tǒng)將圖片分割成4行4列,也就是將圖片分成了16塊。</p><p>  (3)難度中等的設(shè)置有兩種:3*4 和4*3 </p><p>  當(dāng)難度設(shè)置為3*4時,系統(tǒng)將圖片分割成3行4列,即分成了12塊。</p><p>  當(dāng)難度設(shè)置為4*4時,系統(tǒng)將圖片分割成4行3列,同樣分成了12塊。</p><p>

38、;  3.2.3 圖片選擇模塊</p><p>  圖片選擇步驟相當(dāng)簡單,只要在選擇界面的圖片選擇區(qū)域,從9張圖片中鼠標(biāo)單擊1張玩家感興趣的圖片即可。</p><p>  3.2.4 步數(shù)和時間模塊</p><p>  拼圖游戲過程中,為了增加趣味性,玩家每移動一次圖塊,步數(shù)加一,知道游戲全部位置正確,游戲結(jié)束,統(tǒng)計最后步數(shù);從游戲開始,時間模塊開始計時,直到游戲結(jié)

39、束,時間停止,并顯示玩家完成游戲所花的時間。</p><p>  3.2.5 游戲?qū)崿F(xiàn)模塊</p><p>  在完成上述的圖片選擇,難度選擇后就可以開始正式的拼圖游戲。</p><p>  玩家選擇“play”后,圖片會根據(jù)玩家選擇的難度隨機分解圖片。在本設(shè)計中,原圖分割后右下角設(shè)置為空白塊,為圖塊的移動提供可能。玩家用鼠標(biāo)點擊與空白塊相鄰的圖塊,并將選中的圖片往

40、空白塊拖動,這樣就完成了空白塊與選中圖片的位置的互換。這樣子循環(huán)往復(fù),知道全部圖塊位置正確,游戲就結(jié)束了。</p><p>  4 系統(tǒng)詳細(xì)設(shè)計與實現(xiàn)</p><p>  4.1 界面布局實現(xiàn)</p><p>  本設(shè)計有兩個界面:選擇界面和游戲界面。界面的設(shè)計主要運用Android的繪圖技術(shù),圖形的繪制通常是在View類中完成的,同時也會用到各種控件,如:Text

41、View,Button,Spinner,GridView,ImageView。當(dāng)然說到控件,容器就不得不提了,兩者是息息相關(guān)的。本設(shè)計中用到了最常用的LinearLayout容器,控件的布局也用到了相對布局,絕對布局等。</p><p>  4.1.1 選擇界面布局</p><p>  選擇界面在main.xml文件中布局,界面效果如圖4.1.1 :</p><p>

42、;  圖4.1.1 選擇界面</p><p>  該界面采用LinearLayout布局,在LinearLayout標(biāo)簽中完成界面設(shè)置。</p><p>  布局設(shè)置:設(shè)置布局排列方式為豎直排列,寬和高的值為填滿,背景顏色為黑色。代碼如下:</p><p>  android:orientation="vertical" </p>

43、<p>  android:layout_width="fill_parent"</p><p>  android:layout_height="fill_parent"</p><p>  下面給出構(gòu)成該界面的一些基本控件的設(shè)置代碼:</p><p>  設(shè)置文本框的高和寬根據(jù)內(nèi)容調(diào)整,文本內(nèi)容從values文

44、件夾中的strings.xml文件中讀取,內(nèi)容為“等級”:</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:text="@string/leve

45、l"</p><p>  style="@style/font_20_white_bold"/</p><p>  設(shè)置下拉列表的高和寬根據(jù)內(nèi)容調(diào)整:</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_

46、height="wrap_content"</p><p>  設(shè)置文本框高根據(jù)內(nèi)容調(diào)整,寬為填滿,文本內(nèi)容取自values文件夾下strings.xml文件,內(nèi)容為選擇圖片區(qū):</p><p>  android:layout_width="fill_parent"</p><p>  android:layout_heig

47、ht="wrap_content"</p><p>  android:text="@string/selectPictureArea"</p><p>  style="@style/font_20_white_bold"</p><p>  android:background="@color

48、/slateGray"</p><p>  設(shè)置網(wǎng)格視圖寬和高為填滿: </p><p>  android:layout_width="fill_parent" </p><p>  android:layout_height="fill_parent"</p><p>  設(shè)置按鈕

49、屬性,寬和高為根據(jù)內(nèi)容調(diào)整,按鈕內(nèi)容取自values文件夾的strings.xml文件,內(nèi)容為“確定”:</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:

50、text="@string/confirm"</p><p>  style="@style/btn_font_17_black"</p><p>  android:layout_gravity="center”</p><p>  4.1.2 游戲界面布局</p><p>  游戲界面在j

51、igsaw.xml文件中布局,界面效果如圖4.1.2:</p><p>  圖4.1.2 游戲界面</p><p>  該界面同樣采用LinearLayout布局,在LinearLayout標(biāo)簽中進(jìn)行基本設(shè)置。</p><p>  布局設(shè)置:高和寬為填滿,排列方式為豎直排列,背景顏色為黑色。代碼如下:</p><p>  android:la

52、yout_width="fill_parent"</p><p>  android:layout_height="fill_parent"</p><p>  android:orientation="vertical"</p><p>  android:background="@color/

53、black"</p><p>  下面給出游戲界面其他控件的設(shè)置內(nèi)容和相關(guān)代碼:</p><p>  設(shè)置文本框的高和寬根據(jù)內(nèi)容調(diào)整,文本框的內(nèi)容取自strings.xml,內(nèi)容為“預(yù)覽”,位置居中:</p><p>  android:layout_width="wrap_content"</p><p>  

54、android:layout_height="wrap_content"</p><p>  android:text="@string/preview"</p><p>  style="@style/font_20_white_bold"</p><p>  android:layout_gravity

55、="center"</p><p>  設(shè)置圖片框高和寬根據(jù)內(nèi)容調(diào)整,圖片取自drawable文件下的pingtu_6 : </p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content&qu

56、ot;</p><p>  android:src="@drawable/pingtu_6"</p><p>  設(shè)置文本框高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自strings.xml中的level2,內(nèi)容為“等級”:</p><p>  android:layout_width="wrap_content"</p>

57、<p>  android:layout_height="wrap_content"</p><p>  android:text="@string/level2"</p><p>  style="@style/font_20_white_bold"</p><p>  設(shè)置文本框高和寬根據(jù)內(nèi)

58、容調(diào)整,文本框內(nèi)容取自strings.xml中的stepNum,內(nèi)容為“步數(shù)”:</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  android:text="@

59、string/stepNum"</p><p>  style="@style/font_20_white_bold"</p><p>  設(shè)置文本框高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自strings.xml中的time,內(nèi)容為“時間”: </p><p>  android:layout_width="wrap_conte

60、nt"</p><p>  android:layout_height="wrap_content"</p><p>  android:text="@string/time"</p><p>  style="@style/font_20_white_bold"</p><p

61、>  設(shè)置按鈕高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自strings.xml中的play,內(nèi)容為“play”</p><p>  android:layout_width="wrap_content"</p><p>  android:layout_height="wrap_content"</p><p>  androi

62、d:text="@string/play"</p><p>  android:textSize="14dip"</p><p>  4.2 游戲功能實現(xiàn)</p><p>  游戲代碼具體運行流程是這樣的:游戲啟動后,啟動MainActivity,接著加載main.xml初始化選擇界面,在完成難度選擇和圖片選擇后,點擊“確定”

63、按鈕,運行MainActivity類中的監(jiān)聽器btnOnClickListener跳轉(zhuǎn)在JigsawActivity,并加載jigsaw.xml文件初始化游戲界面,然后根據(jù)界面上的內(nèi)容進(jìn)行游戲。</p><p>  整個設(shè)計過程中主要完成以下功能:難度選擇,圖片選擇,步數(shù)和計時功能,拼圖功能。</p><p>  4.2.1 難度選擇</p><p>  在選擇界面

64、點擊“等級”后的下拉列表,跳出下拉列表框,供玩家選擇難度,在 MainActivity中導(dǎo)入MainImpl類和IMain類用于實現(xiàn)難度選擇。MainImpl類中定義了 getLevelAdapter方法,使用List()將四種難度等級存入列表,以供選擇。</p><p>  getLevelAdapter方法的代碼如下:</p><p>  public ArrayAdapter<

65、String> getLevelAdapter(Context context) {</p><p>  List<String> list=new ArrayList<String>();</p><p>  String[] level=context.getResources().getStringArray(R.array.levelArray);&l

66、t;/p><p>  for(String str:level){</p><p>  list.add(str);</p><p><b>  }</b></p><p>  ArrayAdapter<String> cityArrayAdapter=new ArrayAdapter<String>

67、(context,android.R.layout.simple_spinner_item,list);</p><p>  cityArrayAdapter.setDropDownViewResource(android.R.layout.simple_</p><p>  spinner_dropdown_item);</p><p>  return city

68、ArrayAdapter;</p><p><b>  }</b></p><p>  在MainActivity中給難度選擇定義兩個監(jiān)聽器ItemClickListener,玩家單擊下拉列表,就會啟動ItemClickListener,玩家點擊四個難度中的一種后又會啟動另一個監(jiān)聽器 ItemSelectedListener。玩家選擇完,選擇的難度將會傳回Activi

69、ty。</p><p>  監(jiān)聽器的簡單代碼如下: </p><p>  private class ItemSelectedListener implements OnItemSelectedListener{</p><p>  public void onItemSelected(AdapterView<?> adapterView, View v

70、iew, int position,</p><p>  long rowid) {</p><p>  pictureIndex=position;</p><p><b>  }</b></p><p>  public void onNothingSelected(AdapterView<?> arg0

71、) {</p><p><b>  }</b></p><p><b>  }</b></p><p>  4.2.2 圖片選擇</p><p>  選擇界面會列舉出9種圖片供玩家選擇。圖片列舉功能是由MainActivity中的 showGridView方法和getAllItemsForListV

72、iew方法完成的。showGridView方法獲取屏幕大小,根據(jù)screenWidt和screenHeight自動調(diào)整圖片大小,保證界面的美觀。而getAllItemsForListView方法生成動態(tài)數(shù)組imageItem,并且傳入數(shù)據(jù),將圖片一一列舉出來。玩家點擊一張圖片并按下“確定”按鈕時,將選擇的圖片同時傳遞給JigsawActivity。代碼如下:</p><p>  private void show

73、GridView(){</p><p>  DisplayMetrics dm = new DisplayMetrics();</p><p>  dm = this.getApplicationContext().getResources().getDisplayMetrics();</p><p>  pictureGridView.setColumnWidth

74、((screenWidth-10*4)/3);</p><p>  SimpleAdapter saImageItems = new SimpleAdapter(this, getAllItemsForListView(),R.layout.grid_item,</p><p>  new String[] { "ImageView"},</p><

75、;p>  new int[] { R.id.gridItem_imgView});</p><p>  pictureGridView.setAdapter(saImageItems);</p><p>  pictureGridView.setSelector(R.drawable.menuitemshape);</p><p><b>  }&l

76、t;/b></p><p>  列出9張圖片,并選擇一張圖片進(jìn)行游戲是在getAllItemsForListView()方法中實現(xiàn)的,在該方法中生成了動態(tài)數(shù)組imageItem,將各個圖片的序號傳入了數(shù)組中。</p><p>  public List<Map<String, Object>> getAllItemsForListView() {</p&

77、gt;<p>  List<Map<String, Object>> imageItem = new ArrayList<Map<String, Object>>();</p><p>  for (int i=0;i<pictureArray.length;i++) {</p><p>  HashMap<Stri

78、ng, Object> tempMap = new HashMap<String, Object>();</p><p>  tempMap.put("ImageView",pictureArray[i]);// </p><p>  imageItem.add(tempMap);</p><p><b>  }&l

79、t;/b></p><p>  return imageItem;</p><p><b>  }</b></p><p>  4.2.3 步數(shù)和時間設(shè)置</p><p>  在JigsawActivity的initControls分別給stepNumTV和timeTV做出定義。玩家點擊界面上的“play”按鈕,啟

80、動onClick方法,該方法開始給步數(shù)和時間賦初值。關(guān)于時間設(shè)置,還給出了時間的分秒設(shè)置。這是在timeParser方法中實現(xiàn)的,每過60秒,分鐘加1。游戲過程中圖片移動一次,步數(shù)加1。具體實現(xiàn)如下:</p><p>  在游戲過程中,秒數(shù)一直在加一,這一實現(xiàn)體現(xiàn)在GameRunable 類中的run方法中。當(dāng)然在秒數(shù)加1之前要先判斷是否為游戲狀態(tài),代碼為:</p><p>  publi

81、c void run() {</p><p>  while(isGaming){ </p><p><b>  try {</b></p><p>  second++; </p><p>  Message msg=new Message();</p><p&

82、gt;  msg.what=TIME_MESSAGE;</p><p>  mHandler.sendMessage(msg);</p><p>  Thread.sleep(1000); //</p><p>  } catch (InterruptedException e) {</p><p>  e.printStackTrace

83、();</p><p><b>  }</b></p><p><b>  }</b></p><p>  步數(shù)和時間的運行都是handleMessage方法中實現(xiàn),在該方法中通過switch—case語句實現(xiàn)判斷。</p><p>  public void handleMessage(andro

84、id.os.Message msg){</p><p>  switch(msg.what){</p><p>  case TIME_MESSAGE:</p><p><b>  break;</b></p><p>  case INIT_MESSAGE:</p><p><b> 

85、 break;</b></p><p><b>  }</b></p><p>  super.handleMessage(msg);</p><p><b>  }</b></p><p>  4.2.4 拼圖的實現(xiàn)</p><p>  在JigsawActiv

86、ity中進(jìn)行游戲時首先要解決的問題就是圖片的隨機分割問題。該問題的解決方案在JigsawView類中,JigsawActivity只是導(dǎo)入了該類。在該類中定義了相當(dāng)多的變量,具體如下:</p><p>  private Bitmap[] oBitamp;//初始化切割后的圖片輸數(shù)組</p><p>  private int row=2;//行</p><p> 

87、 private int col=2;//列</p><p>  private int cutBitmapWidht;//切割后每張位圖的寬</p><p>  private int cutBitmapHeight;//切割后每張位圖的高</p><p>  private float x,y;//當(dāng)然觸發(fā)的X,Y坐標(biāo)</p><p> 

88、 private int offsetW,offsetH;//偏移量寬度\高度</p><p>  private int maxRectW,maxRectH;//最大矩形寬,高</p><p>  private PointF downPoint=new PointF();//觸發(fā)的坐標(biāo)點</p><p>  private PointF currPoint=ne

89、w PointF();//當(dāng)前坐標(biāo)點</p><p>  private int step=0;//步數(shù)</p><p>  private boolean isGameing=false;//是否游戲中</p><p>  該問題的解決涉及到隨機和分割兩個算法。關(guān)于隨機的問題,算法中使用了randomGenerated 方法,該方法隨機生成0-n范圍內(nèi)不重復(fù)的數(shù)字

90、,不包含n。在Math類中有定義的random方法,因此只需要調(diào)用以下。代碼如下:</p><p>  private void randomGenerated(int n){</p><p>  Vector<Integer> vector=new Vector<Integer>();</p><p>  int[] num=new in

91、t[n];</p><p>  for(int i=0;i<n;i++){</p><p>  int radom = (int)(Math.random()*n); </p><p>  radom = (int)(Math.random()*n);</p><p>  while(vector.contains(radom))

92、{</p><p>  radom = (int)(Math.random()*n);</p><p><b>  }</b></p><p>  vector.add(radom);</p><p>  num[i]=radom;</p><p><b>  }</b>&l

93、t;/p><p>  for(int i=0;i<col;i++){</p><p>  for(int j=0;j<row;j++){</p><p>  Picture picture=new Picture();</p><p>  picture.value=num[i*row+j]; </p>&l

94、t;p>  pictrueArray[j][i]=picture;</p><p>  System.out.println(pictrueArray[j][i].value);</p><p><b>  }</b></p><p><b>  }</b></p><p>  cutBitm

95、ap(mBitmap);</p><p><b>  }</b></p><p>  分割圖片是通過cutBitmap方法實現(xiàn)的,定義了cutBitmaoWidth,cutBitmapHeight變量表示分割后圖片的寬和高,并根據(jù)難度選擇的行數(shù)和列數(shù)初始化分割后的圖片數(shù)數(shù)組。具體代碼如下:</p><p>  private void cutB

96、itmap(Bitmap srcBitamp){</p><p>  cutBitmapWidht=srcBitamp.getWidth()/row; //分割后每張位圖的寬。</p><p>  cutBitmapHeight=srcBitamp.getHeight()/col; //分割后每張位圖的高。</p><p>  offsetW=c

97、utBitmapWidht; //偏移量寬度。</p><p>  offsetH=cutBitmapHeight; //偏移量高度。</p><p>  oBitamp=new Bitmap[row*col]; //初始化切割后的圖片數(shù)數(shù)組。</p><p>  for(int i

98、=0;i<col;i++){</p><p>  for(int j=0;j<row;j++){</p><p>  oBitamp[i*row+j]=Bitmap.createBitmap(srcBitamp, cutBitmapWidht*j, cutBitmapHeight*i, cutBitmapWidht, cutBitmapHeight);</p>&

99、lt;p><b>  }</b></p><p><b>  }</b></p><p>  for(int i=0;i<col;i++){</p><p>  for(int j=0;j<row;j++){</p><p>  if((i==(col-1))&&(

100、j==(row-1))){</p><p>  pictrueArray[j][i].bitamp=null; </p><p><b>  }else{</b></p><p>  pictrueArray[j][i].bitamp=oBitamp[pictrueArray[j][i].value];</p><p&g

101、t;<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  用randomGenerated 方法解決了圖片隨機分割的問題之后,接著就是游戲的運行即交換圖片功能的實現(xiàn)。首先確保鼠標(biāo)點擊并拖動圖片有效,然后實現(xiàn)圖片的交換。為確保鼠標(biāo)點擊

102、和拖動有效,定義onTouchEvent方法進(jìn)行活動的判斷,該方法中定義了x,y兩個變量表示坐標(biāo),來顯示鼠標(biāo)點擊的位置。</p><p>  onTouchEvent方法中定義了如下兩個變量:</p><p>  x=event.getX();</p><p>  y=event.getY();</p><p>  通過如下語句實現(xiàn)判斷鼠標(biāo)的

103、活動:按下(MotionEvent.ACTION_DOWN),離開(MotionEvent.ACTION_UP),移動(MotionEvent.ACTION_MOVE)。</p><p>  if(!((x<=maxRectW)&&(y<=maxRectH))){</p><p>  return false;</p><p><b

104、>  }</b></p><p>  switch(event.getAction()){</p><p>  case MotionEvent.ACTION_DOWN:{ </p><p><b>  }</b></p><p>  case MotionEvent.ACTION_UP:{

105、 </p><p><b>  }</b></p><p>  case MotionEvent.ACTION_MOVE:{ </p><p><b>  }</b></p><p><b>  }</b></p><p>  re

106、turn super.onTouchEvent(event);</p><p><b>  }</b></p><p>  交換圖片的動作由swapPicture方法實現(xiàn),交換代碼簡單如下: </p><p>  int value;</p><p>  value=picture1.value; &

107、lt;/p><p>  picture1.value=picture2.value; </p><p>  picture2.value=value; </p><p><b>  5 系統(tǒng)測試</b></p><p>  5.1 Android仿真器介紹</p><p>

108、;  仿真器是在計算機中運行的一個虛擬的移動裝置,用它來設(shè)計、調(diào)試應(yīng)用。</p><p>  ADT是一個用于開發(fā)Android應(yīng)用的eclipse插件,它方便了我們的開發(fā)。例如,它讓我們方便從eclipse內(nèi)部訪問DDMS工具(可用于截屏,管理port-forwarding,設(shè)斷點,查看線程和進(jìn)程信息)</p><p>  DDMS(Dalvik Debug Monitor Servic

109、e)和Dalvik虛擬機集成,將在IDE和模擬器起到一個轉(zhuǎn)發(fā)服務(wù)。用它能管理仿填器或者設(shè)備的進(jìn)程,并且輔助調(diào)試。你可用它殺死進(jìn)程,選擇某一進(jìn)程去DEBUG,產(chǎn)生TRACE數(shù)據(jù),查看堆和線程信息等等。</p><p>  Aapt(Andvoid Asset Packaging Tool),用于創(chuàng)建.apk文件。</p><p>  Aidl(Andvoid Interface Descri

110、ption Language)用于產(chǎn)生代碼。</p><p>  Sqlite3用于訪問SQLite數(shù)據(jù)文件。</p><p>  Traceview用于查看LOG信息</p><p>  Dx工具用于重寫.class字節(jié)碼到Andvoid字節(jié)碼。</p><p>  ActivityCreator用于產(chǎn)生ant文件的腳本。當(dāng)然,若用ecli

111、pse插件就不需要它了。</p><p>  5.2 功能模塊測試</p><p>  在虛擬器上完成一次拼圖游戲,即可測試出本設(shè)計是否已經(jīng)完成。下面給出各個功能模塊的測試過程,若這些功能在模擬器上都能得到體現(xiàn),則說明本設(shè)計基本成功。</p><p>  1) 難度選擇模塊:</p><p>  在選擇界面點擊“等級”下拉框,選擇一個難度,

112、按下“確定”按鈕后跳轉(zhuǎn)到游戲界面,在游戲界面的文本框“等級”下顯示出玩家選擇的難度。</p><p><b>  界面如下:</b></p><p>  圖5.2.1 難度選擇模塊</p><p>  2) 圖片選擇模塊:</p><p>  在選擇界面點擊一張圖片,按下“確定”按鈕后跳轉(zhuǎn)到游戲界面,在游戲界面的圖片框中

113、顯示玩家選擇的圖片。</p><p><b>  界面如下:</b></p><p>  圖5.2.2 圖片選擇模塊</p><p>  3) 步數(shù)和時間設(shè)置模塊:</p><p>  在游戲界面,點擊“play”按鈕后,時間開始自加1秒,每移動一個圖塊,步數(shù)一欄加1 。</p><p><

114、b>  界面如下:</b></p><p>  圖5.2.3 步數(shù)和時間設(shè)置模塊</p><p>  4) 游戲?qū)崿F(xiàn)模塊:</p><p>  在游戲界面,點“play”按鈕后,鼠標(biāo)點擊圖塊并拖動,能與空白圖塊交換位置。當(dāng)圖片拼成原樣時,彈出窗口提示游戲結(jié)束。</p><p><b>  界面如下:</b&g

115、t;</p><p>  圖5.2.4 游戲?qū)崿F(xiàn)模塊</p><p>  5.3 出現(xiàn)的錯誤及解決方案</p><p>  完成系統(tǒng)的過程中不可避免的出現(xiàn)了一些問題,通過自我學(xué)習(xí)和他人指導(dǎo),最終解決了這些問題。具體錯誤和解決方案如下表5.1:</p><p>  表5.1 錯誤及解決方案對照表</p><p><

116、;b>  6 總結(jié)與展望</b></p><p>  大學(xué)四年學(xué)習(xí)的編程思想和編程技巧,在最后的畢業(yè)設(shè)計當(dāng)中得到了運用。經(jīng)過此次畢業(yè)設(shè)計,充分認(rèn)識到了自己編程能力方面的缺陷,感覺到自己的基礎(chǔ)比較薄弱。但在這段時間里,我不斷地發(fā)現(xiàn)自己的問題,并且找出問題產(chǎn)生的原因,根據(jù)相關(guān)的方法解決問題。幾個月的努力沒有白費,終于基本上完成拼圖游戲的功能,雖然還有不少不足,我將不斷的完善它。</p>

117、<p>  做一個完整的系統(tǒng)之前,必須先對該系統(tǒng)進(jìn)行需求分析,擬好系統(tǒng)需要達(dá)到的功能和系統(tǒng)的所有需求,并且畫出系統(tǒng)的大體設(shè)計流程圖和框架。做完這些準(zhǔn)備工作,做系統(tǒng)的時候才會得心應(yīng)手。想到那里就做到那里,不僅效率不高,還會影響到系統(tǒng)的可用性。</p><p>  完成系統(tǒng)之后才發(fā)現(xiàn),對于軟件設(shè)計,要想做到得心應(yīng)手,必須多多練習(xí)。只有寫夠足夠多的代碼,才能真正理解軟件設(shè)計的思想及運用。當(dāng)然要做到這一步,要

118、付出相當(dāng)多的努力,在沒有做到之前,遇到不懂的地方就要多參考資料,請教別人。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] (美)Eric J.Baucle.軟件設(shè)計——從程序設(shè)計到體系結(jié)構(gòu)[M].李仁發(fā)等譯.北京: 電子工業(yè)出版社,2007.</p><p>  [2] 孔令德.畢業(yè)設(shè)計案例教程——從系統(tǒng)開發(fā)到論

119、文寫作[M].北京:國防工業(yè)出版社,2007.</p><p>  [3] (美)威爾頓,麥可匹克.JavaScript入門經(jīng)典(第3版)[M].北京 施宏斌譯.北京:清華大學(xué)出版社,2009.</p><p>  [4] E2ECloud工作室.深入淺出Google Android[M].北京:人民郵電出社,2009.08.</p><p>  [5] 余志

120、龍等.Android SDK開發(fā)范例大全[M].北京:人民郵電出版社.2009.</p><p>  [6] 姚尚朗,靳巖.Google Android開發(fā)入門與實踐 [M].北京:人民郵電出版社,2009.</p><p>  [7] 余志龍等.Google Android SDK開發(fā)范例大全(第二版)[M].北京:人民郵電出版社,2010.</p>

121、<p>  [8] 李船戊.智能手機原理與未來發(fā)展[J].科技與生活,2010,第1卷5(期).</p><p>  [9] (美)墨菲.Android開發(fā)入門教程[M].北京:人民郵電出版社,2010.</p><p>  [10] 郭宏志.Android應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.</p><p>  [11] 熊剛.

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論