版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 本科畢業(yè)論文基于安卓系統(tǒng)的拼圖游戲的設(shè)計與開發(fā)
- 益智拼圖游戲設(shè)計畢業(yè)論文
- 基于Java的拼圖游戲畢業(yè)論文.docx
- 拼圖游戲-拼圖游戲總結(jié).doc
- 基于java的拼圖游戲設(shè)計
- 拼圖游戲
- 畢業(yè)論文——基于安卓坦克大戰(zhàn)游戲
- 基于安卓的手機游戲開發(fā)畢業(yè)論文
- 基于java的拼圖游戲
- 拼圖游戲
- 基于安卓坦克大戰(zhàn)游戲畢業(yè)論文.doc
- 計算機應(yīng)用技術(shù)畢業(yè)論文(設(shè)計)--拼圖游戲
- 拼圖游戲 .zip
- 拼圖游戲.docx
- 拼圖游戲-需求設(shè)計.docx
- 安卓游戲畢業(yè)設(shè)計論文
- 拼圖游戲3
- 拼圖游戲2
- 畢業(yè)論文——基于安卓系統(tǒng)的考勤系統(tǒng)
- 安卓游戲畢業(yè)設(shè)計--基于安卓的“經(jīng)營冷飲店”游戲設(shè)計
評論
0/150
提交評論