基于android數(shù)獨(dú)游戲設(shè)計(jì)_畢業(yè)設(shè)計(jì)論文.doc
《基于android數(shù)獨(dú)游戲設(shè)計(jì)_畢業(yè)設(shè)計(jì)論文.doc》由會員分享,可在線閱讀,更多相關(guān)《基于android數(shù)獨(dú)游戲設(shè)計(jì)_畢業(yè)設(shè)計(jì)論文.doc(47頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、畢業(yè)設(shè)計(jì)(論文) 題題 目目: 基于 Android 數(shù)獨(dú)游戲設(shè)計(jì) I 基于 Android 數(shù)獨(dú)游戲設(shè)計(jì) 摘摘 要要 移動互聯(lián)網(wǎng)時(shí)代的到來極大的改變了我們的生活,而 Android 是一種以 Linux 為基 礎(chǔ)的開放源碼操作系統(tǒng)迅速占領(lǐng)了智能機(jī)操作系統(tǒng),所以在 android 環(huán)境下開發(fā)顯得尤 為必要。Android 是開放性體系架構(gòu),不僅具有非常好的開發(fā)、調(diào)試環(huán)境,而且還支持各 種可擴(kuò)展的用戶體驗(yàn),包括豐富的圖形組件、多媒體支持功能以及強(qiáng)大的瀏覽器。因此, 對于軟件從業(yè)人員來說,Android 平臺具有無限的吸引力。 本文就在分析討論 Android 手機(jī)軟件開發(fā)技術(shù)原理的基礎(chǔ)上,為用戶
2、開發(fā)出基于 Android 平臺的數(shù)獨(dú)游戲的軟件。通過對 Android 系統(tǒng)架構(gòu)和應(yīng)用開發(fā)進(jìn)行初步研究, 設(shè)計(jì)一款數(shù)獨(dú)游戲。在對系統(tǒng)進(jìn)行詳細(xì)需求分析的基礎(chǔ)上,確定了系統(tǒng)的功能和性能要 求,對游戲的開機(jī)動畫,菜單界面、屏幕繪制、時(shí)間控制、布局算法等進(jìn)行了設(shè)計(jì)。 本文詳細(xì)介紹了在 Android 平臺上以 Java 為語言編寫游戲的過程,最終實(shí)現(xiàn)了一個(gè) 界面友好、操作簡單的手機(jī)益智游戲。 關(guān)關(guān)鍵鍵詞詞:Android 數(shù)獨(dú) 智能機(jī) II The design of Sudoku game based on Android Abstract Arrival of the mobile Intern
3、et era has greatly changed our lives, and Android is a Linux- based system quickly occupied the smartphone operation system, Android development is particularly necessary under the circumstances. Androids biggest feature is its open architecture, not only has a very good development and debugging en
4、vironment, but also supports a variety of scalable user experience, including rich graphical components, multimedia support, and powerful browser. Therefore, for software professionals, Android platform has unlimited appeal. In this thesis, the analysis and discussion of Android mobile phone softwar
5、e development technology provide users with better platform to the Sudoku based on Android meteorological software. Through the Android system structure and application development for preliminary research, we designed a Sudoku game. In the system based on the analysis of the detailed requirements,
6、we design the game in the game menu interface, the screen rendering, time control and layout algorithm. This thesis describes the whole development process of Android based smart phone game using Google Android SDK. Finally, we have the software with friendly interface and simple operation. Key Word
7、s: Android ; Sudoku ; Smartphone III 目 錄 摘 要I Abstract.II 第一章 緒論.1 1.1 研究背景1 1.1.1 手機(jī)游戲的發(fā)展以及特征1 1.1.2 數(shù)獨(dú)游戲背景2 1.2 Android 手機(jī)游戲的市場價(jià)值.2 1.3 本文主要工作及章節(jié)結(jié)構(gòu).3 第二章 Android 平臺概述.4 2.1 Android 系統(tǒng)簡介4 2.2 Android 系統(tǒng)特性4 2.3 Android 操作系統(tǒng)框架結(jié)構(gòu).5 2.3.1 應(yīng)用程序6 2.3.2 應(yīng)用程序框架6 2.3.3 庫與運(yùn)行環(huán)境7 2.3.4 內(nèi)核7 2.4 Android 應(yīng)用程序構(gòu)成.8
8、 2.4.1Activity8 2.4.2 Broadcast Receiver9 2.4.3 Service10 2.4.4 Content Provider10 2.5 Android 應(yīng)用程序的生命周期.11 第三章 數(shù)獨(dú)游戲的設(shè)計(jì).13 3.1 游戲功能簡介13 3.2 游戲策劃以及準(zhǔn)備工作14 3.3 游戲的架構(gòu).16 3.3.1 各類的介紹16 3.3.2 游戲的框架簡介18 IV 第四章 基于 Android 平臺數(shù)獨(dú)游戲的實(shí)現(xiàn).19 4.1 歡迎界面的設(shè)計(jì)和實(shí)現(xiàn).19 4.1.1 主類 KLSDActivity 實(shí)現(xiàn)19 4.1.2 歡迎界面 WelcomeView 類的實(shí)現(xiàn)2
9、0 4.1.3 WelcomeViewDrawThread 類和 WelcomeViewGoThread 類的實(shí)現(xiàn)21 4.1.4 HelpView 類和 AboutView 類的實(shí)現(xiàn)22 4.2 游戲界面相關(guān)類的實(shí)現(xiàn).23 4.2.1 游戲界面 GameView 的實(shí)現(xiàn)24 4.2.2 時(shí)間線程 TimeThread 的實(shí)現(xiàn)25 4.3 數(shù)獨(dú)算法類的實(shí)現(xiàn).25 4.3.1 數(shù)獨(dú)算法基本邏輯26 4.3.2 檢測填充結(jié)果27 4.4 游戲的測試和運(yùn)行.29 4.4.1 游戲測試概述29 4.4.2 測試環(huán)境30 4.4.3 游戲運(yùn)行結(jié)果31 第五章 總結(jié)和展望.35 5.1 總結(jié).35 5.2
10、 展望.35 參考文獻(xiàn).36 致 謝.37 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 1 第一章 緒論 1.11.1 研究背景研究背景 1.1.1 手機(jī)游戲的發(fā)展以及特征 手機(jī)游戲,是指用戶運(yùn)行在移動終端的應(yīng)用程序,具有網(wǎng)絡(luò)連接功能,能 夠滿足用戶隨時(shí)隨地進(jìn)行游行的需求,它需要一定的硬件環(huán)境和一定的系統(tǒng)環(huán) 境作為其運(yùn)行的基礎(chǔ)。手機(jī)游戲吸引用戶最大的特點(diǎn)就是其便利性,由于其是 移動終端,所以用戶可以隨時(shí)隨地進(jìn)行游戲。正是因?yàn)槠浔憷?,手機(jī)游戲市 場有了很大的發(fā)展。在美國,手機(jī)游戲作為美國手機(jī)用戶最喜歡的移動應(yīng)用之 一,在iPhone和Android等智能終端推出后發(fā)展迅速。 手機(jī)游戲常見的特征可以總結(jié)
11、如下: 1.龐大的潛在用戶群:全球在使用的移動電話已經(jīng)超過 10 億部,而且這個(gè) 數(shù)字每天都在不斷增加。在除美國之外的各個(gè)發(fā)達(dá)國家,手機(jī)用戶都比計(jì)算機(jī) 用戶多。手機(jī)游戲潛在的市場比其他任何平臺,比如 PlayStation 和 GameBoy 都要大。 2.便攜性與移動性:在控制臺游戲時(shí)代,GameBoy 熱銷的一個(gè)原因就是便 攜性人們可以隨時(shí)隨地沉浸在自己喜歡的游戲中,還可以隨時(shí)隨地?fù)屬徸?己喜歡的裝備或?qū)櫸?。和游戲控制臺或者 PC 相比,手機(jī)雖然可能不是一個(gè)理想 的游戲設(shè)備,但畢竟人們總是隨時(shí)隨身攜帶,這樣手機(jī)游戲很可能成為人們消 遣時(shí)間的首選。手機(jī)便攜性、移動性的特征更能滿足用戶隨時(shí)隨地
12、玩游戲的需 求,用戶利用排隊(duì)、等車的時(shí)間進(jìn)行游戲,手機(jī)游戲碎片化的特性凸顯。調(diào)查 顯示,29.8%的用戶在用手機(jī)玩游戲以后電腦端玩游戲的時(shí)間減少,手機(jī)游戲已 經(jīng)開始搶奪電腦游戲時(shí)間。22.4%的用戶手機(jī)游戲時(shí)間越來越長,僅有 10%的用 戶時(shí)間變短,手機(jī)游戲已逐漸成為一種普遍的娛樂方式。 3.支持網(wǎng)絡(luò):因?yàn)槭謾C(jī)是網(wǎng)絡(luò)設(shè)備,在一定限制因素下可以實(shí)現(xiàn)多人在線 游戲。隨著移動網(wǎng)絡(luò)的發(fā)展,移動游戲也越來越多的被大家接受,對于之前長 期通知市場的掌機(jī)來說造成了不少的沖擊。市場研究公司 IDC 和 App Annie 報(bào) 第一章 緒論 2 告顯示 2013 年第一季度 iOS 和 Android 平臺游戲
13、業(yè)務(wù)營收是掌機(jī)的 3 倍。 1.1.2 數(shù)獨(dú)游戲背景 數(shù)獨(dú)的前身為“九宮格” ,最早起源于中國。但當(dāng)時(shí)的算法比現(xiàn)在的更為復(fù) 雜,要求縱向、橫向、斜向上的三個(gè)數(shù)字之和等于 15,而不是數(shù)字不能重復(fù)。 儒家典籍易經(jīng)中的“九宮圖”也是來源于此。 到了 18 世紀(jì)末,瑞士數(shù)學(xué)家萊昂哈德歐文又發(fā)明了一種叫做“拉丁方塊” 的游戲,之后不久,美國的一家數(shù)字邏輯游戲雜志開始刊登這類游戲,使此類 游戲得到良好發(fā)展,之后又在日本得到了廣泛的傳播。2004 年,第一個(gè)“數(shù)獨(dú)” 游戲被刊登上了英國泰晤士報(bào)的封面,此時(shí)開始數(shù)獨(dú)游戲才真正為世界所 知曉。 數(shù)獨(dú)游戲的規(guī)則很簡單,只需要在空格處填寫19的數(shù)字,并保證每個(gè)數(shù)字
14、 在每個(gè)九宮格內(nèi)只出現(xiàn)一次,而一般的游戲過程是系統(tǒng)隨機(jī)生成一個(gè)棋局,然 后玩家需要在空白處填上相應(yīng)的數(shù)字使其滿足游戲規(guī)則。由于此類游戲操作簡 單,不需要特定的語言基礎(chǔ),也不需要進(jìn)行數(shù)字運(yùn)算且可玩性高、鍛煉思維、 開發(fā)大腦,所以很快風(fēng)靡全球。 1.21.2 AndroidAndroid 手機(jī)游戲的市場價(jià)值手機(jī)游戲的市場價(jià)值 Android 是 Google 開發(fā)的基于 Linux 平臺的開源手機(jī)操作系統(tǒng)。它包括操 作系統(tǒng)、用戶界面和應(yīng)用程序移動電話工作所需的全部軟件,而且不存在 任何以往阻礙移動產(chǎn)業(yè)創(chuàng)新的專有權(quán)障礙2。Google 與開放手機(jī)聯(lián)盟合作開發(fā) 了 Android,這個(gè)聯(lián)盟由包括中國移
15、動、摩托羅拉、高通、宏達(dá)電和 T-Mobile 在內(nèi)的 30 多家技術(shù)和無線應(yīng)用的領(lǐng)軍企業(yè)組成。Google 通過與運(yùn)營商、設(shè)備 制造商、開發(fā)商和其他有關(guān)各方結(jié)成深層次的合作伙伴關(guān)系,希望借助建立標(biāo) 準(zhǔn)化、開放式的移動電話軟件平臺,在移動產(chǎn)業(yè)內(nèi)形成一個(gè)開放式的生態(tài)系統(tǒng)。 Android平臺上的游戲相比應(yīng)用軟件,不需要進(jìn)行嚴(yán)格的市場細(xì)分,不需要 針對目標(biāo)用戶量身定制。這是因?yàn)橛螒蛲婕业暮诵男枨笫墙y(tǒng)一的,那就是:娛 樂與打發(fā)時(shí)間(乃至更高層面的競技需求和群體認(rèn)同需求),這種需求附著于特 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 3 定的社會發(fā)展階段,不受地域的限制,甚至于能夠穿透文化壁壘。因此,絕大 多
16、數(shù)種類的游戲都具備傳染性與普適性,每一個(gè)售出的游戲都將會點(diǎn)燃周圍潛 在玩家的激情,最終吞噬整個(gè)需求市場。由此可知,幾乎每一個(gè)Android手機(jī)用 戶都是游戲的需求者,都是潛在的顧客,現(xiàn)今的1000多萬Android用戶不過是冰 山一角,隨著Android手機(jī)市場進(jìn)一步壯大,游戲的市場容量將具備更大的增長 空間3。 1.31.3 本文主要工作及章節(jié)結(jié)構(gòu)本文主要工作及章節(jié)結(jié)構(gòu) 整篇論文共分為六個(gè)部分,其主要內(nèi)容安排如下: 第一章 引言。介紹論文的研究背景、目的和意義。包括課題的背景資料 簡介、國內(nèi)外研究現(xiàn)狀和發(fā)展趨勢、深入地介紹了課題研究的價(jià)值。 第二章 Android 平臺概述。這部分主要是介紹
17、了智能手機(jī)系統(tǒng)現(xiàn)狀、 Android 的功能特征、Android 系統(tǒng)的特點(diǎn)以及 Android 的體系結(jié)構(gòu)。 第三章 數(shù)獨(dú)游戲的設(shè)計(jì)。對游戲相關(guān)策劃,功能以及架構(gòu)進(jìn)行介紹。 第四章 數(shù)獨(dú)游戲的實(shí)現(xiàn)。這部分主要介紹了游戲的界面、游戲中的邏輯 處理以及該游戲今后的改進(jìn)和優(yōu)化。 第五章 總結(jié)和展望。對整篇論文加以總結(jié)與回顧以及對未來的展望。 第二章 Android 平臺概述 4 第二章 Android 平臺概述 本章將介紹Android 這個(gè)基于Linux開發(fā)平臺,首先我們會介紹 Android 操作系統(tǒng),然后講述其特性,接著講述其系統(tǒng)框架,其次我們會重點(diǎn)介紹其應(yīng) 用程序的構(gòu)成模塊,最后會介紹其生
18、命周期。 2.12.1 AndroidAndroid 系統(tǒng)簡介系統(tǒng)簡介 Android 是谷歌公司發(fā)布的手機(jī)操作系統(tǒng),它是基于Linux 平臺的開源手 機(jī)操作系統(tǒng),谷歌公司將要把其打造為基于移動終端的真正開放的移動軟件平 臺,不僅擁有移動電話所需要的工作軟件,而且在專利權(quán)方面能夠不侵犯他 人權(quán)利去推動移動互聯(lián)網(wǎng)的創(chuàng)新。 谷歌公司為了開發(fā)Android,與開放手機(jī)聯(lián)盟進(jìn)行了合作,手機(jī)開放聯(lián)盟由 全球30 多家移動開發(fā)和手機(jī)應(yīng)用的領(lǐng)先企業(yè)組成。谷歌公司不僅僅和運(yùn)營商達(dá) 成了合作關(guān)系、而且與設(shè)備制造商以及開發(fā)商保持長期合作,目的就在于利用 其優(yōu)勢建立移動軟件平臺,其特點(diǎn)是標(biāo)準(zhǔn)化、開放式的。Andro
19、id是谷歌公司未 來企業(yè)戰(zhàn)略的一部分,其目的是為了在任何時(shí)候任何地點(diǎn)能夠提供信息 4。 2.22.2 AndroidAndroid 系統(tǒng)特性系統(tǒng)特性 Android系統(tǒng)特性如下所示: 1.應(yīng)用框架:Android系統(tǒng)組件,用于開發(fā)流程,兩個(gè)特性:可重用性和可 替代性。 2.Dalvik 虛擬機(jī):在Android系統(tǒng)中, Dalvik虛擬機(jī)是一種Java 虛擬機(jī), 是Google公司自主開發(fā),其代號為Dalvik,占用資源比較小,運(yùn)行效率比較高。 3.集成瀏覽器:引擎 WebKit,其特性是開源。 4.優(yōu)化圖形:強(qiáng)大的自定義二維圖形庫?;贠penGL ES 1.0 標(biāo)準(zhǔn)的3D 圖 形功能,在移
20、動3D 開發(fā)中有著至關(guān)重要的地位。 5.SQLite 數(shù)據(jù)庫:SQLite 提供結(jié)構(gòu)化的數(shù)據(jù)存儲。它是一款輕型免費(fèi)的 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 5 且開源的數(shù)據(jù)庫,設(shè)計(jì)目標(biāo)是嵌入式的。它具備占用資源低、需要的內(nèi)存空間 少、處理速度較快,并且還支持事務(wù)處理功能等優(yōu)點(diǎn)。 6.多媒體支持:支持各種通用的音視頻和靜態(tài)圖像格式 (MPEG4、MP3、JPG、PNG、GIF、AAC、H.264、AMR)。 7.GSM 技術(shù):(依賴硬件)Global System for Mobile Communications,全 球移動通訊系統(tǒng),俗稱全球通,是第二代移動通信技術(shù),其開發(fā)目的是讓全球各 地可以
21、共同使用一個(gè)移動電話網(wǎng)絡(luò)標(biāo)準(zhǔn),讓用戶使用一部手機(jī)就能行遍全球。 8.藍(lán)牙,EDGE,3G,and Wi-Fi:(依賴硬件)藍(lán)牙和Wi-Fi 都是一種短距離 的無線連接技術(shù),在短距離內(nèi)可以實(shí)現(xiàn)話音和數(shù)據(jù)的無線傳輸。EDGE(Enhanced Data Rate for GSM Evolution),是增強(qiáng)型數(shù)據(jù)速率GSM 演進(jìn)技術(shù)。 9.Camera,GPS,Compass,and Accelerometer:(依賴硬件)GPS(Global Positioning System),即全球定位系統(tǒng)。它是一個(gè)由覆蓋全球的24 顆衛(wèi)星組 成的衛(wèi)星系統(tǒng)。Compass是一個(gè)開放源代碼的Java 搜索引
22、擎框架。 10.強(qiáng)大的開發(fā)環(huán)境:包括一個(gè)設(shè)備模擬器,調(diào)試工具,內(nèi)存和性能檢測, 以及Eclipse 11.IDE 的開發(fā)插件。Eclipse集成開發(fā)環(huán)境。 2.32.3 AndroidAndroid 操作系統(tǒng)框架結(jié)構(gòu)操作系統(tǒng)框架結(jié)構(gòu) Android 作為一個(gè)開源的移動設(shè)備的平臺,其軟件層次結(jié)構(gòu)自上而下分為 四個(gè)層次,分別是:應(yīng)用程序(Application)、應(yīng)用程序框架(Application Framework)、各種庫(Libraries)和Android 運(yùn)行環(huán)境(RunTime)、Linux 內(nèi)核 (Linux Kernel)。 第二章 Android 平臺概述 6 圖 2.1 Go
23、ogle 手機(jī)操作系統(tǒng)平臺-Android 的架構(gòu)模型 2.3.1 應(yīng)用程序 突破傳統(tǒng)思維,提供更好的用戶體驗(yàn)。Android 將會移植一系列的核心應(yīng) 用,包括E-mail 客戶端,SMS 程序,日歷,GPS 地圖,瀏覽器,聯(lián)系人等等。 所有的應(yīng)用程序都是由Java語言完成的。應(yīng)用程序是無界限的,可以在平 等條件下創(chuàng)建,還可以輕松地嵌入Web,可以并行運(yùn)行5。 2.3.2 應(yīng)用程序框架 Android 應(yīng)用程序由一個(gè)或多個(gè)組件組成,Android 的應(yīng)用程序框架為應(yīng) 用程序?qū)拥拈_發(fā)者提供APIs,它實(shí)際上是一個(gè)應(yīng)用程序的框架。由于上層的應(yīng) 用程序是以Java 構(gòu)建的,因此本層次提供的首先包含了
24、UI 程序中所需要的各 種控件: 例如:Views(視圖組件)包括lists(列表),grids(柵格),text boxes(文 本框),buttons(按鈕)等。甚至一個(gè)嵌入式的Web 瀏覽器。 一個(gè) Android 的應(yīng)用程序可以利用應(yīng)用程序框架中的以下幾個(gè)部分: Activity(活動),Broadcast Receiver(廣播接收者),Service(服務(wù)), Content Provider(內(nèi)容提供者) 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 7 2.3.3 庫與運(yùn)行環(huán)境 Android 包含一套C/C+庫,能被系統(tǒng)中不同的組件使用。這些功能通過 Android應(yīng)用框架展現(xiàn)給開發(fā)人
25、員。下面列出一些核心庫: (1)System C library:從BSD 繼承來的標(biāo)準(zhǔn)C 系統(tǒng)函數(shù)庫,也是系統(tǒng)中最 為底層的庫,是專門為基于嵌入式Linux 的設(shè)備制定的。 (2)Media Framework:該庫支持多種常用的音頻、視頻格式的回放和錄制, 同時(shí)支持靜態(tài)圖片文件,包括MPEG4、H.264、MP3、AAC、AMR、JPG 和PNG 等。 (3)Surface Manager:用于管理不同應(yīng)用對圖形顯示子系統(tǒng)和2D 和3D 圖 形層的訪問。 (4)WebKit:一個(gè)時(shí)尚的web 瀏覽器引擎,為Android 瀏覽器和內(nèi)嵌的web view 提供實(shí)現(xiàn)。 (5)SGL:隱藏的2D
26、 圖形引擎。 (6)3D libraries:基于OpenGL ES 1.0 APIs 實(shí)現(xiàn)的庫,該庫可以使用硬 件3D 加速,或者高度優(yōu)化的3D 軟加速。 (7)FreeType:位圖和向量模式的字體繪制。 (8)SQLite:一個(gè)強(qiáng)大的,輕量的關(guān)系型數(shù)據(jù)庫引擎,用于所有的應(yīng)用。 Android 運(yùn)行時(shí)Android 包含一組核心庫,提供了Java 語言核心庫內(nèi)的大 部分功能。Android運(yùn)行環(huán)境主要指的是虛擬機(jī)技術(shù)Dalvik。Dalvik虛擬機(jī) 依賴Linux kernel來實(shí)現(xiàn)一些潛在功能,例如線程和底層內(nèi)存管理。Dalvik虛 擬機(jī)和一般Java虛擬機(jī)(JavaVM)不同,它執(zhí)行的
27、不是Java標(biāo)準(zhǔn)的字節(jié)碼而是 Dalvik可執(zhí)行格式(.dex)中執(zhí)行文件,該格式的文件經(jīng)過優(yōu)化占用很小的內(nèi)存。 在執(zhí)行的過程中,每一個(gè)應(yīng)用程序即一個(gè)進(jìn)程(Linux 的一個(gè)Process) 。二者 最大的區(qū)別在于Java VM 是以基于棧的虛擬機(jī)(Stack-based),而Dalvik是基于 寄存器的虛擬機(jī)(Register-based)6。顯然,后者最大的好處在于可以根據(jù)硬 件實(shí)現(xiàn)更大的優(yōu)化,這更適合移動設(shè)備的特點(diǎn)。每個(gè)Android應(yīng)用程序都在 Dalvik VM的一個(gè)實(shí)例中運(yùn)行,這個(gè)實(shí)例駐留在一個(gè)由Linux內(nèi)核管理的進(jìn)程中。 第二章 Android 平臺概述 8 2.3.4 內(nèi)核
28、Android使用Linux2.6 內(nèi)核來提供系統(tǒng)的核心服務(wù),例如:安全機(jī)制,內(nèi) 存管理,進(jìn)程管理,網(wǎng)絡(luò)堆棧。Android更多的是需要一些與移動設(shè)備相關(guān)的驅(qū) 動程序。其主要的驅(qū)動有:顯示驅(qū)動(Display Driver)、Flash內(nèi)存驅(qū)動(Flash Memory Driver)、照相機(jī)驅(qū)動(Camera Driver)、音頻驅(qū)動(Audio Driver)、 Wi-Fi驅(qū)動(Camera Driver)、鍵盤驅(qū)動(KeyBoard Driver)、藍(lán)牙驅(qū)動 (Bluetooth Driver)、Binder IPC驅(qū)動(Android一個(gè)特殊的驅(qū)動程序,具有單 獨(dú)的設(shè)備節(jié)點(diǎn),提供進(jìn)程間
29、通訊的功能)7。 2.42.4 AndroidAndroid 應(yīng)用程序構(gòu)成應(yīng)用程序構(gòu)成 Android應(yīng)用程序與其他很多計(jì)算機(jī)平臺的應(yīng)用程序不同,他們沒有唯一的 啟動入口,一個(gè)Android應(yīng)用程序是由多個(gè)不同組件組合而成,組件間通過 Intent實(shí)現(xiàn)通信。Android系統(tǒng)的基本組件包括Activity、Service、Broadcast Receiver和Content Provider等,要實(shí)現(xiàn)組件間通信,還需要Intent消息組件。 并不是每個(gè)Android應(yīng)用程序都必須具備這四個(gè)組件,很多時(shí)候只需要這四種中 的某幾種就可以了。除此之外,應(yīng)用程序的所有組件還都必須在 AndroidMa
30、nifest.xml中聲明8。這是一個(gè)XML配置文件,這個(gè)配置文件用于定 義應(yīng)用程序的組件、組件的功能及必要條件等。這個(gè)配置文件是任何一個(gè) Android應(yīng)用程序所必需的。 2.4.1 Activity Activity 可以說是開發(fā)人員最常用的組件,同時(shí)也屬于Android 最基本的 組成部分之一。Android 程序中,一般一個(gè)Activity 代表手機(jī)屏幕上的一屏。 舉例來說,如果將手機(jī)比作一個(gè)瀏覽器,那么一個(gè)Activity 就相當(dāng)于一個(gè)網(wǎng)頁。 在Activity 中,可以添加多個(gè)視圖,然后為這些視圖添加一些事件處理。這些 視圖可以是按鈕、文本框、列表等。可以看到,Activity 的
31、概念和網(wǎng)頁的概念 相當(dāng)類似。一般一個(gè)Android 應(yīng)用是由多個(gè)Activity 組成,同時(shí)這些Activity 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 9 相互之間可以進(jìn)行跳轉(zhuǎn),例如,按下某個(gè)Activity 中的Button 按鈕后,可能 會跳轉(zhuǎn)到一個(gè)其他的Activity。不過和網(wǎng)頁跳轉(zhuǎn)稍有不同,Activity之間的跳 轉(zhuǎn)可以有返回值,例如,在Activity A 跳轉(zhuǎn)到Activity B 后,那么當(dāng) Activity B運(yùn)行結(jié)束時(shí),可能會返回給Activity A 一個(gè)值。在多個(gè)Activity 交流的過程中,這種返回機(jī)制是相當(dāng)實(shí)用的。當(dāng)用戶進(jìn)入一個(gè)新的屏幕時(shí),之 前的屏幕會轉(zhuǎn)入暫停狀
32、態(tài),并且保存在歷史堆棧中。正是由于歷史堆棧的存在, 用戶可以通過返回操作,返回到之前打開過的所有屏幕。Android默認(rèn)的是將應(yīng) 用程序從開始到當(dāng)前的每一個(gè)屏幕都保存到堆棧中,不過與此同時(shí),Android還 提供了很方便的機(jī)制,讓開發(fā)人員自定義某個(gè)屏幕是否需要保存到歷史堆棧。 Activity 的跳轉(zhuǎn)實(shí)現(xiàn),必須借助于Intent 類。因此Intent 在Android 應(yīng)用中 占據(jù)的地位是極其重要的。簡單來說,一個(gè)Intent 就是對一個(gè)將要執(zhí)行的操作 請求的抽象描述。 Intent 的描述,主要包含有兩個(gè)數(shù)據(jù)結(jié)構(gòu):動作(action)和動作對應(yīng)的數(shù) 據(jù)(data)。動作有很多種,系統(tǒng)中最常見
33、的動作類型有:MAIN(表明該Activity 是應(yīng)用程序的入口)、VIEW、PICK、EDIT 等等;而動作對應(yīng)的數(shù)據(jù)一般以URI 的形式表示,例如:要查看某一個(gè)網(wǎng)頁,則需要?jiǎng)?chuàng)建Intent,它的動作類型為 VIEW,對應(yīng)的數(shù)據(jù)應(yīng)該是該網(wǎng)頁的網(wǎng)址。值得一提的是,有一個(gè)類叫 IntentFilter,它是Intent的相關(guān)類。如果說Intent是一個(gè)有效的操作請求, 那么一個(gè)IntentFiler則用于描述一個(gè)Activity(或者Intent Receiver等)能夠 接收哪些Intent的請求。比如系統(tǒng)瀏覽器的Activity用于查看某一個(gè)網(wǎng)頁,那 么它用于接收Intent的IntentF
34、ilter,要定義類型為VIEW的動作并且能夠過濾 表示一個(gè)網(wǎng)頁網(wǎng)址的 URI。通常IntentFilter要被注冊在AndroidManifest.xml文件中。 Activity 之間的跳轉(zhuǎn)正是通過解析各種Intent 來實(shí)現(xiàn)的。例如一個(gè)Activity 調(diào)用startActivity(intent)方法,希望跳轉(zhuǎn)到其他的Activity 時(shí),會觸發(fā)系 統(tǒng)的Intent 解析過程,在所有安裝的應(yīng)用程序中已注冊的IntentFilter 中查 找,并最終挑選出能夠匹配Intent 的Activity。然后這個(gè)新的Activity 因?yàn)?接收到Intent 的請求而開始運(yùn)行,完成Activit
35、y 的跳轉(zhuǎn)。這種跳轉(zhuǎn)機(jī)制提供 了兩個(gè)關(guān)鍵好處: 第二章 Android 平臺概述 10 (1)操作請求被Intent 封裝起來,方便Activity 重復(fù)利用。 (2)相互跳轉(zhuǎn)的多個(gè)Activity 之間實(shí)現(xiàn)了松耦合。只要IntentFilier 保持 不變,一個(gè)ctivity 可以隨意修改,而不用擔(dān)心其他Activity 找不到它。 2.4.2 Broadcast Receiver 應(yīng)用程序可以通過Broadcast Receiver 監(jiān)聽一個(gè)外部的事件,并做出響應(yīng)。 例如,當(dāng)應(yīng)用程序需要對電話呼入這個(gè)外部事件做出反應(yīng)時(shí),可以利用 Broadcast Receiver 進(jìn)行處理。再如,當(dāng)一個(gè)
36、后臺下載任務(wù)成功的事件發(fā)生時(shí), 需要提示用戶下載完成,仍然可以利用Broadcast Receiver 來進(jìn)行處理。 Broadcast Receiver不能生成UI,也就是說對于用戶來說是透明的,用戶 是看不到的。Broadcast Receiver只能通過NotificationManager來通知用戶這 些事件發(fā)生了。Broadcast Receiver既可以在AndroidManifest.xml中注冊,也 可以在運(yùn)行時(shí)的代碼中使用Context.registerReceiver()進(jìn)行注冊。注冊完成 之后,當(dāng)事件來臨的時(shí)候,即使程序沒有啟動,系統(tǒng)依然可以根據(jù)定義,自動 啟動程序。各種
37、應(yīng)用也可以通過使用Context.sendBroadcast()將它們自己的 Intent Broadcast廣播給其他應(yīng)用程序。 2.4.3 Service Service是一種程序,它可以運(yùn)行很長時(shí)間,但是它卻沒有用戶界面,不可 交互,而且不能自己運(yùn)行。它需要通過某一個(gè)Activity或者其他的Context對象 來調(diào)用12。最常見的例子,比如說用戶正在運(yùn)行一個(gè)音樂播放器的程序,此時(shí) 如果想瀏覽網(wǎng)頁,那么,在用戶導(dǎo)航到Android的瀏覽器以后,雖然進(jìn)入了瀏覽 器屏幕,但是歌曲的播放并沒有停止,而是在后臺繼續(xù)播放著。其實(shí)播放的動 作正是由播放音樂的Service執(zhí)行著。當(dāng)然,如果需要的話,
38、Service也是可以 停止。通過startService(Intent service)可以啟動一個(gè)Service,通過 Context.bindService()可以綁定一個(gè)Service。 2.4.4 Content Provider 對于數(shù)據(jù)存儲,Android與其他的操作系統(tǒng)有一點(diǎn)不太一樣,即數(shù)據(jù)在 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 11 Android程序中都是私有的,這些數(shù)據(jù)包括文件類型和數(shù)據(jù)庫類型以及其他類型 的數(shù)據(jù)。這樣系統(tǒng)和應(yīng)用程序的數(shù)據(jù)就各自獨(dú)立起來,以避免受到某些不正常 程序或是病毒的影響。不過這并不代表各應(yīng)用程序之間就因此而無法進(jìn)行數(shù)據(jù) 交換了。當(dāng)某個(gè)應(yīng)用程序希望與
39、其它的應(yīng)用共享其數(shù)據(jù)時(shí),Android提供的 Content Provider就可以發(fā)揮作用了。在實(shí)現(xiàn)Content Provider的抽象接口以 后,程序便可以將自己的數(shù)據(jù)暴露出去,其他程序只要有權(quán)限,就可以通過這 一套標(biāo)準(zhǔn)而統(tǒng)一的接口,讀取或是刪除該程序的數(shù)據(jù)13。 2.52.5 AndroidAndroid 應(yīng)用程序的生命周期應(yīng)用程序的生命周期 Android 應(yīng)用程序一個(gè)完整的生命周期是從應(yīng)用程序的創(chuàng)建到結(jié)束的全過 程,與其他系統(tǒng)不同,Android 應(yīng)用程序的生命周期是不受進(jìn)程本身控制的, 而是由Android 系統(tǒng)來決定的,Android 系統(tǒng)會根據(jù)應(yīng)用程序?qū)τ脩舻闹匾?及當(dāng)前系
40、統(tǒng)的負(fù)載來決定生命周期的長短。Android 系統(tǒng)的各個(gè)進(jìn)程重要程度 如圖2.2 所示。 前臺進(jìn)程可見進(jìn)程服務(wù)進(jìn)程后臺進(jìn)程空進(jìn)程 關(guān)鍵優(yōu)先級高優(yōu)先級低優(yōu)先級 圖 2.2 Android 應(yīng)用程序進(jìn)程優(yōu)先級 (1)前臺進(jìn)程,是Android 系統(tǒng)中最重要的進(jìn)程,是與用戶正在進(jìn)行交互的 進(jìn)程。有以下四種情況:Activity 正在與用戶進(jìn)行交互;進(jìn)程被Activity 調(diào) 用,而且這個(gè)進(jìn)程正在與用戶進(jìn)行交互;進(jìn)程服務(wù)正在執(zhí)行聲明中的回調(diào)函數(shù), 如onCreate()、onStart()、onDestroy();進(jìn)程的Broadcast Receiver 在執(zhí)行 onReceive()函數(shù)。Andr
41、oid 系統(tǒng)在多個(gè)前臺進(jìn)程同時(shí)運(yùn)行時(shí),可能會出現(xiàn)資源 不足的情況,此時(shí)會清除部分前臺進(jìn)程,以保證主要的用戶界面能夠及時(shí)響應(yīng)。 (2)可見進(jìn)程,是指部分應(yīng)用程序界面能夠被用戶看見,卻不在前臺與用戶 進(jìn)行交互,不影響界面事件的進(jìn)程。如果應(yīng)用程序進(jìn)程包含一個(gè)服務(wù),且這個(gè) 服務(wù)正被用戶可見的Activity 調(diào)用,則此進(jìn)程同樣被視為可見進(jìn)程。Android 進(jìn)程一般存在少量的可見進(jìn)程,只有在特殊情況下,Android 系統(tǒng)才會為保證 第二章 Android 平臺概述 12 前臺進(jìn)程的資源而清除可見進(jìn)程。 (3)服務(wù)進(jìn)程,服務(wù)進(jìn)程是指包含已啟動服務(wù)的進(jìn)程。該進(jìn)程沒有用戶界面 并在后臺長期運(yùn)行。除非And
42、roid 系統(tǒng)不能保證前臺進(jìn)程和可見進(jìn)程所必要的 資源,否則不會強(qiáng)行清除服務(wù)進(jìn)程。 (4)后臺進(jìn)程,后臺進(jìn)程是指不包括任何已經(jīng)啟動的服務(wù),而且沒有任何用 戶可見的Activity 的進(jìn)程。Android 系統(tǒng)中一般存在數(shù)量較多的后臺進(jìn)程,在 系統(tǒng)資源緊張時(shí)系統(tǒng)將會優(yōu)先清除用戶較長時(shí)間沒有見到的后臺進(jìn)程。 (5)空進(jìn)程,空進(jìn)程是不包含任何活躍組件的進(jìn)程,空進(jìn)程在系統(tǒng)緊張時(shí)會 被首先清除。但為了提高Android 應(yīng)用程序的啟動速度,Android 系統(tǒng)會將空 進(jìn)程保存在系統(tǒng)內(nèi)存用,在用戶重新啟動該程序時(shí),空進(jìn)程會被重新使用。 當(dāng)兩個(gè)應(yīng)用程序具有相同的優(yōu)先級時(shí),處于較低優(yōu)先級且運(yùn)行時(shí)間最長的 進(jìn)程
43、將會首先被終止。進(jìn)程的優(yōu)先級也受到進(jìn)程間依賴性的影響,如果一個(gè)應(yīng) 用程序依賴于第二個(gè)應(yīng)用程序所提供的服務(wù)或者內(nèi)容提供器,那么第二個(gè)應(yīng)用 程序至少會擁有與它所支持的這個(gè)應(yīng)用程序相同的優(yōu)先級。進(jìn)程的優(yōu)先級取決 于所有組件中優(yōu)先級最高的部分,進(jìn)程的優(yōu)先級會根據(jù)其他進(jìn)程的依賴關(guān)系而 變化。 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 13 第三章 數(shù)獨(dú)游戲的設(shè)計(jì) 3.13.1 游戲功能簡介游戲功能簡介 數(shù)獨(dú)游戲的規(guī)則很簡單,只需在空格處填入 19 的數(shù)字,并保證每個(gè)數(shù) 字在每個(gè)九宮格內(nèi)只能出現(xiàn)一次,且每個(gè)數(shù)字在每一行、每一列也只能出現(xiàn)一 次,而一般的游戲過程是系統(tǒng)隨機(jī)生成一個(gè)棋局,然后玩家需要在空白處填上 相
44、應(yīng)的數(shù)字使其滿足游戲規(guī)則。游戲框架如下圖所示: 點(diǎn)擊圖標(biāo) 開機(jī)動畫 計(jì)時(shí)區(qū)域 提示暫停 游戲區(qū)域 退出游戲 功能區(qū)域 開始游戲 菜單界面 幫助游戲關(guān)于游戲 退出換題 圖3.1 游戲框架圖 該游戲的運(yùn)行步驟如下。 1.啟動游戲后首先進(jìn)入的便是歡迎界面的動畫,在歡迎界面中,“點(diǎn)擊屏 幕繼續(xù)”閃動,達(dá)到提示的效果。 2.在游戲界面點(diǎn)擊屏幕,便進(jìn)入菜單界面。 3.在菜單界面單擊“關(guān)于游戲”菜單可進(jìn)入“關(guān)于”界面,在“關(guān)于”界 面中介紹了該游戲的目標(biāo)平臺及開發(fā)日期。 4.在菜單界面單擊“幫助游戲”菜單可進(jìn)入“幫助”界面,在“幫助”界 第三章 數(shù)獨(dú)游戲的設(shè)計(jì) 14 面介紹了游戲的基本規(guī)則。 5.在菜單界面
45、單擊“開始游戲”菜單可進(jìn)入游戲界面。 6.當(dāng)在游戲過程中單擊“暫停”按鈕時(shí),便進(jìn)入暫停狀態(tài)。 7在游戲過程中隨時(shí)可以通過“換題”按鈕來更換題目。 8.當(dāng)玩家單擊“放棄”按鈕時(shí),會提示玩家是否真的需要退出游戲,然后 根據(jù)玩家的選擇進(jìn)行操作。 9.當(dāng)玩家單擊“提示”按鈕時(shí),界面上會出現(xiàn)一個(gè)紅心表示當(dāng)前可以提示 玩家輸入數(shù)字,此時(shí)再單擊空白處,便會自動填上正確答案。 10.當(dāng)玩家將界面中所有的空白全部填滿數(shù)字時(shí),系統(tǒng)會自動判斷所填寫的 數(shù)字正確與否,當(dāng)有錯(cuò)誤時(shí),會出現(xiàn)游戲失敗界面;當(dāng)全部填寫正確時(shí),會出 現(xiàn)游戲勝利界面。 11.在勝利或者失敗狀態(tài)時(shí),玩家可以通過點(diǎn)擊屏幕任意位置返回歡迎界面。 12.
46、在菜單界面單擊“退出游戲”便可退出該游戲。 3.2 游戲策劃以及準(zhǔn)備工作游戲策劃以及準(zhǔn)備工作 3.2.1歡迎界面的策劃 歡迎界面的主要實(shí)現(xiàn)的是開機(jī)動畫以及菜單選項(xiàng)的功能。在開機(jī)動畫上準(zhǔn) 備實(shí)現(xiàn)動態(tài)效果,利用圖片刷幀進(jìn)行實(shí)現(xiàn)。 在菜單界面實(shí)現(xiàn)游戲的功能選擇,菜單界面就是一張圖片,鼠標(biāo)點(diǎn)擊相應(yīng) 的區(qū)域?qū)崿F(xiàn)相應(yīng)的功能。在這里運(yùn)用到坐標(biāo)系,如下圖所示 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 15 圖3.2 菜單界面 手機(jī)屏幕分辨率是480320,所以橫縱坐標(biāo)如圖所示。 當(dāng)點(diǎn)擊的區(qū)域坐落于60welcomeView.bitmapsID.length-1) welcomeView.drawIndex = we
47、lcomeView.bitmapsID.length-10; if(welcomeView.drawIndex%5 = 0) welcomeView.drawString = !welcomeView.drawString; try Thread.sleep(sleepSpan);/睡眠 catch(Exception e) e.printStackTrace();/打印異常信息 分析該類的run() 方法,控制drawIndex的值,每次循環(huán)將歡迎界面的 drawIndex 加1,然后判斷是否到達(dá)數(shù)組的最后,當(dāng)?shù)竭_(dá)最后時(shí),將其減10,然 后繼續(xù)進(jìn)行循環(huán)。同時(shí),判斷drawIndex是否為5,
48、這樣每循環(huán)5次改變 drawString的值,從而實(shí)現(xiàn)文字的閃動效果。 4.1.4 HelpView 類和 AboutView 類的實(shí)現(xiàn) 游戲中關(guān)于游戲幫助和游戲說明,我們分別通過HelpView類和AboutView類 的實(shí)現(xiàn)。HelpView類和AboutView類都是通過onDraw()方法來繪制界面。由于這 兩個(gè)類在很大程度上是相似的,所以下面只分析HelpView類,代碼如下所示: public HelpView(KLSDActivity activity) super(activity); this.activity = activity;/得到activity的引用 surfac
49、eHolder = this.getHolder();/獲得surfaceHolder getHolder().addCallback(this);/添加Callback接口的實(shí)現(xiàn) helpBitmap = BitmapFactory.decodeResource(getResources(), 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 23 R.drawable.help); public void onDraw(Canvas canvas) /繪制方法 canvas.drawColor(Color.WHITE);/背景色 canvas.drawBitmap(helpBitmap, 0, 0, n
50、ull);/繪制圖片 public boolean onTouchEvent(MotionEvent event) /鍵盤監(jiān)聽方法 if(event.getAction() = MotionEvent.ACTION_DOWN)/屏幕被按下 double x = event.getX(); double y = event.getY();/得到坐標(biāo) if(x270 return super.onTouchEvent(event); public HelpView(KLSDActivity activity) 為“幫助”界面的構(gòu)造器,在 構(gòu)造器中先得到activity 以及surfaceHolde
51、r的引用,然后添加Callback 接口 的實(shí)現(xiàn)并對圖片資源進(jìn)行初始化。 onDraw()為重寫的繪制方法,在該方法中,首先繪制白色背景,然后將 幫助界面的背景圖片繪制到指定位置。 onTouchEvent()為重寫的鍵盤監(jiān)聽方法,當(dāng)玩家點(diǎn)擊屏幕時(shí),會調(diào)用該 方法來處理玩家的屏幕事件,在“幫助”界面中該方法實(shí)現(xiàn)比較簡單,只是判 斷玩家點(diǎn)擊的是否為返回按鈕即可。當(dāng)玩家點(diǎn)擊返回按鈕時(shí),需要向activity 發(fā)送Handler 消息通知控制器切換屏幕。 4.24.2 游戲界面相關(guān)類的實(shí)現(xiàn)游戲界面相關(guān)類的實(shí)現(xiàn) 游戲界面實(shí)現(xiàn)游戲展示,計(jì)時(shí)界面展示,以及功能按鍵。流程圖如下圖所 示: 第四章 基于 An
52、droid 平臺數(shù)獨(dú)游戲的實(shí)現(xiàn) 24 開始 生成數(shù)獨(dú) 填數(shù)區(qū)域 換題 提示 提示暫停計(jì)時(shí) 暫停填數(shù) 檢測 退出 結(jié)束 是 否 是 否 是 否 是 否 圖 4.2 游戲界面流程圖 4.2.1 游戲界面 GameView 的實(shí)現(xiàn) 首先理解下GameView的運(yùn)行思路,GameView在初始化時(shí)候讀取相關(guān)圖片信 息,包括背景圖片,數(shù)獨(dú)背景框圖片等等,在初始化同時(shí),啟動 GameViewDrawThread線程進(jìn)行刷幀,TimeThread 線程來更新界面中的時(shí)間。當(dāng) 玩家點(diǎn)擊背景框空白位置,需要繪制數(shù)字鍵盤時(shí),會啟動DrawKeyThread 線程 繪制數(shù)字鍵盤。當(dāng)玩家點(diǎn)擊按鈕時(shí)候,相關(guān)方法會被調(diào)用
53、。以上的過程都需要 KLSDActivity的參與管理。 GameView 同樣繼承自SurfaceView 類,其關(guān)鍵也是實(shí)現(xiàn)onDraw()方法。 onDraw()方法分別繪制游戲界面背景圖片,數(shù)字背景框,選題提示等等按鈕, 時(shí)間顯示區(qū)域等。DrawKey()方法實(shí)現(xiàn)了數(shù)字鍵盤的繪制,保證在點(diǎn)擊空白框時(shí) 候有圓盤數(shù)字選框出現(xiàn)。通過surfaceCreated()和surfaceDestroyed()兩 個(gè)方法負(fù)責(zé)相關(guān)線程的啟動和調(diào)用工作。 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 25 4.2.2 時(shí)間線程 TimeThread 的實(shí)現(xiàn) TimeThread線程主要用來更新界面中的時(shí)間,作為數(shù)獨(dú)
54、游戲玩家計(jì)時(shí)功能, 代碼如下: public class TimeThread extends Thread GameView gameView;/聲明GameView的引用 boolean flag=true;/循環(huán)標(biāo)志位 public TimeThread(GameView gameView)/構(gòu)造器 this.gameView=gameView;/得到GameView的引用 public void run()/重寫的run方法 while(flag) gameView.time+;/時(shí)間自加 try Thread.sleep(1000);/睡眠一秒種 catch(Exception e)
55、/捕獲異常 e.printStackTrace();/打印異常信息 TimeThread 類的實(shí)現(xiàn)比較簡單,只需每隔一秒鐘通過gameView.time自加 更改一下GameView 中表示時(shí)間的屬性即可。 public TimeThread(GameView gameView) 為時(shí)間線程的構(gòu)造器,在構(gòu)造器 中先得到GameView的引用。然后重寫run()方法,通過時(shí)間的自加,實(shí)現(xiàn)一秒鐘 功能。 4.34.3 數(shù)獨(dú)算法類的實(shí)現(xiàn)數(shù)獨(dú)算法類的實(shí)現(xiàn) 數(shù)獨(dú)算法類主要實(shí)現(xiàn)數(shù)獨(dú)的生成以及填入數(shù)字的檢測功能,流程圖如下: 第四章 基于 Android 平臺數(shù)獨(dú)游戲的實(shí)現(xiàn) 26 開始 生成數(shù)獨(dú) 填入數(shù)字
56、符合規(guī)則 游戲成功 結(jié)束 是 否 圖 4.3 WelcomeView 類功能流程圖 4.3.1 數(shù)獨(dú)算法基本邏輯 本節(jié)將對數(shù)獨(dú)算法類ShuDuSuanFa.java 進(jìn)行解釋,該類基本上是數(shù)學(xué)計(jì)算, 通過一定的算法產(chǎn)生所需要的數(shù)獨(dú)數(shù)組,通過特定的接口供其他類使用。 該類的目的是創(chuàng)建一個(gè)二維數(shù)組來表示數(shù)獨(dú)矩陣。使矩陣的每行、每列、 每塊都沒有重復(fù)的數(shù)字。算法的簡單思路是先隨機(jī)取出一個(gè)09 的數(shù)字,然后 檢查其所在的行、列、塊是否都符合要求。當(dāng)符合要求時(shí)繼續(xù)填充下一個(gè),而 當(dāng)不符合要求時(shí),再次隨機(jī)取出一個(gè)沒有取出過的數(shù)字,再判斷。當(dāng)9 個(gè)數(shù)字 都取出過后還沒有找到符合要求的數(shù)字時(shí),進(jìn)行回退處理,即
57、將最后一個(gè)取出 的符合要求的數(shù)字進(jìn)行重新取值,直到所有數(shù)字全部填充完畢。 在求解數(shù)獨(dú)時(shí)候,運(yùn)用到回溯法,將所有的解(問題的解空間)按照一定 結(jié)構(gòu)排列,再進(jìn)行搜索。一般解空間構(gòu)造成為為樹狀結(jié)構(gòu),用深度優(yōu)先的策略 搜索,一般有兩種方式: 1.只需要一個(gè)解的話,找到解即停止。 2.需要求出所有解,則需做“樹的遍歷”找到所有解。 回溯法的基本做法是搜索,或是一種組織得井井有條的,能避免不必要搜 索的窮舉式搜索法。這種方法適用于解一些組合數(shù)相當(dāng)大的問題。 南京工業(yè)大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 27 回溯法在問題的解空間樹中,按深度優(yōu)先策略,從根結(jié)點(diǎn)出發(fā)搜索解空間 樹。算法搜索至解空間樹的任意一點(diǎn)時(shí),先判斷
58、該結(jié)點(diǎn)是否包含問題的解。如 果肯定不包含,則跳過對該結(jié)點(diǎn)為根的子樹的搜索,逐層向其祖先結(jié)點(diǎn)回溯; 否則,進(jìn)入該子樹,繼續(xù)按深度優(yōu)先策略搜索。 回溯法是一種搜索算法,其基本思路是:在一個(gè)問題中,根據(jù)題意給出的 邊界條件劃定出所有可能解的范圍(稱為可能解) ,根據(jù)題意確定出約束條件。 利用程序順次在所有可能解中搜索時(shí)按照深度搜索的方式進(jìn)行。即在第一層選 定一個(gè)滿足約束條件的解,然后以該可能解為出發(fā)點(diǎn),搜索第二層的一個(gè)可能 解(試探) 。如果搜索到第二層的一個(gè)可能解,則繼續(xù)搜索第三層得一個(gè)可能解。 依次類推,直到所有層得可能解都被找到,則得到了該問題的一個(gè)完整解。如 果第二層所有的肯可能解都不滿足約
59、束條件,則返回第一層,放棄原有的可能 解,使用第一層的下一個(gè)可能解(回溯) 。一次類推,尋找第二層的一個(gè)可能解。 回溯法相對于其他窮舉的特點(diǎn)在于,不必把問題的每一層的所有可能解都 遍歷一遍,只要當(dāng)前的可能解不滿足約束條件就拋棄該解,尋求下一個(gè)可能解, 而不必求解其余的下層解。當(dāng)當(dāng)前層得所有可能解都不滿足約束條件,則回溯 到上一層,拋棄上一層的當(dāng)前可能解。 從以上分析中結(jié)合數(shù)獨(dú)問題的規(guī)則,得出數(shù)獨(dú)問題的約束條件為: 每一格的數(shù)值范圍僅限 1-9 每一格內(nèi)的數(shù)字在當(dāng)前行不允許重復(fù) 每一格內(nèi)的數(shù)字在當(dāng)前列不允許重復(fù) 每一格內(nèi)的數(shù)字在當(dāng)前小宮格內(nèi)不允許重復(fù) 由此,回溯法通過約束條件的篩選,在所有解中除掉不可能的解,從而獲 得問題的一個(gè)或者全部解。 4.3.2 檢測填充結(jié)果 根據(jù)數(shù)獨(dú)游戲的規(guī)則,玩家填充 81 個(gè)宮格之后,要滿足所有行,所有列 和所有小九宮格內(nèi)不能出現(xiàn)重復(fù)的數(shù)字,并以此為條件進(jìn)行檢測。 第四
- 溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年防凍教育安全教育班會全文PPT
- 2025年寒假安全教育班會全文PPT
- 初中2025年冬季防溺水安全教育全文PPT
- 初中臘八節(jié)2024年專題PPT
- 主播直播培訓(xùn)提升人氣的方法正確的直播方式如何留住游客
- XX地區(qū)機(jī)關(guān)工委2024年度年終黨建工作總結(jié)述職匯報(bào)
- 心肺復(fù)蘇培訓(xùn)(心臟驟停的臨床表現(xiàn)與診斷)
- 我的大學(xué)生活介紹
- XX單位2024年終專題組織生活會理論學(xué)習(xí)理論學(xué)習(xí)強(qiáng)黨性凝心聚力建新功
- 2024年XX單位個(gè)人述職述廉報(bào)告
- 一文解讀2025中央經(jīng)濟(jì)工作會議精神(使社會信心有效提振經(jīng)濟(jì)明顯回升)
- 2025職業(yè)生涯規(guī)劃報(bào)告自我評估職業(yè)探索目標(biāo)設(shè)定發(fā)展策略
- 2024年度XX縣縣委書記個(gè)人述職報(bào)告及2025年工作計(jì)劃
- 寒假計(jì)劃中學(xué)生寒假計(jì)劃安排表(規(guī)劃好寒假的每個(gè)階段)
- 中央經(jīng)濟(jì)工作會議九大看點(diǎn)學(xué)思想強(qiáng)黨性重實(shí)踐建新功