版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 畢 業(yè) 論 文</b></p><p> 設(shè)計(jì)(論文)題目: 基于Android 益智拼圖游戲設(shè)計(jì) </p><p> 學(xué)生姓名: 指導(dǎo)教師: 講師 </p><p> 二級(jí)學(xué)院: 信息技術(shù)學(xué)院 ?! I(yè): 計(jì)算機(jī)科學(xué)與
2、技術(shù) </p><p> 班 級(jí):08計(jì)算機(jī)科學(xué)與技術(shù)(2) 學(xué) 號(hào): </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架構(gòu)與開發(fā)平臺(tái)搭建2</p><p> 2.1 Android的系統(tǒng)架構(gòu)2</p><p> 2.2 Window下Android開發(fā)環(huán)境的搭建
4、4</p><p> 3 流程介紹與概要設(shè)計(jì)5</p><p> 3.1 游戲流程介紹5</p><p> 3.2 系統(tǒng)概要設(shè)計(jì)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ù)和時(shí)間模塊7</p><p> 3.2.5 游戲?qū)崿F(xiàn)模塊7</p><p> 4 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)8</p><p> 4.1 界面布局實(shí)現(xiàn)8</p><p> 4.1.1 選擇界面布局8</p><p> 4.1.2 游戲界面布局9&
6、lt;/p><p> 4.2 游戲功能實(shí)現(xiàn)11</p><p> 4.2.1 難度選擇11</p><p> 4.2.2 圖片選擇12</p><p> 4.2.3 步數(shù)和時(shí)間設(shè)置13</p><p> 4.2.4 拼圖的實(shí)現(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)的錯(cuò)誤及解決方案20</p><p> 6 總結(jié)與展望21</p><p><b> 參考文獻(xiàn)22</b><
8、;/p><p><b> 附 錄23</b></p><p><b> 致 謝33</b></p><p> 基于Android益智拼圖游戲設(shè)計(jì)</p><p><b> 摘 要</b></p><p> 隨著移動(dòng)設(shè)備的日益普及,使用Andro
9、id技術(shù)開發(fā)手機(jī)軟件受到越來越多人的青睞。在此背景下,本課題開發(fā)了一款A(yù)ndroid平臺(tái)下的手機(jī)游戲——益智拼圖。</p><p> 本文首先對(duì)Android的研究背景,系統(tǒng)架構(gòu)以及開發(fā)環(huán)境進(jìn)行介紹,然后就玩家對(duì)游戲的需求進(jìn)行一定的分析,最后運(yùn)用Android技術(shù)實(shí)現(xiàn)拼圖游戲的開發(fā),并合理布局游戲界面,使游戲界面更加美觀和人性化,實(shí)現(xiàn)了游戲的基本功能,最終可以讓玩家享受拼圖游戲的樂趣。</p>&
10、lt;p> 關(guān)鍵詞:Android;拼圖游戲;Activity;架構(gòu) </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> 隨著嵌入式技術(shù)的發(fā)展,手持終端設(shè)備也迅速發(fā)展起來,目前,全球手機(jī)用戶數(shù)已超過了PC機(jī)用戶數(shù),其中智能手機(jī)的比例越來越高。智能手機(jī)是指像電腦一樣可以通過下載、安裝軟件來拓展基本功能的手機(jī),一般具有智能手機(jī)操作系統(tǒng)。
12、相較于非智能手機(jī),它功能更強(qiáng),處理速度更快?;贚inux的Android手機(jī)操作系統(tǒng),由于具有開源、免費(fèi)的特性,迅速得到廣大愛好者及廠商的支持。目前,移動(dòng)應(yīng)用軟件中的手機(jī)游戲開發(fā)是一項(xiàng)非常熱門的技術(shù)。</p><p> Android系統(tǒng)對(duì)第三方軟件是開放的,這促進(jìn)了第三方軟件的發(fā)展。Android系統(tǒng)以Linux 2.6為核心,其安全機(jī)制比較完善,增強(qiáng)了手機(jī)使用的安全性。Android平臺(tái)已經(jīng)形成由 Goo
13、gle牽頭,OHA組織參與,系統(tǒng)支持商和服務(wù)供應(yīng)商完善搭配的運(yùn)作機(jī)制,為Android平臺(tái)的快速發(fā)展提供了堅(jiān)實(shí)的基礎(chǔ)。</p><p> 由于Android構(gòu)建在開源代碼的框架之上,并且提供了強(qiáng)大的SDK庫和開放的理念,所以它為廣大的沒有任何移動(dòng)應(yīng)用程序開發(fā)經(jīng)驗(yàn)的新手開辟了一條開發(fā)完美移動(dòng)應(yīng)用程序的康莊大道。而富有經(jīng)驗(yàn)的移動(dòng)開發(fā)人員現(xiàn)在也可以方便地?cái)U(kuò)展到Android平臺(tái)上來,利用它獨(dú)特的功能來改進(jìn)現(xiàn)有產(chǎn)品或者
14、開發(fā)其他新穎產(chǎn)品。</p><p><b> 1.2 課題意義</b></p><p> Android軟件在一兩年的時(shí)間內(nèi)已經(jīng)迅速發(fā)展,在各類型應(yīng)用系統(tǒng)中都有令用戶滿意的成果,本課題研究的就是基于此背景下Android手機(jī)的一款益智拼圖游戲。通過該游戲的設(shè)計(jì),將自己學(xué)到的Java,Android方面的理論知識(shí)應(yīng)用于實(shí)踐,提高自己的動(dòng)手能力。在設(shè)計(jì)的過程中,不斷的
15、修補(bǔ)知識(shí)方面的漏洞,加深自己對(duì)程序設(shè)計(jì)的理解,為將來從事軟件開發(fā)事業(yè)打下基礎(chǔ)。</p><p> 2 Android架構(gòu)與開發(fā)平臺(tái)搭建</p><p> 2.1 Android的系統(tǒng)架構(gòu)</p><p> Android的系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。從圖2.1中可以看出,Android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系
16、統(tǒng)運(yùn)行庫層和Linux核心層。</p><p> 圖2.1 Android系統(tǒng)架構(gòu)圖</p><p><b> 應(yīng)用程序</b></p><p> Android會(huì)同一系列核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序包包括Email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應(yīng)用程序都是使用JAVA語言編寫的。</p
17、><p><b> 應(yīng)用程序框架</b></p><p> 開發(fā)人員也可以完全訪問核心應(yīng)用程序所使用的API框架。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡化了組件的重用;任何一個(gè)應(yīng)用程序都可以發(fā)布它的功能塊并且任何其它的應(yīng)用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。同樣,該應(yīng)用程序重用機(jī)制也使用戶可以方便的替換程序組件。</p><p>
18、隱藏在每個(gè)應(yīng)用后面的是一系列的服務(wù)和系統(tǒng), 其中包括;</p><p> 豐富而又可擴(kuò)展的視圖(Views):可以用來構(gòu)建應(yīng)用程序,它包括列表(lists),網(wǎng)格(grids),文本框(text boxes),按鈕(buttons),甚至可嵌入的web瀏覽器。</p><p> 內(nèi)容提供器(Content Providers):使得應(yīng)用程序可以訪問另一個(gè)應(yīng)用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫)
19、,或者共享它們自己的數(shù)據(jù)。</p><p> 資源管理器(Resource Manager):提供非代碼資源的訪問,如本地字符串,圖形,和布局文件(layout files)。</p><p> 通知管理器(Notification Manager):使得應(yīng)用程序可以在狀態(tài)欄中顯示自定義的提示信息。</p><p> 活動(dòng)管理器(Activity Manage
20、r):用來管理應(yīng)用程序生命周期并提供常用的導(dǎo)航回退功能。</p><p><b> (3) 系統(tǒng)運(yùn)行庫</b></p><p><b> 1) 程序庫</b></p><p> Android包含一些C/C++庫,這些庫能被Android系統(tǒng)中不同的組件使用。它們通過 Android應(yīng)用程序框架為開發(fā)者提供服務(wù)。以下
21、是一些核心庫:</p><p> 系統(tǒng)C庫:一個(gè)從BSD繼承來的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(libc), 它是專門為基于embedded linux的設(shè)備定制的。</p><p> 媒體庫:基于PacketVideo OpenCORE,該庫支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。編碼格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。</p>
22、<p> Surface Manager:對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提供了2D和3D圖層的無縫融合。</p><p> LibWebCore:一個(gè)最新web瀏覽器引擎用,支持Android瀏覽器和一個(gè)可嵌入的web視圖。</p><p> SGL:底層的2D圖形引擎。</p><p> 3D libraries:基于OpenGL E
23、S 1.0 APIs實(shí)現(xiàn);該庫可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。</p><p> FreeType:位圖(bitmap)和矢量(vector)字體顯示。</p><p> SQLite:一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫引擎。</p><p> 2) Android 運(yùn)行庫</p><p>
24、; Android包括了一個(gè)核心庫,該核心庫提供了JAVA編程語言核心庫的大多數(shù)功能。</p><p> 每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬 機(jī)實(shí)例。Dalvik被設(shè)計(jì)成一個(gè)設(shè)備可以同時(shí)高效地運(yùn)行多個(gè)虛擬系統(tǒng)。Dalvik虛擬機(jī)執(zhí)行(.dex)的Dalvik可執(zhí)行文件,該格式文件針對(duì)小內(nèi)存使用做了優(yōu)化。同時(shí)虛擬機(jī)是基于寄存器的,所有的類都經(jīng)由JAVA編譯器編譯
25、,然后通過SDK的"dx"工具轉(zhuǎn)化成.dex格式由虛擬機(jī)執(zhí)行。</p><p> Dalvik虛擬機(jī)依賴于Linux內(nèi)核的一些功能,比如線程機(jī)制和底層內(nèi)存管理機(jī)制。</p><p> (4) Linux內(nèi)核</p><p> Android的核心系統(tǒng)服務(wù)依賴于Linux 2.6內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。Lin
26、ux內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。</p><p> 2.2 Window下Android開發(fā)環(huán)境的搭建</p><p> 為了在PC主機(jī)上得到Android的開發(fā)環(huán)境,我們選擇在Windows操作系統(tǒng)中進(jìn)行對(duì)Android開發(fā)環(huán)境的搭建,具體步驟如下:</p><p><b> ?。?)JDK安裝</b></p>
27、<p> 首先下載JDK,按照提示安裝成功后,最重要的是進(jìn)行環(huán)境變量的配置,步驟如下:我的電腦->屬性->高級(jí)->環(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> ?。?)Eclipse安裝可下載一個(gè)綠色版的Eclipse,無需安裝,和安裝版一樣都能為Android開發(fā)提供功能。</p><p> ?。?)A
29、ndroid SDK安裝在Android Developers下載Android-sdk_r07-windows.zip,下載完成后解壓到任意路徑。</p><p> 運(yùn)行SDK Manager.exe,出現(xiàn)如圖以下界面,點(diǎn)擊Available Package。選擇希望安裝的SDK及其文檔或者其它包,點(diǎn)擊Installation Selected、Accept All、Install Accepted,開始下載
30、安裝所選包。</p><p> 下載完成后出現(xiàn)如下圖的所有Android-sdk_r07-windows文件夾內(nèi)容;</p><p><b> (4)ADT安裝</b></p><p> ADT實(shí)際上是一個(gè)工具,它可以連接sdk和Eclipse,幫助Eclipse找到sdk打開Eclipse界面,進(jìn)入進(jìn)入菜單中的“Help”-> “Ins
31、tall New Software”,點(diǎn)擊Add按鈕彈出對(duì)話框要求輸入Name和Location,完成之后,選擇Window >Preferences;在左邊的面板選擇Android,然后在右側(cè)點(diǎn)擊Browse;并選中SDK路徑,本機(jī)為;D:\YJSH\Android\Android-sdk_r07-windows;點(diǎn)擊Apply、OK。配置完成。</p><p><b> (5)創(chuàng)建AVD</
32、b></p><p> 為使Android應(yīng)用程序可以在模擬器上運(yùn)行,必須創(chuàng)建AVD,步驟如下:</p><p> 在Eclipse中,選擇Windows > Android SDK and AVD Manager,點(diǎn)擊左側(cè)面板的Virtual Devices,再右側(cè)點(diǎn)擊New,填入Name,選擇Target的API,SD Card大小任意,Skin隨便選,Hardwar
33、e目前保持默認(rèn)值,點(diǎn)擊CreateAVD即可完成創(chuàng)建AVD。</p><p> 3 流程介紹與概要設(shè)計(jì)</p><p> 3.1 游戲流程介紹</p><p> 根據(jù)拼圖游戲的游戲規(guī)則,本設(shè)計(jì)擬出游戲的大致流程如圖3.1所示:</p><p> 圖3.1 拼圖游戲流程圖</p><p> 3.2 系統(tǒng)概要設(shè)計(jì)
34、</p><p> 本設(shè)計(jì)參考了拼圖游戲流程圖(圖3.1)按照自頂向下的設(shè)計(jì)方式將拼圖游戲分為以下模塊進(jìn)行設(shè)計(jì),如圖3.2所示:</p><p> 圖3.2 拼圖游戲模塊</p><p> 3.2.1 界面布局模塊</p><p> 由于本課題的題材是一款游戲,對(duì)于游戲的界面以及一些基本控件有必要介紹一下。本系統(tǒng)一共有兩個(gè)界面:一個(gè)選
35、擇界面,一個(gè)游戲界面,基本的控件有文本框,下拉列表,網(wǎng)格視圖,按鈕,圖片視圖等。下面簡單介紹下它們的作用:</p><p> 文本框主要是用來顯示一些文本,這些文本基本是描述文本框所在位置的功能。</p><p> 下拉列表主要用在了難度選擇部分,當(dāng)玩家點(diǎn)擊難度時(shí),會(huì)出現(xiàn)下拉列表。</p><p> 網(wǎng)格視圖主要用于圖片選擇部分,利用網(wǎng)格視圖將圖片一一列出,供
36、玩家選擇圖片進(jìn)行游戲。</p><p> 按鈕是兩個(gè)界面的鏈接樞紐,在第一個(gè)選擇界面按下確定按鈕,會(huì)跳轉(zhuǎn)到游戲界面。在游戲界面也設(shè)置了一個(gè)按鈕,主要是給玩家提供“重新游戲”的機(jī)會(huì)。</p><p> 圖片視圖只要用來顯示圖片,在游戲界面用圖片視圖顯示圖片,供玩家游戲。</p><p> 3.2.2 難度選擇模塊</p><p> 拼圖
37、游戲的難度在于圖片被分割后的塊數(shù),數(shù)量越多,自然難度就越大。</p><p> ?。?)難度最小的是將其設(shè)置為3*3 </p><p> 當(dāng)難度設(shè)置為3*3時(shí),系統(tǒng)將圖片分割為3行3列,也就是將圖片分成了9塊。</p><p> (2)難度最大的是將其設(shè)置為4*4</p><p> 當(dāng)難度設(shè)置為4*4時(shí),系統(tǒng)將圖片分割成4行4列,也就是
38、將圖片分成了16塊。</p><p> ?。?)難度中等的設(shè)置有兩種:3*4 和4*3 </p><p> 當(dāng)難度設(shè)置為3*4時(shí),系統(tǒng)將圖片分割成3行4列,即分成了12塊。</p><p> 當(dāng)難度設(shè)置為4*4時(shí),系統(tǒng)將圖片分割成4行3列,同樣分成了12塊。</p><p> 3.2.3 圖片選擇模塊</p><p&
39、gt; 圖片選擇步驟相當(dāng)簡單,只要在選擇界面的圖片選擇區(qū)域,從9張圖片中鼠標(biāo)單擊1張玩家感興趣的圖片即可。</p><p> 3.2.4 步數(shù)和時(shí)間模塊</p><p> 拼圖游戲過程中,為了增加趣味性,玩家每移動(dòng)一次圖塊,步數(shù)加一,知道游戲全部位置正確,游戲結(jié)束,統(tǒng)計(jì)最后步數(shù);從游戲開始,時(shí)間模塊開始計(jì)時(shí),直到游戲結(jié)束,時(shí)間停止,并顯示玩家完成游戲所花的時(shí)間。</p>
40、<p> 3.2.5 游戲?qū)崿F(xiàn)模塊</p><p> 在完成上述的圖片選擇,難度選擇后就可以開始正式的拼圖游戲。</p><p> 玩家選擇“play”后,圖片會(huì)根據(jù)玩家選擇的難度隨機(jī)分解圖片。在本設(shè)計(jì)中,原圖分割后右下角設(shè)置為空白塊,為圖塊的移動(dòng)提供可能。玩家用鼠標(biāo)點(diǎn)擊與空白塊相鄰的圖塊,并將選中的圖片往空白塊拖動(dòng),這樣就完成了空白塊與選中圖片的位置的互換。這樣子循環(huán)往
41、復(fù),知道全部圖塊位置正確,游戲就結(jié)束了。</p><p> 4 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)</p><p> 4.1 界面布局實(shí)現(xiàn)</p><p> 本設(shè)計(jì)有兩個(gè)界面:選擇界面和游戲界面。界面的設(shè)計(jì)主要運(yùn)用Android的繪圖技術(shù),圖形的繪制通常是在View類中完成的,同時(shí)也會(huì)用到各種控件,如:TextView,Button,Spinner,GridView,Imag
42、eView。當(dāng)然說到控件,容器就不得不提了,兩者是息息相關(guān)的。本設(shè)計(jì)中用到了最常用的LinearLayout容器,控件的布局也用到了相對(duì)布局,絕對(duì)布局等。</p><p> 4.1.1 選擇界面布局</p><p> 選擇界面在main.xml文件中布局,界面效果如圖4.1.1 :</p><p> 圖4.1.1 選擇界面</p><p&g
43、t; 該界面采用LinearLayout布局,在LinearLayout標(biāo)簽中完成界面設(shè)置。</p><p> 布局設(shè)置:設(shè)置布局排列方式為豎直排列,寬和高的值為填滿,背景顏色為黑色。代碼如下:</p><p> android:orientation="vertical" </p><p> android:layout_width=
44、"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文件夾中的strings.xml文件中讀取,內(nèi)容為“等級(jí)”:<
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> 設(shè)置下拉列表的高和寬根據(jù)內(nèi)容調(diào)整:</p><p> android:layout_width="wrap_content"</p><p> android:layout_height="wrap_content"&l
47、t;/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_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、> 設(shè)置網(wǎng)格視圖寬和高為填滿: </p><p> android:layout_width="fill_parent" </p><p> android:layout_height="fill_parent"</p><p> 設(shè)置按鈕屬性,寬和高為根據(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標(biāo)簽中進(jìn)行基本設(shè)置。</p><p> 布局設(shè)置:高和寬為填滿,排列方式為豎直排列,背景顏色為黑色。代碼如下:</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、 下面給出游戲界面其他控件的設(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> 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> 設(shè)置圖片框高和寬根據(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> 設(shè)置文本框高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自strings.xml中的level2,內(nèi)容為“等級(jí)”:</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> 設(shè)置文本框高和寬根據(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> 設(shè)置文本框高和寬根據(jù)內(nèi)容調(diào)整,文本框內(nèi)容取自strings.xml中的time,內(nèi)容為“時(shí)間”: </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> 設(shè)置按鈕高和寬根據(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 游戲功能實(shí)現(xiàn)</p><p> 游戲代碼具體運(yùn)行流程是這樣的:游戲啟動(dòng)后,啟動(dòng)MainActivity,接著加載main.xml初始化選擇界面,在完成難度選擇和圖片選擇后,點(diǎn)擊“確定”按鈕,運(yùn)行MainActivity類中的監(jiān)聽器btnOnClick
64、Listener跳轉(zhuǎn)在JigsawActivity,并加載jigsaw.xml文件初始化游戲界面,然后根據(jù)界面上的內(nèi)容進(jìn)行游戲。</p><p> 整個(gè)設(shè)計(jì)過程中主要完成以下功能:難度選擇,圖片選擇,步數(shù)和計(jì)時(shí)功能,拼圖功能。</p><p> 4.2.1 難度選擇</p><p> 在選擇界面點(diǎn)擊“等級(jí)”后的下拉列表,跳出下拉列表框,供玩家選擇難度,在 Ma
65、inActivity中導(dǎo)入MainImpl類和IMain類用于實(shí)現(xiàn)難度選擇。MainImpl類中定義了 getLevelAdapter方法,使用List()將四種難度等級(jí)存入列表,以供選擇。</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中給難度選擇定義兩個(gè)監(jiān)聽器ItemClickListener,玩家單擊下拉列表,就會(huì)啟動(dòng)ItemClickListener,玩家點(diǎn)擊四個(gè)難度中的一種后又會(huì)啟動(dòng)另一個(gè)監(jiān)聽器 ItemSelectedListener。玩家選擇完,選擇的難度將會(huì)傳回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> 選擇界面會(huì)列舉出9種圖片供玩家選擇。圖片列舉功能是由MainActivity中的 showGridView方法和getAllItemsForListView方法完成的。showGridView方法獲取屏幕大小,根據(jù)s
73、creenWidt和screenHeight自動(dòng)調(diào)整圖片大小,保證界面的美觀。而getAllItemsForListView方法生成動(dòng)態(tài)數(shù)組imageItem,并且傳入數(shù)據(jù),將圖片一一列舉出來。玩家點(diǎn)擊一張圖片并按下“確定”按鈕時(shí),將選擇的圖片同時(shí)傳遞給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張圖片,并選擇一張圖片進(jìn)行游戲是在getAllItemsForListView()方法中實(shí)現(xiàn)的,在該方法中生成了動(dòng)態(tài)數(shù)組imageItem,將各個(gè)圖片的序號(hào)傳入了數(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ù)和時(shí)間設(shè)置</p><p> 在JigsawActivity的initControls分別給stepNumTV和timeTV做出定義。玩家點(diǎn)擊界面上的“play”按鈕,啟動(dòng)onClick方法,該方法開始給步數(shù)和時(shí)間賦初值。關(guān)于時(shí)間設(shè)置,
81、還給出了時(shí)間的分秒設(shè)置。這是在timeParser方法中實(shí)現(xiàn)的,每過60秒,分鐘加1。游戲過程中圖片移動(dòng)一次,步數(shù)加1。具體實(shí)現(xiàn)如下:</p><p> 在游戲過程中,秒數(shù)一直在加一,這一實(shí)現(xiàn)體現(xiàn)在GameRunable 類中的run方法中。當(dāng)然在秒數(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ù)和時(shí)間的運(yùn)行都是handleMessage方法中實(shí)現(xiàn),在該方法中通過switch—case語句實(shí)現(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 拼圖的實(shí)現(xiàn)</p><p> 在JigsawActivity中進(jìn)行游戲時(shí)首先要解決的問題就是圖片的隨機(jī)分割問題。該問題的
87、解決方案在JigsawView類中,JigsawActivity只是導(dǎo)入了該類。在該類中定義了相當(dāng)多的變量,具體如下:</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;//當(dāng)然觸發(fā)的X,Y坐標(biāo)</p><p> private int offsetW,offsetH;//偏移
89、量寬度\高度</p><p> private int maxRectW,maxRectH;//最大矩形寬,高</p><p> private PointF downPoint=new PointF();//觸發(fā)的坐標(biāo)點(diǎn)</p><p> private PointF currPoint=new PointF();//當(dāng)前坐標(biāo)點(diǎn)</p><
90、;p> private int step=0;//步數(shù)</p><p> private boolean isGameing=false;//是否游戲中</p><p> 該問題的解決涉及到隨機(jī)和分割兩個(gè)算法。關(guān)于隨機(jī)的問題,算法中使用了randomGenerated 方法,該方法隨機(jī)生成0-n范圍內(nèi)不重復(fù)的數(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方法實(shí)現(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 方法解決了圖片隨機(jī)分割的問題之后,接著就是游戲的運(yùn)行即交換圖片功能的實(shí)現(xiàn)。首先確保鼠標(biāo)點(diǎn)擊并拖動(dòng)圖片有效,然后實(shí)現(xiàn)圖片的交換。為確保鼠標(biāo)點(diǎn)擊和拖動(dòng)有效,定義onTouchEvent方法進(jìn)行活動(dòng)的判斷,該方法
103、中定義了x,y兩個(gè)變量表示坐標(biāo),來顯示鼠標(biāo)點(diǎn)擊的位置。</p><p> onTouchEvent方法中定義了如下兩個(gè)變量:</p><p> x=event.getX();</p><p> y=event.getY();</p><p> 通過如下語句實(shí)現(xiàn)判斷鼠標(biāo)的活動(dòng):按下(MotionEvent.ACTION_DOWN),離開
104、(MotionEvent.ACTION_UP),移動(dòng)(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> 交換圖片的動(dòng)作由swapPicture方法實(shí)現(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> 仿真器是在計(jì)算機(jī)中運(yùn)行的一個(gè)虛擬的移動(dòng)裝置,用它來設(shè)計(jì)、調(diào)試
109、應(yīng)用。</p><p> ADT是一個(gè)用于開發(fā)Android應(yīng)用的eclipse插件,它方便了我們的開發(fā)。例如,它讓我們方便從eclipse內(nèi)部訪問DDMS工具(可用于截屏,管理port-forwarding,設(shè)斷點(diǎn),查看線程和進(jìn)程信息)</p><p> DDMS(Dalvik Debug Monitor Service)和Dalvik虛擬機(jī)集成,將在IDE和模擬器起到一個(gè)轉(zhuǎn)發(fā)服務(wù)。
110、用它能管理仿填器或者設(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 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文件的腳本。當(dāng)然,若用eclipse插件就不需要它了。</p><p>
112、 5.2 功能模塊測試</p><p> 在虛擬器上完成一次拼圖游戲,即可測試出本設(shè)計(jì)是否已經(jīng)完成。下面給出各個(gè)功能模塊的測試過程,若這些功能在模擬器上都能得到體現(xiàn),則說明本設(shè)計(jì)基本成功。</p><p> 1) 難度選擇模塊:</p><p> 在選擇界面點(diǎn)擊“等級(jí)”下拉框,選擇一個(gè)難度,按下“確定”按鈕后跳轉(zhuǎn)到游戲界面,在游戲界面的文本框“等級(jí)”下顯示
113、出玩家選擇的難度。</p><p><b> 界面如下:</b></p><p> 圖5.2.1 難度選擇模塊</p><p> 2) 圖片選擇模塊:</p><p> 在選擇界面點(diǎn)擊一張圖片,按下“確定”按鈕后跳轉(zhuǎn)到游戲界面,在游戲界面的圖片框中顯示玩家選擇的圖片。</p><p>&l
114、t;b> 界面如下:</b></p><p> 圖5.2.2 圖片選擇模塊</p><p> 3) 步數(shù)和時(shí)間設(shè)置模塊:</p><p> 在游戲界面,點(diǎn)擊“play”按鈕后,時(shí)間開始自加1秒,每移動(dòng)一個(gè)圖塊,步數(shù)一欄加1 。</p><p><b> 界面如下:</b></p>
115、<p> 圖5.2.3 步數(shù)和時(shí)間設(shè)置模塊</p><p> 4) 游戲?qū)崿F(xiàn)模塊:</p><p> 在游戲界面,點(diǎn)“play”按鈕后,鼠標(biāo)點(diǎn)擊圖塊并拖動(dòng),能與空白圖塊交換位置。當(dāng)圖片拼成原樣時(shí),彈出窗口提示游戲結(jié)束。</p><p><b> 界面如下:</b></p><p> 圖5.2.4 游
116、戲?qū)崿F(xiàn)模塊</p><p> 5.3 出現(xiàn)的錯(cuò)誤及解決方案</p><p> 完成系統(tǒng)的過程中不可避免的出現(xiàn)了一些問題,通過自我學(xué)習(xí)和他人指導(dǎo),最終解決了這些問題。具體錯(cuò)誤和解決方案如下表5.1:</p><p> 表5.1 錯(cuò)誤及解決方案對(duì)照表</p><p><b> 6 總結(jié)與展望</b></p&g
117、t;<p> 大學(xué)四年學(xué)習(xí)的編程思想和編程技巧,在最后的畢業(yè)設(shè)計(jì)當(dāng)中得到了運(yùn)用。經(jīng)過此次畢業(yè)設(shè)計(jì),充分認(rèn)識(shí)到了自己編程能力方面的缺陷,感覺到自己的基礎(chǔ)比較薄弱。但在這段時(shí)間里,我不斷地發(fā)現(xiàn)自己的問題,并且找出問題產(chǎn)生的原因,根據(jù)相關(guān)的方法解決問題。幾個(gè)月的努力沒有白費(fèi),終于基本上完成拼圖游戲的功能,雖然還有不少不足,我將不斷的完善它。</p><p> 做一個(gè)完整的系統(tǒng)之前,必須先對(duì)該系統(tǒng)進(jìn)行需
118、求分析,擬好系統(tǒng)需要達(dá)到的功能和系統(tǒng)的所有需求,并且畫出系統(tǒng)的大體設(shè)計(jì)流程圖和框架。做完這些準(zhǔn)備工作,做系統(tǒng)的時(shí)候才會(huì)得心應(yīng)手。想到那里就做到那里,不僅效率不高,還會(huì)影響到系統(tǒng)的可用性。</p><p> 完成系統(tǒng)之后才發(fā)現(xiàn),對(duì)于軟件設(shè)計(jì),要想做到得心應(yīng)手,必須多多練習(xí)。只有寫夠足夠多的代碼,才能真正理解軟件設(shè)計(jì)的思想及運(yùn)用。當(dāng)然要做到這一步,要付出相當(dāng)多的努力,在沒有做到之前,遇到不懂的地方就要多參考資料,請(qǐng)
119、教別人。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] (美)Eric J.Baucle.軟件設(shè)計(jì)——從程序設(shè)計(jì)到體系結(jié)構(gòu)[M].李仁發(fā)等譯.北京: 電子工業(yè)出版社,2007.</p><p> [2] 孔令德.畢業(yè)設(shè)計(jì)案例教程——從系統(tǒng)開發(fā)到論文寫作[M].北京:國防工業(yè)出版社,2007.</p>
120、<p> [3] (美)威爾頓,麥可匹克.JavaScript入門經(jīng)典(第3版)[M].北京 施宏斌譯.北京:清華大學(xué)出版社,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ā)入門與實(shí)踐 [M].北京:人民郵電出版社,2009.</p><p> [7] 余志龍等.Google Android SDK開發(fā)范例大全(第二版)[M].北京:人民郵電出版社,2010.</p><p> [8] 李船戊.智能手機(jī)原理與未來發(fā)展[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于Java的拼圖游戲畢業(yè)論文.docx
- 拼圖游戲-拼圖游戲總結(jié).doc
- 畢業(yè)論文--基于安卓系統(tǒng)的拼圖游戲設(shè)計(jì)
- 拼圖游戲
- 兒童益智積木拼圖游戲玩具設(shè)計(jì)研究與開發(fā).pdf
- 拼圖游戲
- 計(jì)算機(jī)應(yīng)用技術(shù)畢業(yè)論文(設(shè)計(jì))--拼圖游戲
- 拼圖游戲 .zip
- 拼圖游戲.docx
- 拼圖游戲-需求設(shè)計(jì).docx
- 拼圖游戲3
- 拼圖游戲2
- -拼圖游戲總結(jié).doc
- 拼圖游戲開題報(bào)告
- 基于java的拼圖游戲設(shè)計(jì)
- vb課程設(shè)計(jì)拼圖游戲
- 本科畢業(yè)論文基于安卓系統(tǒng)的拼圖游戲的設(shè)計(jì)與開發(fā)
- 拼圖游戲-20170626.docx
- 拼圖游戲-20170627.docx
- 拼圖游戲-項(xiàng)目總結(jié).doc
評(píng)論
0/150
提交評(píng)論