版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢 業(yè) 論 文</b></p><p> 設計(論文)題目: 基于Android 益智拼圖游戲設計 </p><p> 學生姓名: 指導教師: 講師 </p><p> 二級學院: 信息技術學院 專 業(yè): 計算機科學與
2、技術 </p><p> 班 級:08計算機科學與技術(2) 學 號: </p><p><b> 目 錄</b></p><p><b> 摘 要II</b></p><p> AbstractIII</p><p><b>
3、 1 緒 論1</b></p><p> 1.1 課題開發(fā)的背景1</p><p> 1.2 課題意義1</p><p> 2 Android架構與開發(fā)平臺搭建2</p><p> 2.1 Android的系統(tǒng)架構2</p><p> 2.2 Window下Android開發(fā)環(huán)境的搭建
4、4</p><p> 3 流程介紹與概要設計5</p><p> 3.1 游戲流程介紹5</p><p> 3.2 系統(tǒng)概要設計6</p><p> 3.2.1 界面布局模塊6</p><p> 3.2.2 難度選擇模塊6</p><p> 3.2.3 圖片選擇模塊7&
5、lt;/p><p> 3.2.4 步數(shù)和時間模塊7</p><p> 3.2.5 游戲?qū)崿F(xiàn)模塊7</p><p> 4 系統(tǒng)詳細設計與實現(xiàn)8</p><p> 4.1 界面布局實現(xiàn)8</p><p> 4.1.1 選擇界面布局8</p><p> 4.1.2 游戲界面布局9&
6、lt;/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ù)和時間設置13</p><p> 4.2.4 拼圖的實現(xiàn)14</p><p><b> 5 系統(tǒng)測
7、試17</b></p><p> 5.1 Android仿真器介紹17</p><p> 5.2 功能模塊測試17</p><p> 5.3 出現(xiàn)的錯誤及解決方案20</p><p> 6 總結與展望21</p><p><b> 參考文獻22</b><
8、;/p><p><b> 附 錄23</b></p><p><b> 致 謝33</b></p><p> 基于Android益智拼圖游戲設計</p><p><b> 摘 要</b></p><p> 隨著移動設備的日益普及,使用Andro
9、id技術開發(fā)手機軟件受到越來越多人的青睞。在此背景下,本課題開發(fā)了一款Android平臺下的手機游戲——益智拼圖。</p><p> 本文首先對Android的研究背景,系統(tǒng)架構以及開發(fā)環(huán)境進行介紹,然后就玩家對游戲的需求進行一定的分析,最后運用Android技術實現(xiàn)拼圖游戲的開發(fā),并合理布局游戲界面,使游戲界面更加美觀和人性化,實現(xiàn)了游戲的基本功能,最終可以讓玩家享受拼圖游戲的樂趣。</p>&
10、lt;p> 關鍵詞:Android;拼圖游戲;Activity;架構 </p><p> The development and features of Android</p><p><b> Abstract</b></p><p> Key words: Android;Jigsaw puzzle game;Activity
11、;sturcture</p><p><b> 1 緒 論</b></p><p> 1.1 課題開發(fā)的背景</p><p> 隨著嵌入式技術的發(fā)展,手持終端設備也迅速發(fā)展起來,目前,全球手機用戶數(shù)已超過了PC機用戶數(shù),其中智能手機的比例越來越高。智能手機是指像電腦一樣可以通過下載、安裝軟件來拓展基本功能的手機,一般具有智能手機操作系統(tǒng)。
12、相較于非智能手機,它功能更強,處理速度更快。基于Linux的Android手機操作系統(tǒng),由于具有開源、免費的特性,迅速得到廣大愛好者及廠商的支持。目前,移動應用軟件中的手機游戲開發(fā)是一項非常熱門的技術。</p><p> Android系統(tǒng)對第三方軟件是開放的,這促進了第三方軟件的發(fā)展。Android系統(tǒng)以Linux 2.6為核心,其安全機制比較完善,增強了手機使用的安全性。Android平臺已經(jīng)形成由 Goo
13、gle牽頭,OHA組織參與,系統(tǒng)支持商和服務供應商完善搭配的運作機制,為Android平臺的快速發(fā)展提供了堅實的基礎。</p><p> 由于Android構建在開源代碼的框架之上,并且提供了強大的SDK庫和開放的理念,所以它為廣大的沒有任何移動應用程序開發(fā)經(jīng)驗的新手開辟了一條開發(fā)完美移動應用程序的康莊大道。而富有經(jīng)驗的移動開發(fā)人員現(xiàn)在也可以方便地擴展到Android平臺上來,利用它獨特的功能來改進現(xiàn)有產(chǎn)品或者
14、開發(fā)其他新穎產(chǎn)品。</p><p><b> 1.2 課題意義</b></p><p> Android軟件在一兩年的時間內(nèi)已經(jīng)迅速發(fā)展,在各類型應用系統(tǒng)中都有令用戶滿意的成果,本課題研究的就是基于此背景下Android手機的一款益智拼圖游戲。通過該游戲的設計,將自己學到的Java,Android方面的理論知識應用于實踐,提高自己的動手能力。在設計的過程中,不斷的
15、修補知識方面的漏洞,加深自己對程序設計的理解,為將來從事軟件開發(fā)事業(yè)打下基礎。</p><p> 2 Android架構與開發(fā)平臺搭建</p><p> 2.1 Android的系統(tǒng)架構</p><p> Android的系統(tǒng)架構和其操作系統(tǒng)一樣,采用了分層的架構。從圖2.1中可以看出,Android分為四個層,從高層到低層分別是應用程序?qū)?、應用程序框架層、?/p>
16、統(tǒng)運行庫層和Linux核心層。</p><p> 圖2.1 Android系統(tǒng)架構圖</p><p><b> 應用程序</b></p><p> Android會同一系列核心應用程序包一起發(fā)布,該應用程序包包括Email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應用程序都是使用JAVA語言編寫的。</p
17、><p><b> 應用程序框架</b></p><p> 開發(fā)人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發(fā)布它的功能塊并且任何其它的應用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。</p><p>
18、隱藏在每個應用后面的是一系列的服務和系統(tǒng), 其中包括;</p><p> 豐富而又可擴展的視圖(Views):可以用來構建應用程序,它包括列表(lists),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons),甚至可嵌入的web瀏覽器。</p><p> 內(nèi)容提供器(Content Providers):使得應用程序可以訪問另一個應用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫)
19、,或者共享它們自己的數(shù)據(jù)。</p><p> 資源管理器(Resource Manager):提供非代碼資源的訪問,如本地字符串,圖形,和布局文件(layout files)。</p><p> 通知管理器(Notification Manager):使得應用程序可以在狀態(tài)欄中顯示自定義的提示信息。</p><p> 活動管理器(Activity Manage
20、r):用來管理應用程序生命周期并提供常用的導航回退功能。</p><p><b> (3) 系統(tǒng)運行庫</b></p><p><b> 1) 程序庫</b></p><p> Android包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過 Android應用程序框架為開發(fā)者提供服務。以下
21、是一些核心庫:</p><p> 系統(tǒng)C庫:一個從BSD繼承來的標準C系統(tǒng)函數(shù)庫(libc), 它是專門為基于embedded linux的設備定制的。</p><p> 媒體庫:基于PacketVideo OpenCORE,該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態(tài)圖像文件。編碼格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。</p>
22、<p> Surface Manager:對顯示子系統(tǒng)的管理,并且為多個應用程序提供了2D和3D圖層的無縫融合。</p><p> LibWebCore:一個最新web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。</p><p> SGL:底層的2D圖形引擎。</p><p> 3D libraries:基于OpenGL E
23、S 1.0 APIs實現(xiàn);該庫可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。</p><p> FreeType:位圖(bitmap)和矢量(vector)字體顯示。</p><p> SQLite:一個對于所有應用程序可用,功能強勁的輕型關系型數(shù)據(jù)庫引擎。</p><p> 2) Android 運行庫</p><p>
24、; Android包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。</p><p> 每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬 機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統(tǒng)。Dalvik虛擬機執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對小內(nèi)存使用做了優(yōu)化。同時虛擬機是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯
25、,然后通過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)服務依賴于Linux 2.6內(nèi)核,如安全性,內(nèi)存管理,進程管理,網(wǎng)絡協(xié)議棧和驅(qū)動模型。Lin
26、ux內(nèi)核也同時作為硬件和軟件棧之間的抽象層。</p><p> 2.2 Window下Android開發(fā)環(huán)境的搭建</p><p> 為了在PC主機上得到Android的開發(fā)環(huán)境,我們選擇在Windows操作系統(tǒng)中進行對Android開發(fā)環(huán)境的搭建,具體步驟如下:</p><p><b> ?。?)JDK安裝</b></p>
27、<p> 首先下載JDK,按照提示安裝成功后,最重要的是進行環(huán)境變量的配置,步驟如下:我的電腦->屬性->高級->環(huán)境變量->系統(tǒng)變量中添加以下環(huán)境變量:</p><p> Java_HOME值為:C:\Program Files\Java\jdk1.6.0_20(安裝JDK的目錄)</p><p> CLASSPATH值為:.;%Java_HOME%lib\tools.j
28、ar;%Java_HOME%\lib\dt. jar;%Java _HOME%\bin;</p><p> Path值:添加C:\Program Files\Java\jdk1.6.0_20\bin;</p><p> (2)Eclipse安裝可下載一個綠色版的Eclipse,無需安裝,和安裝版一樣都能為Android開發(fā)提供功能。</p><p> (3)A
29、ndroid SDK安裝在Android Developers下載Android-sdk_r07-windows.zip,下載完成后解壓到任意路徑。</p><p> 運行SDK Manager.exe,出現(xiàn)如圖以下界面,點擊Available Package。選擇希望安裝的SDK及其文檔或者其它包,點擊Installation Selected、Accept All、Install Accepted,開始下載
30、安裝所選包。</p><p> 下載完成后出現(xiàn)如下圖的所有Android-sdk_r07-windows文件夾內(nèi)容;</p><p><b> ?。?)ADT安裝</b></p><p> ADT實際上是一個工具,它可以連接sdk和Eclipse,幫助Eclipse找到sdk打開Eclipse界面,進入進入菜單中的“Help”-> “Ins
31、tall New Software”,點擊Add按鈕彈出對話框要求輸入Name和Location,完成之后,選擇Window >Preferences;在左邊的面板選擇Android,然后在右側(cè)點擊Browse;并選中SDK路徑,本機為;D:\YJSH\Android\Android-sdk_r07-windows;點擊Apply、OK。配置完成。</p><p><b> ?。?)創(chuàng)建AVD</
32、b></p><p> 為使Android應用程序可以在模擬器上運行,必須創(chuàng)建AVD,步驟如下:</p><p> 在Eclipse中,選擇Windows > Android SDK and AVD Manager,點擊左側(cè)面板的Virtual Devices,再右側(cè)點擊New,填入Name,選擇Target的API,SD Card大小任意,Skin隨便選,Hardwar
33、e目前保持默認值,點擊CreateAVD即可完成創(chuàng)建AVD。</p><p> 3 流程介紹與概要設計</p><p> 3.1 游戲流程介紹</p><p> 根據(jù)拼圖游戲的游戲規(guī)則,本設計擬出游戲的大致流程如圖3.1所示:</p><p> 圖3.1 拼圖游戲流程圖</p><p> 3.2 系統(tǒng)概要設計
34、</p><p> 本設計參考了拼圖游戲流程圖(圖3.1)按照自頂向下的設計方式將拼圖游戲分為以下模塊進行設計,如圖3.2所示:</p><p> 圖3.2 拼圖游戲模塊</p><p> 3.2.1 界面布局模塊</p><p> 由于本課題的題材是一款游戲,對于游戲的界面以及一些基本控件有必要介紹一下。本系統(tǒng)一共有兩個界面:一個選
35、擇界面,一個游戲界面,基本的控件有文本框,下拉列表,網(wǎng)格視圖,按鈕,圖片視圖等。下面簡單介紹下它們的作用:</p><p> 文本框主要是用來顯示一些文本,這些文本基本是描述文本框所在位置的功能。</p><p> 下拉列表主要用在了難度選擇部分,當玩家點擊難度時,會出現(xiàn)下拉列表。</p><p> 網(wǎng)格視圖主要用于圖片選擇部分,利用網(wǎng)格視圖將圖片一一列出,供
36、玩家選擇圖片進行游戲。</p><p> 按鈕是兩個界面的鏈接樞紐,在第一個選擇界面按下確定按鈕,會跳轉(zhuǎn)到游戲界面。在游戲界面也設置了一個按鈕,主要是給玩家提供“重新游戲”的機會。</p><p> 圖片視圖只要用來顯示圖片,在游戲界面用圖片視圖顯示圖片,供玩家游戲。</p><p> 3.2.2 難度選擇模塊</p><p> 拼圖
37、游戲的難度在于圖片被分割后的塊數(shù),數(shù)量越多,自然難度就越大。</p><p> ?。?)難度最小的是將其設置為3*3 </p><p> 當難度設置為3*3時,系統(tǒng)將圖片分割為3行3列,也就是將圖片分成了9塊。</p><p> (2)難度最大的是將其設置為4*4</p><p> 當難度設置為4*4時,系統(tǒng)將圖片分割成4行4列,也就是
38、將圖片分成了16塊。</p><p> (3)難度中等的設置有兩種:3*4 和4*3 </p><p> 當難度設置為3*4時,系統(tǒng)將圖片分割成3行4列,即分成了12塊。</p><p> 當難度設置為4*4時,系統(tǒng)將圖片分割成4行3列,同樣分成了12塊。</p><p> 3.2.3 圖片選擇模塊</p><p&
39、gt; 圖片選擇步驟相當簡單,只要在選擇界面的圖片選擇區(qū)域,從9張圖片中鼠標單擊1張玩家感興趣的圖片即可。</p><p> 3.2.4 步數(shù)和時間模塊</p><p> 拼圖游戲過程中,為了增加趣味性,玩家每移動一次圖塊,步數(shù)加一,知道游戲全部位置正確,游戲結束,統(tǒng)計最后步數(shù);從游戲開始,時間模塊開始計時,直到游戲結束,時間停止,并顯示玩家完成游戲所花的時間。</p>
40、<p> 3.2.5 游戲?qū)崿F(xiàn)模塊</p><p> 在完成上述的圖片選擇,難度選擇后就可以開始正式的拼圖游戲。</p><p> 玩家選擇“play”后,圖片會根據(jù)玩家選擇的難度隨機分解圖片。在本設計中,原圖分割后右下角設置為空白塊,為圖塊的移動提供可能。玩家用鼠標點擊與空白塊相鄰的圖塊,并將選中的圖片往空白塊拖動,這樣就完成了空白塊與選中圖片的位置的互換。這樣子循環(huán)往
41、復,知道全部圖塊位置正確,游戲就結束了。</p><p> 4 系統(tǒng)詳細設計與實現(xiàn)</p><p> 4.1 界面布局實現(xiàn)</p><p> 本設計有兩個界面:選擇界面和游戲界面。界面的設計主要運用Android的繪圖技術,圖形的繪制通常是在View類中完成的,同時也會用到各種控件,如:TextView,Button,Spinner,GridView,Imag
42、eView。當然說到控件,容器就不得不提了,兩者是息息相關的。本設計中用到了最常用的LinearLayout容器,控件的布局也用到了相對布局,絕對布局等。</p><p> 4.1.1 選擇界面布局</p><p> 選擇界面在main.xml文件中布局,界面效果如圖4.1.1 :</p><p> 圖4.1.1 選擇界面</p><p&g
43、t; 該界面采用LinearLayout布局,在LinearLayout標簽中完成界面設置。</p><p> 布局設置:設置布局排列方式為豎直排列,寬和高的值為填滿,背景顏色為黑色。代碼如下:</p><p> android:orientation="vertical" </p><p> android:layout_width=
44、"fill_parent"</p><p> android:layout_height="fill_parent"</p><p> 下面給出構成該界面的一些基本控件的設置代碼:</p><p> 設置文本框的高和寬根據(jù)內(nèi)容調(diào)整,文本內(nèi)容從values文件夾中的strings.xml文件中讀取,內(nèi)容為“等級”:<
45、/p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_content"</p><p> android:text="@string/level"</p><p> sty
46、le="@style/font_20_white_bold"/</p><p> 設置下拉列表的高和寬根據(jù)內(nèi)容調(diào)整:</p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_content"&l
47、t;/p><p> 設置文本框高根據(jù)內(nèi)容調(diào)整,寬為填滿,文本內(nèi)容取自values文件夾下strings.xml文件,內(nèi)容為選擇圖片區(qū):</p><p> android:layout_width="fill_parent"</p><p> android:layout_height="wrap_content"</p
48、><p> android:text="@string/selectPictureArea"</p><p> style="@style/font_20_white_bold"</p><p> android:background="@color/slateGray"</p><p
49、> 設置網(wǎng)格視圖寬和高為填滿: </p><p> android:layout_width="fill_parent" </p><p> android:layout_height="fill_parent"</p><p> 設置按鈕屬性,寬和高為根據(jù)內(nèi)容調(diào)整,按鈕內(nèi)容取自values文件夾的str
50、ings.xml文件,內(nèi)容為“確定”:</p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_content"</p><p> android:text="@string/confirm"&
51、lt;/p><p> style="@style/btn_font_17_black"</p><p> android:layout_gravity="center”</p><p> 4.1.2 游戲界面布局</p><p> 游戲界面在jigsaw.xml文件中布局,界面效果如圖4.1.2:</p
52、><p> 圖4.1.2 游戲界面</p><p> 該界面同樣采用LinearLayout布局,在LinearLayout標簽中進行基本設置。</p><p> 布局設置:高和寬為填滿,排列方式為豎直排列,背景顏色為黑色。代碼如下:</p><p> android:layout_width="fill_parent"
53、;</p><p> android:layout_height="fill_parent"</p><p> android:orientation="vertical"</p><p> android:background="@color/black"</p><p>
54、 下面給出游戲界面其他控件的設置內(nèi)容和相關代碼:</p><p> 設置文本框的高和寬根據(jù)內(nèi)容調(diào)整,文本框的內(nèi)容取自strings.xml,內(nèi)容為“預覽”,位置居中:</p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_
55、content"</p><p> android:text="@string/preview"</p><p> style="@style/font_20_white_bold"</p><p> android:layout_gravity="center"</p>&l
56、t;p> 設置圖片框高和寬根據(jù)內(nèi)容調(diào)整,圖片取自drawable文件下的pingtu_6 : </p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_content"</p><p> android
57、:src="@drawable/pingtu_6"</p><p> 設置文本框高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自strings.xml中的level2,內(nèi)容為“等級”:</p><p> android:layout_width="wrap_content"</p><p> android:layout_height
58、="wrap_content"</p><p> android:text="@string/level2"</p><p> style="@style/font_20_white_bold"</p><p> 設置文本框高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自strings.xml中的stepNum,內(nèi)
59、容為“步數(shù)”:</p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_content"</p><p> android:text="@string/stepNum"</p>&
60、lt;p> style="@style/font_20_white_bold"</p><p> 設置文本框高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自strings.xml中的time,內(nèi)容為“時間”: </p><p> android:layout_width="wrap_content"</p><p> an
61、droid:layout_height="wrap_content"</p><p> android:text="@string/time"</p><p> style="@style/font_20_white_bold"</p><p> 設置按鈕高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自string
62、s.xml中的play,內(nèi)容為“play”</p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_content"</p><p> android:text="@string/play"&l
63、t;/p><p> android:textSize="14dip"</p><p> 4.2 游戲功能實現(xiàn)</p><p> 游戲代碼具體運行流程是這樣的:游戲啟動后,啟動MainActivity,接著加載main.xml初始化選擇界面,在完成難度選擇和圖片選擇后,點擊“確定”按鈕,運行MainActivity類中的監(jiān)聽器btnOnClick
64、Listener跳轉(zhuǎn)在JigsawActivity,并加載jigsaw.xml文件初始化游戲界面,然后根據(jù)界面上的內(nèi)容進行游戲。</p><p> 整個設計過程中主要完成以下功能:難度選擇,圖片選擇,步數(shù)和計時功能,拼圖功能。</p><p> 4.2.1 難度選擇</p><p> 在選擇界面點擊“等級”后的下拉列表,跳出下拉列表框,供玩家選擇難度,在 Ma
65、inActivity中導入MainImpl類和IMain類用于實現(xiàn)難度選擇。MainImpl類中定義了 getLevelAdapter方法,使用List()將四種難度等級存入列表,以供選擇。</p><p> getLevelAdapter方法的代碼如下:</p><p> public ArrayAdapter<String> getLevelAdapter(Contex
66、t context) {</p><p> List<String> list=new ArrayList<String>();</p><p> String[] level=context.getResources().getStringArray(R.array.levelArray);</p><p> for(String s
67、tr:level){</p><p> list.add(str);</p><p><b> }</b></p><p> ArrayAdapter<String> cityArrayAdapter=new ArrayAdapter<String>(context,android.R.layout.simple_
68、spinner_item,list);</p><p> cityArrayAdapter.setDropDownViewResource(android.R.layout.simple_</p><p> spinner_dropdown_item);</p><p> return cityArrayAdapter;</p><p>
69、;<b> }</b></p><p> 在MainActivity中給難度選擇定義兩個監(jiān)聽器ItemClickListener,玩家單擊下拉列表,就會啟動ItemClickListener,玩家點擊四個難度中的一種后又會啟動另一個監(jiān)聽器 ItemSelectedListener。玩家選擇完,選擇的難度將會傳回Activity。</p><p> 監(jiān)聽器的簡單代
70、碼如下: </p><p> private class ItemSelectedListener implements OnItemSelectedListener{</p><p> public void onItemSelected(AdapterView<?> adapterView, View view, int position,</p><
71、;p> long rowid) {</p><p> pictureIndex=position;</p><p><b> }</b></p><p> public void onNothingSelected(AdapterView<?> arg0) {</p><p><b>
72、 }</b></p><p><b> }</b></p><p> 4.2.2 圖片選擇</p><p> 選擇界面會列舉出9種圖片供玩家選擇。圖片列舉功能是由MainActivity中的 showGridView方法和getAllItemsForListView方法完成的。showGridView方法獲取屏幕大小,根據(jù)s
73、creenWidt和screenHeight自動調(diào)整圖片大小,保證界面的美觀。而getAllItemsForListView方法生成動態(tài)數(shù)組imageItem,并且傳入數(shù)據(jù),將圖片一一列舉出來。玩家點擊一張圖片并按下“確定”按鈕時,將選擇的圖片同時傳遞給JigsawActivity。代碼如下:</p><p> private void showGridView(){</p><p>
74、 DisplayMetrics dm = new DisplayMetrics();</p><p> dm = this.getApplicationContext().getResources().getDisplayMetrics();</p><p> pictureGridView.setColumnWidth((screenWidth-10*4)/3);</p>
75、<p> SimpleAdapter saImageItems = new SimpleAdapter(this, getAllItemsForListView(),R.layout.grid_item,</p><p> new String[] { "ImageView"},</p><p> new int[] { R.id.gridItem
76、_imgView});</p><p> pictureGridView.setAdapter(saImageItems);</p><p> pictureGridView.setSelector(R.drawable.menuitemshape);</p><p><b> }</b></p><p> 列出
77、9張圖片,并選擇一張圖片進行游戲是在getAllItemsForListView()方法中實現(xiàn)的,在該方法中生成了動態(tài)數(shù)組imageItem,將各個圖片的序號傳入了數(shù)組中。</p><p> public List<Map<String, Object>> getAllItemsForListView() {</p><p> List<Map<St
78、ring, Object>> imageItem = new ArrayList<Map<String, Object>>();</p><p> for (int i=0;i<pictureArray.length;i++) {</p><p> HashMap<String, Object> tempMap = new Hash
79、Map<String, Object>();</p><p> tempMap.put("ImageView",pictureArray[i]);// </p><p> imageItem.add(tempMap);</p><p><b> }</b></p><p> re
80、turn imageItem;</p><p><b> }</b></p><p> 4.2.3 步數(shù)和時間設置</p><p> 在JigsawActivity的initControls分別給stepNumTV和timeTV做出定義。玩家點擊界面上的“play”按鈕,啟動onClick方法,該方法開始給步數(shù)和時間賦初值。關于時間設置,
81、還給出了時間的分秒設置。這是在timeParser方法中實現(xiàn)的,每過60秒,分鐘加1。游戲過程中圖片移動一次,步數(shù)加1。具體實現(xiàn)如下:</p><p> 在游戲過程中,秒數(shù)一直在加一,這一實現(xiàn)體現(xiàn)在GameRunable 類中的run方法中。當然在秒數(shù)加1之前要先判斷是否為游戲狀態(tài),代碼為:</p><p> public void run() {</p><p&g
82、t; while(isGaming){ </p><p><b> try {</b></p><p> second++; </p><p> Message msg=new Message();</p><p> msg.what=TIME_MESSAGE;</p
83、><p> mHandler.sendMessage(msg);</p><p> Thread.sleep(1000); //</p><p> } catch (InterruptedException e) {</p><p> e.printStackTrace();</p><p><b>
84、 }</b></p><p><b> }</b></p><p> 步數(shù)和時間的運行都是handleMessage方法中實現(xiàn),在該方法中通過switch—case語句實現(xiàn)判斷。</p><p> public void handleMessage(android.os.Message msg){</p>&l
85、t;p> switch(msg.what){</p><p> case TIME_MESSAGE:</p><p><b> break;</b></p><p> case INIT_MESSAGE:</p><p><b> break;</b></p><
86、p><b> }</b></p><p> super.handleMessage(msg);</p><p><b> }</b></p><p> 4.2.4 拼圖的實現(xiàn)</p><p> 在JigsawActivity中進行游戲時首先要解決的問題就是圖片的隨機分割問題。該問題的
87、解決方案在JigsawView類中,JigsawActivity只是導入了該類。在該類中定義了相當多的變量,具體如下:</p><p> private Bitmap[] oBitamp;//初始化切割后的圖片輸數(shù)組</p><p> private int row=2;//行</p><p> private int col=2;//列</p>
88、<p> private int cutBitmapWidht;//切割后每張位圖的寬</p><p> private int cutBitmapHeight;//切割后每張位圖的高</p><p> private float x,y;//當然觸發(fā)的X,Y坐標</p><p> private int offsetW,offsetH;//偏移
89、量寬度\高度</p><p> private int maxRectW,maxRectH;//最大矩形寬,高</p><p> private PointF downPoint=new PointF();//觸發(fā)的坐標點</p><p> private PointF currPoint=new PointF();//當前坐標點</p><
90、;p> private int step=0;//步數(shù)</p><p> private boolean isGameing=false;//是否游戲中</p><p> 該問題的解決涉及到隨機和分割兩個算法。關于隨機的問題,算法中使用了randomGenerated 方法,該方法隨機生成0-n范圍內(nèi)不重復的數(shù)字,不包含n。在Math類中有定義的random方法,因此只需要調(diào)用
91、以下。代碼如下:</p><p> private void randomGenerated(int n){</p><p> Vector<Integer> vector=new Vector<Integer>();</p><p> int[] num=new int[n];</p><p> for(i
92、nt 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)){</p><p> radom = (
93、int)(Math.random()*n);</p><p><b> }</b></p><p> vector.add(radom);</p><p> num[i]=radom;</p><p><b> }</b></p><p> for(int i=0;
94、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><p> pictrueArray[j][i]=pictu
95、re;</p><p> System.out.println(pictrueArray[j][i].value);</p><p><b> }</b></p><p><b> }</b></p><p> cutBitmap(mBitmap);</p><p>
96、<b> }</b></p><p> 分割圖片是通過cutBitmap方法實現(xiàn)的,定義了cutBitmaoWidth,cutBitmapHeight變量表示分割后圖片的寬和高,并根據(jù)難度選擇的行數(shù)和列數(shù)初始化分割后的圖片數(shù)數(shù)組。具體代碼如下:</p><p> private void cutBitmap(Bitmap srcBitamp){</p>
97、;<p> cutBitmapWidht=srcBitamp.getWidth()/row; //分割后每張位圖的寬。</p><p> cutBitmapHeight=srcBitamp.getHeight()/col; //分割后每張位圖的高。</p><p> offsetW=cutBitmapWidht; //偏
98、移量寬度。</p><p> offsetH=cutBitmapHeight; //偏移量高度。</p><p> oBitamp=new Bitmap[row*col]; //初始化切割后的圖片數(shù)數(shù)組。</p><p> for(int i=0;i<col;i++){</p><
99、p> for(int j=0;j<row;j++){</p><p> oBitamp[i*row+j]=Bitmap.createBitmap(srcBitamp, cutBitmapWidht*j, cutBitmapHeight*i, cutBitmapWidht, cutBitmapHeight);</p><p><b> }</b><
100、;/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))&&(j==(row-1))){</p><p>
101、; pictrueArray[j][i].bitamp=null; </p><p><b> }else{</b></p><p> pictrueArray[j][i].bitamp=oBitamp[pictrueArray[j][i].value];</p><p><b> }</b></p>
102、;<p><b> }</b></p><p><b> }</b></p><p> 用randomGenerated 方法解決了圖片隨機分割的問題之后,接著就是游戲的運行即交換圖片功能的實現(xiàn)。首先確保鼠標點擊并拖動圖片有效,然后實現(xiàn)圖片的交換。為確保鼠標點擊和拖動有效,定義onTouchEvent方法進行活動的判斷,該方法
103、中定義了x,y兩個變量表示坐標,來顯示鼠標點擊的位置。</p><p> onTouchEvent方法中定義了如下兩個變量:</p><p> x=event.getX();</p><p> y=event.getY();</p><p> 通過如下語句實現(xiàn)判斷鼠標的活動:按下(MotionEvent.ACTION_DOWN),離開
104、(MotionEvent.ACTION_UP),移動(MotionEvent.ACTION_MOVE)。</p><p> if(!((x<=maxRectW)&&(y<=maxRectH))){</p><p> return false;</p><p><b> }</b></p><
105、p> switch(event.getAction()){</p><p> case MotionEvent.ACTION_DOWN:{ </p><p><b> }</b></p><p> case MotionEvent.ACTION_UP:{ </p><p><b
106、> }</b></p><p> case MotionEvent.ACTION_MOVE:{ </p><p><b> }</b></p><p><b> }</b></p><p> return super.onTouchEvent(event);&l
107、t;/p><p><b> }</b></p><p> 交換圖片的動作由swapPicture方法實現(xiàn),交換代碼簡單如下: </p><p> int value;</p><p> value=picture1.value; </p><p> picture1.va
108、lue=picture2.value; </p><p> picture2.value=value; </p><p><b> 5 系統(tǒng)測試</b></p><p> 5.1 Android仿真器介紹</p><p> 仿真器是在計算機中運行的一個虛擬的移動裝置,用它來設計、調(diào)試
109、應用。</p><p> ADT是一個用于開發(fā)Android應用的eclipse插件,它方便了我們的開發(fā)。例如,它讓我們方便從eclipse內(nèi)部訪問DDMS工具(可用于截屏,管理port-forwarding,設斷點,查看線程和進程信息)</p><p> DDMS(Dalvik Debug Monitor Service)和Dalvik虛擬機集成,將在IDE和模擬器起到一個轉(zhuǎn)發(fā)服務。
110、用它能管理仿填器或者設備的進程,并且輔助調(diào)試。你可用它殺死進程,選擇某一進程去DEBUG,產(chǎn)生TRACE數(shù)據(jù),查看堆和線程信息等等。</p><p> Aapt(Andvoid Asset Packaging Tool),用于創(chuàng)建.apk文件。</p><p> Aidl(Andvoid Interface Description Language)用于產(chǎn)生代碼。</p>
111、<p> Sqlite3用于訪問SQLite數(shù)據(jù)文件。</p><p> Traceview用于查看LOG信息</p><p> Dx工具用于重寫.class字節(jié)碼到Andvoid字節(jié)碼。</p><p> ActivityCreator用于產(chǎn)生ant文件的腳本。當然,若用eclipse插件就不需要它了。</p><p>
112、 5.2 功能模塊測試</p><p> 在虛擬器上完成一次拼圖游戲,即可測試出本設計是否已經(jīng)完成。下面給出各個功能模塊的測試過程,若這些功能在模擬器上都能得到體現(xiàn),則說明本設計基本成功。</p><p> 1) 難度選擇模塊:</p><p> 在選擇界面點擊“等級”下拉框,選擇一個難度,按下“確定”按鈕后跳轉(zhuǎn)到游戲界面,在游戲界面的文本框“等級”下顯示
113、出玩家選擇的難度。</p><p><b> 界面如下:</b></p><p> 圖5.2.1 難度選擇模塊</p><p> 2) 圖片選擇模塊:</p><p> 在選擇界面點擊一張圖片,按下“確定”按鈕后跳轉(zhuǎn)到游戲界面,在游戲界面的圖片框中顯示玩家選擇的圖片。</p><p>&l
114、t;b> 界面如下:</b></p><p> 圖5.2.2 圖片選擇模塊</p><p> 3) 步數(shù)和時間設置模塊:</p><p> 在游戲界面,點擊“play”按鈕后,時間開始自加1秒,每移動一個圖塊,步數(shù)一欄加1 。</p><p><b> 界面如下:</b></p>
115、<p> 圖5.2.3 步數(shù)和時間設置模塊</p><p> 4) 游戲?qū)崿F(xiàn)模塊:</p><p> 在游戲界面,點“play”按鈕后,鼠標點擊圖塊并拖動,能與空白圖塊交換位置。當圖片拼成原樣時,彈出窗口提示游戲結束。</p><p><b> 界面如下:</b></p><p> 圖5.2.4 游
116、戲?qū)崿F(xiàn)模塊</p><p> 5.3 出現(xiàn)的錯誤及解決方案</p><p> 完成系統(tǒng)的過程中不可避免的出現(xiàn)了一些問題,通過自我學習和他人指導,最終解決了這些問題。具體錯誤和解決方案如下表5.1:</p><p> 表5.1 錯誤及解決方案對照表</p><p><b> 6 總結與展望</b></p&g
117、t;<p> 大學四年學習的編程思想和編程技巧,在最后的畢業(yè)設計當中得到了運用。經(jīng)過此次畢業(yè)設計,充分認識到了自己編程能力方面的缺陷,感覺到自己的基礎比較薄弱。但在這段時間里,我不斷地發(fā)現(xiàn)自己的問題,并且找出問題產(chǎn)生的原因,根據(jù)相關的方法解決問題。幾個月的努力沒有白費,終于基本上完成拼圖游戲的功能,雖然還有不少不足,我將不斷的完善它。</p><p> 做一個完整的系統(tǒng)之前,必須先對該系統(tǒng)進行需
118、求分析,擬好系統(tǒng)需要達到的功能和系統(tǒng)的所有需求,并且畫出系統(tǒng)的大體設計流程圖和框架。做完這些準備工作,做系統(tǒng)的時候才會得心應手。想到那里就做到那里,不僅效率不高,還會影響到系統(tǒng)的可用性。</p><p> 完成系統(tǒng)之后才發(fā)現(xiàn),對于軟件設計,要想做到得心應手,必須多多練習。只有寫夠足夠多的代碼,才能真正理解軟件設計的思想及運用。當然要做到這一步,要付出相當多的努力,在沒有做到之前,遇到不懂的地方就要多參考資料,請
119、教別人。</p><p><b> 參考文獻</b></p><p> [1] (美)Eric J.Baucle.軟件設計——從程序設計到體系結構[M].李仁發(fā)等譯.北京: 電子工業(yè)出版社,2007.</p><p> [2] 孔令德.畢業(yè)設計案例教程——從系統(tǒng)開發(fā)到論文寫作[M].北京:國防工業(yè)出版社,2007.</p>
120、<p> [3] (美)威爾頓,麥可匹克.JavaScript入門經(jīng)典(第3版)[M].北京 施宏斌譯.北京:清華大學出版社,2009.</p><p> [4] E2ECloud工作室.深入淺出Google Android[M].北京:人民郵電出社,2009.08.</p><p> [5] 余志龍等.Android SDK開發(fā)范例大全[M].北京:人民郵電出版
121、社.2009.</p><p> [6] 姚尚朗,靳巖.Google Android開發(fā)入門與實踐 [M].北京:人民郵電出版社,2009.</p><p> [7] 余志龍等.Google Android SDK開發(fā)范例大全(第二版)[M].北京:人民郵電出版社,2010.</p><p> [8] 李船戊.智能手機原理與未來發(fā)展[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于Java的拼圖游戲畢業(yè)論文.docx
- 拼圖游戲-拼圖游戲總結.doc
- 畢業(yè)論文--基于安卓系統(tǒng)的拼圖游戲設計
- 拼圖游戲
- 兒童益智積木拼圖游戲玩具設計研究與開發(fā).pdf
- 拼圖游戲
- 計算機應用技術畢業(yè)論文(設計)--拼圖游戲
- 拼圖游戲 .zip
- 拼圖游戲.docx
- 拼圖游戲-需求設計.docx
- 拼圖游戲3
- 拼圖游戲2
- -拼圖游戲總結.doc
- 拼圖游戲開題報告
- 基于java的拼圖游戲設計
- vb課程設計拼圖游戲
- 本科畢業(yè)論文基于安卓系統(tǒng)的拼圖游戲的設計與開發(fā)
- 拼圖游戲-20170626.docx
- 拼圖游戲-20170627.docx
- 拼圖游戲-項目總結.doc
評論
0/150
提交評論