版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于Android操作系統(tǒng)的中國象棋手機(jī)游戲Chinese Chess Application based on Android Mobile OS</p><p> 指 導(dǎo) 老 師 : xxxxxxxxxxx </p><p> 姓 名 : xxxxxxxxxx </p><p> 學(xué) 號 : xxx
2、xxxxxxx </p><p> 學(xué) 院 : 軟 件 學(xué) 院 </p><p> 專 業(yè) : 軟 件 工 程 </p><p><b> 摘 要</b></p><p> cnChess是運(yùn)行在Android平臺上的一款支持雙人聯(lián)網(wǎng)對局、即時(shí)聊天、對弈記錄的休閑棋牌類手機(jī)
3、游戲。</p><p> 系統(tǒng)采用面向?qū)ο蟮木幊趟枷脒M(jìn)行構(gòu)思與分析設(shè)計(jì);使用UML構(gòu)建軟件模型;使用MVC架構(gòu)模式實(shí)現(xiàn)系統(tǒng)的整體架構(gòu)及各模塊之間的接口設(shè)計(jì);在系統(tǒng)的實(shí)踐過程中還采用了部分GoF的設(shè)計(jì)模式進(jìn)行編碼與開發(fā)。</p><p> 本文詳細(xì)系統(tǒng)地闡述了在Android平臺上,應(yīng)用MVC分層架構(gòu)模式及面向?qū)ο蟮能浖_發(fā)思想對cnChess游戲系統(tǒng)的分析、設(shè)計(jì)及實(shí)現(xiàn)過程。在項(xiàng)目的實(shí)踐
4、過程中,主要用到了以下技術(shù):手機(jī)布局主要使用了XML設(shè)計(jì),程序及其子模塊的生命周期管理用到了Activity流程控制,數(shù)據(jù)儲存方面使用的是輕量級數(shù)據(jù)庫SQLite、網(wǎng)絡(luò)通訊部分使用的是XMPP即時(shí)通訊協(xié)議進(jìn)行數(shù)據(jù)的傳輸、對弈的畫面更新使用的是手機(jī)的2D圖形編程。本論文的前半部分將簡要介紹系統(tǒng)相關(guān)的行業(yè)信息及基礎(chǔ)的技術(shù)知識,后半部分將對本人在系統(tǒng)各模塊中所使用的關(guān)鍵技術(shù)的實(shí)現(xiàn)進(jìn)行了全面的介紹。</p><p>
5、關(guān)鍵詞:聯(lián)網(wǎng)對弈;中國象棋;手機(jī)游戲 ;Android平臺</p><p><b> ABSTRACT</b></p><p> CnChess is a Chinese Chess game that running on the Android platform.It support many of the features such as playing g
6、ames through the network, real-time chat, and play chess records of casual mobile games. </p><p> The CnChess game is object-oriented programming design and analysis of the idea of thinking; build software
7、models using UML; use of MVC architecture patterns to achieve the overall system and the interface between the module designs; in practice the system also uses some of the GoF's design patterns to coding and developm
8、ent. </p><p> This paper systematically expounded in the Android platform, the application of MVC pattern and hierarchical structure of object-oriented software development thoughts cnChess game system anal
9、ysis, design and implementation process. Practice in the course of the project, mainly used in the following technologies: cell phones primarily use XML layout design, process and life cycle management sub-module uses th
10、e Activity process control, data storage areas using a lightweight database SQLite, netw</p><p> Keywords: Network of games; Chinese chess; Mobile Games; Android platform目 錄</p><p><b>
11、第1章 緒論1</b></p><p> 1.1問題的提出1</p><p> 1.2相關(guān)研究綜述1</p><p> 1.2.1 Android手機(jī)操作系統(tǒng)的發(fā)展歷程1</p><p> 1.2.2 國內(nèi)外關(guān)于Android手機(jī)應(yīng)用程序的研究及開發(fā)現(xiàn)狀2</p><p> 1.3研究
12、目標(biāo)與內(nèi)容2</p><p> 1.3.1 研究目標(biāo)2</p><p> 1.3.2 研究主要內(nèi)容2</p><p> 第2章 Android程序設(shè)計(jì)相關(guān)技術(shù)概述4</p><p> 2.1 XUL界面布局4</p><p> 2.2 Android的Activity組件4</p>
13、<p> 2.3 SQLite數(shù)據(jù)庫5</p><p> 2.4 XMPP協(xié)議5</p><p> 2.5 Android 2D圖形編程5</p><p> 2.6 MVC模式簡介5</p><p> 第3章 系統(tǒng)的分析與實(shí)現(xiàn)7</p><p><b> 3.1系統(tǒng)分析7&
14、lt;/b></p><p> 3.1.1 系統(tǒng)功能分析7</p><p> 3.1.2 系統(tǒng)流程分析8</p><p> 3.1.3 系統(tǒng)數(shù)據(jù)流分析9</p><p> 3.2 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)9</p><p> 3.2.1 系統(tǒng)E-R圖9</p><p> 3.2
15、.2 數(shù)據(jù)庫表設(shè)計(jì)10</p><p> 3.3 面向?qū)ο蟮南到y(tǒng)設(shè)計(jì)10</p><p> 3.3.1 系統(tǒng)文件組織結(jié)構(gòu)10</p><p> 3.3.1 用例的設(shè)計(jì)11</p><p> 3.3.2 類的設(shè)計(jì)12</p><p> 3.3.3 系統(tǒng)交互模式的設(shè)計(jì)12</p><
16、;p> 第4章 模塊的實(shí)現(xiàn)15</p><p> 4.1 MVC分層結(jié)構(gòu)16</p><p> 4.2 總體控制模塊17</p><p> 4.3 數(shù)據(jù)存儲模塊18</p><p> 4.4 數(shù)據(jù)傳輸模塊20</p><p> 4.5 對局模塊22</p><p>
17、 4.6 XML界面布局模塊24</p><p> 4.7 系統(tǒng)中關(guān)鍵技術(shù)的應(yīng)用及實(shí)現(xiàn)24</p><p> 4.7.1 SQLite3的應(yīng)用24</p><p> 4.7.2 XML界面設(shè)計(jì)25</p><p> 4.7.3 cnChess的2D圖像編程25</p><p> 4.7.4 對弈過
18、程中雙方棋盤上棋子的同步27</p><p> 4.7.5 XMPP數(shù)據(jù)傳輸27</p><p> 4.7.6 走棋規(guī)則的判斷28</p><p> 第5章 結(jié)束語30</p><p> 5.1 后續(xù)研究展望30</p><p><b> 參考文獻(xiàn)31</b></p&g
19、t;<p><b> 致 謝32</b></p><p><b> 第1章 緒論</b></p><p><b> 1.1問題的提出</b></p><p> 隨著3G移動(dòng)網(wǎng)絡(luò)應(yīng)用的推廣,手機(jī)游戲的規(guī)模、復(fù)雜程度日益增強(qiáng);其技術(shù)手段、設(shè)計(jì)思想、系統(tǒng)體系結(jié)構(gòu)都發(fā)生了深刻的變化。
20、手機(jī)操作系統(tǒng)正朝著高處理能力、多功能、智能化的方向發(fā)展。近年來,網(wǎng)絡(luò)文化市場發(fā)展很快,隨著互聯(lián)網(wǎng)的迅速普及、寬帶的接入社區(qū)和家庭,我國網(wǎng)絡(luò)游戲市場發(fā)展迅速并進(jìn)入了一個(gè)高速增長期,并已經(jīng)創(chuàng)造了較大的產(chǎn)值,帶動(dòng)了相關(guān)產(chǎn)業(yè)的發(fā)展。</p><p> 如今網(wǎng)絡(luò)上的提供免費(fèi)中國象棋游戲,大多數(shù)是單機(jī)版的,界面單一,功能單一。本系統(tǒng)將實(shí)現(xiàn)在網(wǎng)絡(luò)上對戰(zhàn)的中國象棋功能;還對在下棋界面美化,以及下棋中可能出現(xiàn)的意外進(jìn)行了處理。這
21、樣中國象棋休閑游戲?qū)⒉辉谑且粋€(gè)功能單一界面枯燥的游戲,而是一個(gè)較完善的休閑游戲。</p><p> 在國內(nèi)外Android手機(jī)應(yīng)用開發(fā)如火如荼、日益盛行的大背景下,本人決定開發(fā)一款界面友好、操作簡單,支持雙人聯(lián)網(wǎng)對局、數(shù)據(jù)記錄、智能規(guī)則判斷的手機(jī)休閑游戲。</p><p><b> 1.2相關(guān)研究綜述</b></p><p> 近年來,國
22、內(nèi)外的專家學(xué)者以及一線的開發(fā)人員從理論、方法、技術(shù)等不同的角度對Android手機(jī)操作系統(tǒng)進(jìn)行了一定的研究。本小節(jié)將從Android手機(jī)操作系統(tǒng)的發(fā)展歷程、研究現(xiàn)狀、程序開發(fā)設(shè)計(jì)簡介四個(gè)方面分析總結(jié)國內(nèi)外的相關(guān)研究結(jié)果。</p><p> 1.2.1 Android手機(jī)操作系統(tǒng)的發(fā)展歷程</p><p> Android是Google于2007年11月5日宣布的基于Linux平臺開源手
23、機(jī)操作系統(tǒng)名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個(gè)為移動(dòng)終端打造的真正開放和完整的移動(dòng)軟件。</p><p> 表1.1 Android手機(jī)操作系統(tǒng)的發(fā)展階段</p><p> 1.2.2 國內(nèi)外關(guān)于Android手機(jī)應(yīng)用程序的研究及開發(fā)現(xiàn)狀</p><p> Android是基于Linux內(nèi)核的軟件平臺和操作系統(tǒng),早期由Google
24、開發(fā),后由開放手機(jī)聯(lián)盟Open Handset Alliance)開發(fā)。它采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要分為三部分。低層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應(yīng)用軟件則由各公司自行開發(fā),以Java作為編寫程序的一部分。另外,為了推廣此技術(shù),Google和其它幾十個(gè)手機(jī)公司建立了開放手機(jī)聯(lián)盟。Android在未公開之前常被傳聞為Google電話或GPhone。大多傳聞?wù)J為Google
25、開發(fā)的是自己的手機(jī)電話產(chǎn)品,而不是一套軟件平臺。2010年1月,Google開始發(fā)表自家品牌手機(jī)電話的Nexus One,目前最好的是Android2.1。</p><p> 1.3研究目標(biāo)與內(nèi)容</p><p> 1.3.1 研究目標(biāo)</p><p> 本項(xiàng)目主要研究的目標(biāo)分為:程序設(shè)計(jì)思想實(shí)踐改進(jìn)目標(biāo)、Android平臺手機(jī)開發(fā)技術(shù)的研究目標(biāo)以及對XMPP
26、網(wǎng)絡(luò)傳輸協(xié)議的使用與研究目標(biāo)。</p><p> (1)運(yùn)用面向?qū)ο蟮木幊趟枷爰癛UP統(tǒng)一過程,對cnChess中國象棋手機(jī)游戲的系統(tǒng)結(jié)構(gòu)、過程、功能等要素進(jìn)行可視化的描述,為Android程序設(shè)計(jì)的可視化提供方法、技術(shù)上的支持,為系統(tǒng)的理論模型和軟件建模提供參照。</p><p> ?。?)本系統(tǒng)中使用了多種基于Android平臺的軟件開發(fā)技術(shù),根據(jù)要實(shí)現(xiàn)的系統(tǒng)功能,系統(tǒng)需要使用到的技
27、術(shù)及技術(shù)研究的目標(biāo)主要有:</p><p> 手機(jī)游戲用戶界面的人性化、個(gè)性化界面布局,給用戶以良好的游戲體驗(yàn);</p><p> 移動(dòng)設(shè)備上的圖形編程,提供流暢靚麗的游戲過程界面;</p><p> 使用文件、SQLite等數(shù)據(jù)存儲方式,提供游戲配置保存,游戲過程保存、游戲過程回放、游戲結(jié)果記錄等功能,方便用戶查看;</p><p>
28、 ?。?)使用XMPP即時(shí)通訊協(xié)議傳輸數(shù)據(jù),提供即時(shí)聊天的以及在線探測的功能,實(shí)現(xiàn)游戲的實(shí)時(shí)性。</p><p> 1.3.2 研究主要內(nèi)容</p><p> 項(xiàng)目研究的內(nèi)容主要有以下四大塊:</p><p> 第一部分是手機(jī)游戲的界面設(shè)計(jì)和背景音效的設(shè)計(jì)。和PC上的游戲開發(fā)有些許不同,手機(jī)游戲更加的注重用戶體驗(yàn),一個(gè)人性化的、時(shí)尚靚麗的游戲界面和優(yōu)美個(gè)性化的
29、音效設(shè)計(jì)是一個(gè)成功的手機(jī)游戲要達(dá)到的基本要求。</p><p> 第二部分是手機(jī)之間的通信模塊設(shè)計(jì)。3G時(shí)代,手機(jī)通信受流量的限制很大,所以必須盡可能的使用簡潔的通信協(xié)議,減少數(shù)據(jù)的流量,減少用戶的通訊資費(fèi);再者,雙人對局這樣的在線游戲,必須體現(xiàn)其即時(shí)性,在一方因?yàn)殡娫挻蛉牖蚱渌驅(qū)е掠螒驋炱鸹虻艟€時(shí),另一方能及時(shí)得知道對方的狀態(tài),以便做出處理。另外,為了增加游戲的互動(dòng)性,項(xiàng)目提供了即時(shí)聊天的功能。</
30、p><p> 第三部分是對局智能程序的設(shè)計(jì)。在沒有朋友在線的情況下,可以和設(shè)計(jì)好的AI(Artificial Intelligence)算法進(jìn)行游戲。人工智能程序設(shè)計(jì)是一項(xiàng)對算法要求很高的程序設(shè)計(jì),特別是在手機(jī)這種硬件資源緊缺的環(huán)境中,更是需要一個(gè)高效的算法來提供強(qiáng)大的AI對局支持。</p><p> 第四部分是邏輯控制模塊的設(shè)計(jì)。當(dāng)有緊急事件(如電話打入,電池沒電等)發(fā)生時(shí),需全局模塊對
31、當(dāng)前的游戲狀態(tài)進(jìn)行保存或退出等處理,并發(fā)送相關(guān)信息給對局的伙伴;用戶通過觸摸屏進(jìn)行走棋,棋子的走動(dòng)規(guī)則由軟件進(jìn)行智能規(guī)則判斷;對局結(jié)束,軟件將對對局的過程及結(jié)果使用與國際接軌的棋譜記錄格式(PGN,F(xiàn)EN)進(jìn)行記錄,在對局結(jié)束后,用戶可用軟件讀入PGN格式的對局過程文件,進(jìn)行戰(zhàn)局的回放。</p><p> 軟件采用面向?qū)ο蟮木幊趟枷脒M(jìn)行構(gòu)思設(shè)計(jì),使用UML設(shè)計(jì)軟件的模型,采用了部分GoF的設(shè)計(jì)模式進(jìn)行編碼與開發(fā)
32、。</p><p> 第2章 Android程序設(shè)計(jì)相關(guān)技術(shù)概述</p><p> Android作為一個(gè)移動(dòng)設(shè)備的平臺,其軟件層次結(jié)構(gòu)包括了一個(gè)操作系統(tǒng)(OS),中間件(MiddleWare)和應(yīng)用程序(Application)。根據(jù)Android的軟件框圖,其軟件層次結(jié)構(gòu)自下而上分為以下幾個(gè)層次:</p><p> 圖2.1 Android系統(tǒng)架構(gòu)<
33、;/p><p> 2.1 XUL界面布局</p><p> XUL 是一種基于 XML 的語言,因此需要對 XML(特別是 XML 名稱空間)很熟悉。XUL是英文“XML User Interface Language”的首字母縮寫。顧名思義,它是一種應(yīng)用XML來描述使用者界面的標(biāo)示語言。 </p><p> 2.2 Android的Activity組件</
34、p><p> Activity,一般代表手機(jī)屏幕的一屏,相當(dāng)于瀏覽器的一個(gè)頁面。在Activity中添加view,實(shí)現(xiàn)應(yīng)用界面和用戶交互。一個(gè)應(yīng)用程序一般由多個(gè)Activity構(gòu)成,這些Activity之間可互相跳轉(zhuǎn),可進(jìn)行頁面間的數(shù)據(jù)傳遞。每個(gè)Activity都有自己的生命周期。</p><p> 2.3 SQLite數(shù)據(jù)庫</p><p> 在Android平
35、臺上,集成了一個(gè)嵌入式關(guān)系型數(shù)據(jù)庫—SQLite。SQLite是支持結(jié)構(gòu)化查詢的輕量級數(shù)據(jù)庫,能很好得適應(yīng)于移動(dòng)設(shè)備的應(yīng)用。</p><p> Android提供了一個(gè)名為SQLiteDatabase的類,該類封裝了一些操作數(shù)據(jù)庫的API,使用該類可以完成對數(shù)據(jù)進(jìn)行添加(Create)、查詢(Retrieve)、更新(Update)和刪除(Delete)操作(這些操作簡稱為CRUD)。</p>&
36、lt;p> 2.4 XMPP協(xié)議</p><p><b> 什么是XMPP </b></p><p> XMPP(可擴(kuò)展消息處理現(xiàn)場協(xié)議)的前身是Jabber,一個(gè)開源形式組織產(chǎn)生的網(wǎng)絡(luò)即時(shí)通信協(xié)議。具有即時(shí)信息傳輸以及在線現(xiàn)場探測的功能。</p><p> XMPP的基本網(wǎng)絡(luò)結(jié)構(gòu)</p><p> XM
37、PP中定義了三個(gè)角色,客戶端,服務(wù)器,網(wǎng)關(guān)。通信能夠在這三者的任意兩個(gè)之間雙向發(fā)生。服務(wù)器同時(shí)承擔(dān)了客戶端信息記錄,連接管理和信息的路由功能。網(wǎng)關(guān)承擔(dān)著與異構(gòu)即時(shí)通信系統(tǒng)的互聯(lián)互通,異構(gòu)系統(tǒng)可以包括SMS(短信),MSN,ICQ等?;镜木W(wǎng)絡(luò)形式是單客戶端通過TCP/IP連接到單服務(wù)器,然后在之上傳輸XML。 </p><p> XMPP通過TCP傳輸?shù)臄?shù)據(jù)</p><p> XMPP
38、傳輸?shù)募磿r(shí)通訊指令的邏輯與以往相仿,只是協(xié)議的形式變成了XML格式的純文本。XMPP的核心部分就是一個(gè)在網(wǎng)絡(luò)上分片斷發(fā)送XML的流協(xié)議,這個(gè)流協(xié)議是XMPP的即時(shí)通訊指令的傳遞基礎(chǔ)。 </p><p> 2.5 Android 2D圖形編程 </p><p> 1、Simple Graphics in View:就是直接使用Android已經(jīng)實(shí)現(xiàn)的一些畫圖操作,比如說images,sh
39、apes,colors,pre-defined animation等等。這種方式只能畫靜態(tài)或者極為簡單的2D圖畫,對于實(shí)時(shí)性很強(qiáng)的動(dòng)畫,高品質(zhì)的游戲都是沒法實(shí)現(xiàn)的。2、Canvas:首先我們要明白這個(gè)Canvas是一個(gè)2D的概念,是在Skia中定義的。也就是說在這個(gè)方式下還是說的畫2D圖形。</p><p> 2.6 MVC模式簡介</p><p> 整個(gè)系統(tǒng)采用了MVC模式進(jìn)行設(shè)計(jì)。
40、MVC模式是一種流行的軟件設(shè)計(jì)模式,它把系統(tǒng)分為3個(gè)模塊:模型(Model)、視圖(View)和控制器(Controller)。</p><p> 各個(gè)模塊的功能說明參見表2.1</p><p> 表2.1 MVC的三個(gè)模塊</p><p> 各個(gè)模塊之間的相互作用如圖2.2所示。采用MVC模式有很多好處:一是能將顯示、邏輯和數(shù)據(jù)分開,某一方面的改變不會影響另
41、一方面;其次是可以在不更改視圖顯示的情況下,更改控制器,以達(dá)到更改視圖與用戶交互的響應(yīng)模式的目的。</p><p> 圖2.2 MVC模型圖</p><p> 第3章 系統(tǒng)的分析與實(shí)現(xiàn)</p><p> 游戲?qū)τ脩艚缑娴囊筝^高,需達(dá)到人性化:美觀大方、便于操作,個(gè)性化:游戲界面時(shí)尚靚麗、別具一格,最好能做到自定義皮膚之類的。本游戲是使用即時(shí)通訊協(xié)議進(jìn)行通信的
42、,所以,實(shí)時(shí)的游戲效果、即時(shí)聊天以及在線探測是必須做到用戶體驗(yàn)良好的。數(shù)據(jù)存儲方面,需存儲游戲的配置信息、對局的勝負(fù)信息、對局的過程信息。</p><p><b> 3.1系統(tǒng)分析</b></p><p> 本系統(tǒng)的定位是:cnChess中國象棋手機(jī)游戲是運(yùn)行在Android開源手機(jī)操作系統(tǒng)平臺上的支持雙人聯(lián)網(wǎng)對戰(zhàn)的一款手機(jī)游戲。</p><p
43、> 由于對國際國內(nèi)3G移動(dòng)應(yīng)用的前景看好,另外也對游戲開發(fā)有很大的興趣,決定開發(fā)一款基于Android手機(jī)操作系統(tǒng)的中國象棋手機(jī)游戲。</p><p> 結(jié)合當(dāng)前移動(dòng)開發(fā)的形式,初步構(gòu)想之后,定下“基于Android手機(jī)操作系統(tǒng)的中國象棋游戲應(yīng)用”應(yīng)該是這樣一款休閑游戲:以3G方式連入互聯(lián)網(wǎng);支持雙人之間的游戲互動(dòng);支持即使聊天以及在線探測;支持游戲過程記錄及回放;支持人機(jī)對戰(zhàn);游戲界面布局人性化、個(gè)性
44、化;支持緊急事件處理(如電話打入、電池沒電等)??赡艿脑?,進(jìn)行Wi-Fi編程,實(shí)現(xiàn)“局域網(wǎng)”對局。</p><p> 3.1.1 系統(tǒng)功能分析</p><p> 本系統(tǒng)的基本功能主要有三大塊:</p><p> 即時(shí)聊天:方便玩家的交流學(xué)習(xí);</p><p> 象棋對弈:游戲的聯(lián)網(wǎng)互動(dòng)以及即時(shí)性,是本程序與一般的象棋游戲的不同;<
45、;/p><p> 戰(zhàn)績統(tǒng)計(jì):用于統(tǒng)計(jì)玩家的對弈勝負(fù)情況。</p><p> 詳細(xì)的系統(tǒng)功能分析圖如圖3-1所示。</p><p> 圖3-1 cnChess系統(tǒng)功能結(jié)構(gòu)圖</p><p> 本系統(tǒng)的執(zhí)行流程較簡單,進(jìn)入系統(tǒng)后有五個(gè)選項(xiàng):聯(lián)網(wǎng)對局;XMPP設(shè)置;查看勝負(fù)情況;查看開發(fā)者信息及用戶幫助信息;退出游戲。在聯(lián)網(wǎng)對局前,XMPP連接
46、設(shè)置必須是已經(jīng)配置好的,否則無法連接jabber服務(wù)器,不能進(jìn)入對局界面。</p><p> 系統(tǒng)主要的輸入輸出及模塊間的調(diào)用情況用IPO圖表示如圖3-2:</p><p> 圖3-2 cnChess IPO圖(輸入一處理一輸出圖)</p><p> 3.1.2 系統(tǒng)流程分析</p><p> 系統(tǒng)流程分析是軟件工程圖表(例如流程圖、
47、判定表等)輔以必要的說明來表示本程序的邏輯流程。本系統(tǒng)采用XMPP協(xié)議進(jìn)行網(wǎng)絡(luò)的連接、數(shù)據(jù)的交換。站在用戶的角度來看,用戶之間的信息交流是端對端的;但是站在程序設(shè)計(jì)開發(fā)者的角度來看,數(shù)據(jù)其實(shí)是要經(jīng)過jabber服務(wù)器的。</p><p> 從設(shè)計(jì)開發(fā)者的角度描述系統(tǒng)的數(shù)據(jù)交互模式,如圖3-3。</p><p> 圖3-3 系統(tǒng)交互模式圖</p><p> 3.
48、1.3 系統(tǒng)數(shù)據(jù)流分析</p><p> cnChess手機(jī)游戲系統(tǒng)需要儲存的主要數(shù)據(jù)有XMPP網(wǎng)絡(luò)連接的配置信息以及走棋的勝負(fù)信息。系統(tǒng)的數(shù)據(jù)流圖如圖3-4所示。</p><p> 圖3-4 系統(tǒng)數(shù)據(jù)流圖</p><p> 3.2 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)</p><p> 3.2.1 系統(tǒng)E-R圖</p><p>
49、 系統(tǒng)使用SQLite輕量級數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的儲存和管理。用戶可根據(jù)自己的需要進(jìn)行XMPP網(wǎng)絡(luò)連接的配置以及勝負(fù)情況的查看和清空。系統(tǒng)的E-R圖如圖3-5所示。</p><p> 圖3-5 系統(tǒng)E-R圖</p><p> 3.2.2 數(shù)據(jù)庫表設(shè)計(jì)</p><p> 本程序采用輕量級數(shù)據(jù)庫SQLite存儲管理數(shù)據(jù),數(shù)據(jù)庫名稱為Datas.db 。</p>
50、;<p> Datas.db數(shù)據(jù)庫含有兩張表,兩張表的名稱以及字段屬性等定義如下:scoreTable(id,winning,falling,peace),對局得分表主要用來儲存對局的勝負(fù)信息;settingsTable(id,host,port,service,partnered,userID,userPWD),網(wǎng)絡(luò)連接配置表主要用來儲存XMPP網(wǎng)絡(luò)連接配置。</p><p> 3.3 面向?qū)?/p>
51、象的系統(tǒng)設(shè)計(jì)</p><p> 本系統(tǒng)使用面向?qū)ο蟮拈_發(fā)思想、UML建模方法、MVC三層架構(gòu)、GoF的部分設(shè)計(jì)模式編碼設(shè)計(jì)開發(fā),便于后續(xù)的軟件擴(kuò)展。下面將從系統(tǒng)文件組織結(jié)構(gòu),系統(tǒng)用例圖,系統(tǒng)類圖以及系統(tǒng)三個(gè)角度對系統(tǒng)進(jìn)行設(shè)計(jì)方面的說明。</p><p> 3.3.1 系統(tǒng)文件組織結(jié)構(gòu)</p><p> 一個(gè)Android程序由Android Library、s
52、rc、Referenced Libraries、res、AndroidManifest.xml組成。其中Android Library為Android系統(tǒng)類庫,src內(nèi)為程序員的代碼包,Reserenced Libraries為第三方開發(fā)包,res為程序所要用到的資源(如圖片,音視頻文檔,界面布局xml文檔等)存放的文件夾,AndroidManifest.xml為程序的主配置聲明及版本說明文件。本系統(tǒng)的簡要文件組織結(jié)構(gòu)如圖3-6所示。&
53、lt;/p><p> 圖3-6 項(xiàng)目文件組織結(jié)構(gòu)</p><p> 3.3.1 用例的設(shè)計(jì)</p><p> 系統(tǒng)的用例主要有三大類:游戲邏輯及流程控制類,走棋及聊天類,網(wǎng)絡(luò)連接類。以下為系統(tǒng)的詳細(xì)用例圖,各用例作用范圍及相互間的關(guān)系如圖3-7所示。</p><p> 圖3-7 系統(tǒng)用例圖</p><p> 3.
54、3.2 類的設(shè)計(jì)</p><p> 根據(jù)系統(tǒng)用例圖,站在類的功能角度進(jìn)行分析設(shè)計(jì),cnChess程序的類主要分以下五種:界面顯示類、邏輯及流程控制類、數(shù)據(jù)管理類、網(wǎng)絡(luò)連接類、對弈控制類。各種類的Java類主要功能說明如下:</p><p> 界面顯示類:主要用來實(shí)現(xiàn)游戲的UI界面布局以及屏幕的刷新等功能,如SettingsDialog、ViewScore、ChatDialog等類;&l
55、t;/p><p> 數(shù)據(jù)管理類:為保持?jǐn)?shù)據(jù)的安全性、完整性及一致性,所有的類必須通過數(shù)據(jù)管理類進(jìn)行數(shù)據(jù)的存取,如SettingsManager、DataManager等類;</p><p> 邏輯及流程控制類:主要負(fù)責(zé)協(xié)調(diào)各模塊之間的調(diào)用及流程的跳轉(zhuǎn),傳遞模塊之間的信息等功能,如cnChess、startGame等類;</p><p> 網(wǎng)絡(luò)連接類:用于連接網(wǎng)絡(luò),
56、對需要發(fā)送的數(shù)據(jù)進(jìn)行加密解密,發(fā)送數(shù)據(jù),狀態(tài)監(jiān)聽,數(shù)據(jù)接收等功能,如ConnectDial、ogXMPPClient等類;</p><p> 對弈控制類:主要為對弈過程中各面向?qū)ο蟮某橄竽P停策M(jìn)行必要的數(shù)據(jù)處理,如BoardView、Umpire等類。</p><p> 3.3.3 系統(tǒng)交互模式的設(shè)計(jì)</p><p> 序列圖主要用于按照交互發(fā)生的一系列順序
57、,顯示對象之間的這些交互。</p><p> 序列圖的主要用途之一,是把用例表達(dá)的需求,轉(zhuǎn)化為進(jìn)一步、更加正式層次的精細(xì)表達(dá)[10]。用例常常被細(xì)化為一個(gè)或者更多的序列圖。序列圖除了在設(shè)計(jì)新系統(tǒng)方面的用途外,它們還能用來記錄一個(gè)存在系統(tǒng)(稱它為“遺產(chǎn)”)的對象現(xiàn)在如何交互。當(dāng)把這個(gè)系統(tǒng)移交給另一個(gè)人或組織時(shí),這個(gè)文檔很有用。</p><p> 用例viewScore的順序圖簡要的說明了
58、用戶是如何與SQLite數(shù)據(jù)庫進(jìn)行交互,看到自己的戰(zhàn)績這一事件的:</p><p> 用戶按下查看戰(zhàn)績的按鈕(view score),系統(tǒng)得知這一指令,發(fā)出數(shù)據(jù)請求給SQLite管理類,數(shù)據(jù)庫管理類查詢到數(shù)據(jù)后,將數(shù)據(jù)返回給系統(tǒng)查看類,系統(tǒng)查看類將戰(zhàn)績數(shù)據(jù)顯示在手機(jī)屏幕上;</p><p> 用戶發(fā)出清除戰(zhàn)績請求,邏輯控制類將這一請求信息發(fā)送給SQLite管理類,管理類清除數(shù)據(jù)后,將結(jié)
59、構(gòu)返回給邏輯控制類,邏輯控制類發(fā)送屏幕更新指令,用戶看到屏幕顯示數(shù)據(jù)已更新。</p><p> 圖3-8 viewScore用例的順序圖</p><p> 網(wǎng)絡(luò)連接設(shè)置用例Setting的順序圖:</p><p> 用戶發(fā)出查看連接配置請求,SettingsDialog顯示類請求數(shù)據(jù)庫管理類去數(shù)據(jù)庫讀取數(shù)據(jù),數(shù)據(jù)庫管理類讀取到數(shù)據(jù)后,將數(shù)據(jù)返回給顯示類,顯示
60、類顯示用戶請求的配置信息;</p><p> 用戶輸入新的XMPP網(wǎng)絡(luò)連接配置信息,SettingsDialog顯示類請求添加或者更新網(wǎng)絡(luò)配置信息,SQLite管理類獲知更新請求后更新數(shù)據(jù)庫。</p><p> 圖3-9 Setting用例的順序圖</p><p> 游戲?qū)钟美齭tartGame涉及到相關(guān)的類較多,如圖3-10所示:</p>&
61、lt;p> 用戶按下開始游戲鍵,系統(tǒng)提示是否要聯(lián)網(wǎng)游戲,用戶確認(rèn)“是”后,系統(tǒng)讀取XMPP配置信息建立手機(jī)到服務(wù)器端的網(wǎng)絡(luò)連接;若用戶確認(rèn)“否”,則系統(tǒng)退回到游戲主界面(此時(shí)系統(tǒng)未連上互聯(lián)網(wǎng));</p><p> 用戶選擇聊天菜單,startGame進(jìn)行相應(yīng)的邏輯處理,啟動(dòng)聊天對話框;用戶輸入聊天信息,按下發(fā)送按鈕,消息發(fā)送到對方的服務(wù)器帳號,與此同時(shí),在用戶自己的聊天記錄單里面顯示;</p>
62、;<p> 用戶進(jìn)行走動(dòng)棋子或者悔棋等請求信息,startGame接收到按鍵事件或者觸摸屏事件后,將相應(yīng)的信息轉(zhuǎn)交XMPPClient進(jìn)行信息的發(fā)送;XMPPClient還負(fù)責(zé)客戶端監(jiān)聽,當(dāng)有對方有走棋等信息發(fā)送過來時(shí),XMPPClient將分辨是否為cnChess程序格式的信息并進(jìn)行解碼解包之后將信息轉(zhuǎn)交給startGame,startGame對轉(zhuǎn)交過來的信息進(jìn)行處理。</p><p> 圖3
63、-10 startGame用例的順序圖</p><p><b> 第4章 模塊的實(shí)現(xiàn)</b></p><p> 需求分析階段回答了目標(biāo)軟件系統(tǒng)“要做什么”的問題,而軟件設(shè)計(jì)階段則需要回答目標(biāo)軟件系統(tǒng)“要怎么做”以實(shí)現(xiàn)用戶需求的問題[12]。</p><p> 在cnChess手機(jī)游戲系統(tǒng)的軟件設(shè)計(jì)建模階段,主要是以需求分析階段的成果(需求
64、分析模型)作為輸入,進(jìn)行系統(tǒng)的體系結(jié)構(gòu)設(shè)計(jì)、類的詳細(xì)設(shè)計(jì)和用例實(shí)現(xiàn)設(shè)計(jì)??傮w來說,cnChess系統(tǒng)的軟件設(shè)計(jì)建模階段是對分析建模結(jié)果的進(jìn)一步精化和調(diào)整。</p><p> 圖4-1 cnChess的項(xiàng)目開發(fā)流程</p><p> 項(xiàng)目要實(shí)現(xiàn)的模塊主要有四部分。</p><p> 第一部分是手機(jī)游戲的界面設(shè)計(jì)和背景音效的設(shè)計(jì)。和PC上的游戲開發(fā)有些許不同,手機(jī)
65、游戲更加的注重用戶體驗(yàn),一個(gè)人性化的、時(shí)尚靚麗的游戲界面和優(yōu)美個(gè)性化的音效設(shè)計(jì)是一個(gè)成功的手機(jī)游戲要達(dá)到的基本要求。</p><p> 第二部分是手機(jī)之間的通信模塊設(shè)計(jì)。3G時(shí)代,手機(jī)通信受流量的限制很大,所以必須盡可能的使用簡潔的通信協(xié)議,減少數(shù)據(jù)的流量,減少用戶的通訊資費(fèi);再者,雙人對局這樣的在線游戲,必須體現(xiàn)其即時(shí)性,在一方因?yàn)殡娫挻蛉牖蚱渌驅(qū)е掠螒驋炱鸹虻艟€時(shí),另一方能及時(shí)得知道對方的狀態(tài),以便做出
66、處理。另外,為了增加游戲的互動(dòng)性,項(xiàng)目提供了即時(shí)聊天的功能。</p><p> 第三部分是對局智能程序的設(shè)計(jì)。在沒有朋友在線的情況下,可以和設(shè)計(jì)好的AI(Artificial Intelligence)算法進(jìn)行游戲。人工智能程序設(shè)計(jì)是一項(xiàng)對算法要求很高的程序設(shè)計(jì),特別是在手機(jī)這種硬件資源緊缺的環(huán)境中,更是需要一個(gè)高效的算法來提供強(qiáng)大的AI對局支持。</p><p> 第四部分是邏輯控制
67、模塊的設(shè)計(jì)。當(dāng)有緊急事件(如電話打入,電池沒電等)發(fā)生時(shí),需全局模塊對當(dāng)前的游戲狀態(tài)進(jìn)行保存或退出等處理,并發(fā)送相關(guān)信息給對局的伙伴;用戶通過觸摸屏進(jìn)行走棋,棋子的走動(dòng)規(guī)則由軟件進(jìn)行智能規(guī)則判斷;對局結(jié)束,軟件將對對局的過程及結(jié)果使用與國際接軌的棋譜記錄格式(PGN,F(xiàn)EN)進(jìn)行記錄,在對局結(jié)束后,用戶可用軟件讀入PGN格式的對局過程文件,進(jìn)行戰(zhàn)局的回放。</p><p> 軟件采用面向?qū)ο蟮木幊趟枷脒M(jìn)行構(gòu)思設(shè)
68、計(jì),使用UML設(shè)計(jì)軟件的模型,采用了部分GoF的設(shè)計(jì)模式進(jìn)行編碼與開發(fā)。</p><p> 4.1 MVC分層結(jié)構(gòu)</p><p> 在cnChess系統(tǒng)的設(shè)計(jì)建模階段,是回答如何實(shí)現(xiàn)系統(tǒng)功能的問題,主要完成軟件體系結(jié)構(gòu)設(shè)計(jì)和詳細(xì)設(shè)計(jì)兩個(gè)方面的工作。</p><p> 軟件體系結(jié)構(gòu)設(shè)計(jì)是高級設(shè)計(jì),主要包括以下步驟:</p><p>
69、(1)體系結(jié)構(gòu)的層次劃分。</p><p> ?。?)體系結(jié)構(gòu)的子系統(tǒng)劃分。</p><p> ?。?)建立三層體系結(jié)構(gòu)與類之間的映射關(guān)系。</p><p> 詳細(xì)設(shè)計(jì)中首先要詳細(xì)描述每一個(gè)類,包括類的屬性、操作、類之間的關(guān)系,同時(shí)對系統(tǒng)用例進(jìn)行設(shè)計(jì)。詳細(xì)設(shè)計(jì)包括如下內(nèi)容:</p><p> ?。?)設(shè)計(jì)實(shí)體類的屬性和操作。</p&g
70、t;<p> (2)設(shè)計(jì)邊界類的功能組成和操作。</p><p> (3)設(shè)計(jì)類之間的關(guān)系。</p><p> ?。?)構(gòu)造設(shè)計(jì)類圖模型。</p><p> ?。?)借助交互圖實(shí)現(xiàn)用例設(shè)計(jì)。</p><p> (6)數(shù)據(jù)模型的設(shè)計(jì)。</p><p> ?。?)實(shí)現(xiàn)模型的設(shè)計(jì)。</p>
71、<p> ?。?)設(shè)計(jì)建模的評審。</p><p> 本系統(tǒng)使用MVC設(shè)計(jì)模式[13]進(jìn)行體系的基礎(chǔ)架構(gòu),如圖4-2所示:</p><p> 圖4-2 cnChess的MVC三層架構(gòu)</p><p> Android應(yīng)用程序的一般架構(gòu)為:Views + Content Providers + Resource Manager + Notificati
72、on Manager + Activity Manager ,你可以選擇其中的若干項(xiàng)作為你應(yīng)用的架構(gòu)元素。</p><p> 系統(tǒng)的項(xiàng)目文件組織結(jié)構(gòu)如圖4-3所示,其中:</p><p> 源代碼包中的View類和Dialog類以及res資源文件夾中的所有XML文件,充當(dāng)視圖的角色,負(fù)責(zé)手機(jī)界面的顯示和與用戶的交互;cnChess,startGame兩個(gè)類充當(dāng)“C”的角色,重要控制程序
73、界面的切換和信息的分發(fā);BoardView,Umpire,XMPPClient分別是棋盤類、裁判類、信息收發(fā)類,充當(dāng)模型的角色,分別負(fù)責(zé)棋盤模型的顯示與更新、裁判對象模型的建立、即時(shí)信息通信模型的建立; DataManager,SettingsManager兩個(gè)類負(fù)責(zé)與SQLite數(shù)據(jù)庫的溝通,分別負(fù)責(zé)戰(zhàn)績勝負(fù)次數(shù)、XMPP聯(lián)接設(shè)置的數(shù)據(jù)存取。</p><p> 圖4-3 cnChess的文件組織結(jié)構(gòu)</
74、p><p> 4.2 總體控制模塊</p><p> 軟件體系結(jié)構(gòu)是軟件在設(shè)計(jì)構(gòu)成上基本的、可供設(shè)計(jì)選擇的形態(tài)和總體結(jié)構(gòu),本質(zhì)上,它是對軟件需求的一種抽象解決方案。在引入了體系結(jié)構(gòu)的軟件開發(fā)之后,cnChess中國象棋手機(jī)游戲系統(tǒng)的構(gòu)造過程變?yōu)椤皢栴}定義—軟件需求—軟件體系結(jié)構(gòu)設(shè)計(jì)—軟件詳細(xì)設(shè)計(jì)—軟件實(shí)現(xiàn)”。本系統(tǒng)的總體控制模塊主要有cnChess以及startGame。</p>
75、;<p> cnChess:用于控制各子模塊(Activity)的啟動(dòng)、休眠以及消亡;例如,當(dāng)用戶按下“開始游戲”按鈕時(shí),startGame內(nèi)置的監(jiān)聽器startGame.setOnClickListener將獲取onClick事件并調(diào)用showStartGame()函數(shù),啟動(dòng)對弈相關(guān)的模塊。</p><p> startGame屬于對局子模塊,用于協(xié)調(diào)對局過程中對各中系統(tǒng)信息進(jìn)行邏輯判斷、消
76、息分發(fā),控制、調(diào)用、協(xié)調(diào)各二級子模塊的運(yùn)行。</p><p> 依據(jù)上一階段中UML設(shè)計(jì)出來的模型及相關(guān)的文檔,對系統(tǒng)的各類進(jìn)行細(xì)化后,得出系統(tǒng)各模塊的類以及各類之間的相互關(guān)聯(lián)關(guān)系。</p><p> 下面將詳細(xì)介紹各類模塊作用以及類之間的相互關(guān)聯(lián)性。</p><p> 關(guān)于總體流程控制類cnChess,如圖4-4所示,各類相關(guān)作用簡介如下:</p>
77、;<p> 負(fù)責(zé)啟動(dòng)游戲,控制協(xié)調(diào)各模塊的運(yùn)行;startGame:負(fù)責(zé)啟動(dòng)對局模塊以及對局時(shí)候各對局子模塊的相互協(xié)調(diào);SettingsDialog:負(fù)責(zé)游戲網(wǎng)絡(luò)配置的UI顯示以及數(shù)據(jù)獲取、數(shù)據(jù)儲存等;ViewScore:負(fù)責(zé)游戲勝負(fù)戰(zhàn)績的UI顯示以及管理功能;companyInfo:負(fù)責(zé)游戲開發(fā)商信息的顯示以及用戶幫助文檔的UI顯示;ExitGameDialog:負(fù)責(zé)結(jié)束游戲相關(guān)進(jìn)程、線程,保存相關(guān)游戲數(shù)據(jù),安全退出游
78、戲。</p><p> 圖4-4 總體控制類及相關(guān)類的聯(lián)系圖圖 4-5 對弈流程控制模塊與網(wǎng)絡(luò)通信模塊聯(lián)系圖</p><p> 關(guān)于對弈流程控制類startGame與通信模塊的組織聯(lián)系圖,如圖4-5所示。對弈流程控制主要作用為協(xié)調(diào)各對弈子模塊的通信與調(diào)用。與對弈流程控制有關(guān)的模塊有網(wǎng)絡(luò)連接部分中建立連接以及數(shù)據(jù)發(fā)送接收的類,負(fù)責(zé)數(shù)據(jù)存取的Manager類,用于聊天的chatDi
79、alog窗體類,走棋、棋盤同步更新模塊的類、請求回復(fù)窗體類等。</p><p> 4.3 數(shù)據(jù)存儲模塊</p><p> 數(shù)據(jù)存儲模塊有四個(gè)類,分為儲存控制類和界面信息顯示兩種,說明如下:類SettingsDialog、viewScore用來做用戶UI界面輸入設(shè)置等信息的獲取和查看、清除對局勝負(fù)情況;類DataManager與SettingsManager是數(shù)據(jù)管理類。</p&g
80、t;<p> 下面就DataManager()函數(shù)簡要介紹一個(gè)數(shù)據(jù)管理類是怎樣實(shí)現(xiàn)的:</p><p> 變量設(shè)置:管理類中有屬性為private的變量,存取都必須通過函數(shù)內(nèi)置的get、set函數(shù)進(jìn)行;</p><p> 判斷表是否存在:管理數(shù)據(jù),必須先是有你需要管理的表,isScoreTable()函數(shù)通過系統(tǒng)API中的query()函數(shù)對系統(tǒng)表sysobject進(jìn)行
81、查詢,若系統(tǒng)表中沒有所要查找的對象,則需建立scoreTable表;</p><p> 表的創(chuàng)建與刪除、記錄的添刪修:數(shù)據(jù)的存取都是通過系統(tǒng)API接口中的execSQL()函數(shù)來完成的,例如:當(dāng)需要?jiǎng)h除scoreTable這張表,語句為db.execSQL(sql),db為所要操作的數(shù)據(jù)庫的句柄,sql為所要執(zhí)行的語句。</p><p> Manager的這兩個(gè)類有些類似JavaBea
82、n,是為了保證數(shù)據(jù)的安全、完整、一致,其他類必須通過數(shù)據(jù)庫Manager類才能與SQLite數(shù)據(jù)庫進(jìn)行溝通,完成對數(shù)據(jù)的操作。</p><p> 實(shí)踐編程難點(diǎn)在類Umpire、Manager,由分析設(shè)計(jì)的結(jié)果生成各模塊的詳細(xì)編碼單元以及各類的模型。Umpire是裁判員類,主要用于判斷棋子走動(dòng)是否規(guī)則、對弈的勝負(fù)結(jié)果。系統(tǒng)源碼包中,帶Manager后綴的都是屬于數(shù)據(jù)管理相關(guān)類。Manager類主要調(diào)用系統(tǒng)API如
83、android.database. * 或者android.database.sqlite. * 進(jìn)行數(shù)據(jù)的存取。如圖4-6所示,各類作用相關(guān)作用如下:</p><p> 圖4-6 查看戰(zhàn)績、連接設(shè)置以及走棋模塊的類圖</p><p> 本程序采用輕量級數(shù)據(jù)庫SQLite[3]存儲管理數(shù)據(jù),數(shù)據(jù)庫名稱為Datas.db 。</p><p> Datas.db數(shù)
84、據(jù)庫含有兩張表,scoreTable表用來儲存對局的勝負(fù)信息,settingsTable用來儲存XMPP網(wǎng)絡(luò)連接配置。</p><p> 表4-1 scoreTable存儲對局的勝負(fù)信息:</p><p> 表4-2 settingsTable存儲XMPP的連接設(shè)置:</p><p> 4.4 數(shù)據(jù)傳輸模塊</p><p> 數(shù)據(jù)傳輸
85、模塊有兩個(gè)類,很多算法及技術(shù)難點(diǎn)都需要用到第三方開發(fā)包smack.jar中的XMPP組件及其API完成[9],模塊說明如下:</p><p> ConnectDialog用來連接或者斷開XMPP網(wǎng)絡(luò)連接,當(dāng)連接上服務(wù)器后,啟動(dòng)對局模塊,進(jìn)行游戲;</p><p> XMPPClite接受startGame模塊轉(zhuǎn)交過來的數(shù)據(jù),在信息分類、格式化、加密后,發(fā)送給網(wǎng)絡(luò)中的jabber服務(wù)器;
86、同時(shí),監(jiān)聽服務(wù)器發(fā)送過來的cnChess格式化數(shù)據(jù),解密、解包分類后轉(zhuǎn)交給startGame模塊;另外,也監(jiān)聽對手的在線狀態(tài)等信息,以便在發(fā)生突發(fā)情況時(shí)進(jìn)行相應(yīng)的處理,從而真正的達(dá)到即時(shí)游戲的效果。</p><p> 系統(tǒng)在進(jìn)行聯(lián)網(wǎng)對局前,必須對網(wǎng)絡(luò)連接進(jìn)行有效的配置。游戲的網(wǎng)絡(luò)連接配置UI界面以及各配置項(xiàng)的說明如圖4-7及表4-3所示,配置信息的數(shù)據(jù)存儲流程圖如圖4-7所示。</p><p
87、> 圖4-7 SettingsDialog對話框輸入項(xiàng)</p><p> 游戲連接配置對話框各輸入項(xiàng)的詳細(xì)定義如表4-3所列。</p><p> 表4-3 XMPP設(shè)置界面各項(xiàng)目詳細(xì)定義</p><p> 系統(tǒng)使用SQLite數(shù)據(jù)庫,若無游戲配置信息或者配置信息無效,系統(tǒng)將提示進(jìn)行正確的網(wǎng)絡(luò)連接配置,并對正確的配置進(jìn)行存儲。配置信息的存儲數(shù)據(jù)流程圖如圖
88、4-8所示。</p><p> 圖4-8 XMPP網(wǎng)絡(luò)連接設(shè)置數(shù)據(jù)流程圖</p><p> 為保證用戶手機(jī)之間數(shù)據(jù)傳輸中各類數(shù)據(jù)的區(qū)分,系統(tǒng)在數(shù)據(jù)發(fā)送前需對各類數(shù)據(jù)信息進(jìn)行一定的格式化,待數(shù)據(jù)信息到達(dá)對方的手機(jī)后,系統(tǒng)再進(jìn)行相應(yīng)的解包。另外,為保證數(shù)據(jù)在網(wǎng)絡(luò)間傳輸?shù)陌踩裕谑謾C(jī)發(fā)送信息至互聯(lián)網(wǎng)這一段使用了smack.jar類庫中的加密函數(shù)。</p><p>
89、 圖4-9 Chat聊天模塊數(shù)據(jù)流程圖</p><p><b> 4.5 對局模塊</b></p><p> 對局模塊是本系統(tǒng)設(shè)計(jì)編碼中較復(fù)雜,內(nèi)容比較多的一個(gè)模塊。主要有以下子模塊:</p><p> startGame:用來啟動(dòng)對局、網(wǎng)絡(luò)連接以及對各局子模塊進(jìn)行協(xié)調(diào);</p><p> Umpire:裁判類,
90、定義走棋規(guī)則,用來控制走棋的順序以及對弈雙方的同步,判定對局的勝負(fù);</p><p> AnswerDialog:回話類,回答對方的對局請求等信息;</p><p> ChatDialog:對話聊天類,走棋的過程中,用來啟動(dòng)對話框以和對方進(jìn)行即時(shí)聊天;</p><p> RestorePoint:用來記錄游戲過程中的一定走棋記錄,創(chuàng)建還原點(diǎn),以方便悔棋時(shí),棋盤
91、上棋子的回滾;</p><p> companyInfo:用來顯示開發(fā)商信息以及用戶幫助信息的UI類;</p><p> ErrorDialog:用來顯示游戲過程中出現(xiàn)的錯(cuò)誤信息;</p><p> ExitGameDialog:用來結(jié)束游戲進(jìn)程,包括游戲相關(guān)的各線程 ;</p><p> smack.jar:第三方開發(fā)包,提供XMP
92、P服務(wù)接口,數(shù)據(jù)加密等功能。</p><p> 對局模塊主要處理的是用戶之間對弈的過程同步、規(guī)則控制等信息。</p><p> 用戶走棋,產(chǎn)生走棋信息,系統(tǒng)捕獲到按鍵事件或者觸摸屏事件后,會進(jìn)行數(shù)據(jù)的分類以及格式化,然后加密發(fā)送到對手的手機(jī)中。</p><p> 在接收到對手發(fā)來的走棋信息時(shí),系統(tǒng)則先通過smack.jar類庫進(jìn)行解密,然后解包,進(jìn)行走棋信息的
93、邏輯處理,最后通過界面顯示類呈現(xiàn)于用戶的手機(jī)屏幕。</p><p> 圖4-10 走棋模塊數(shù)據(jù)流程圖</p><p> 對弈過程中,可打開聊天框與對手進(jìn)行即時(shí)聊天。聊天框如圖4-11所示。對局的棋盤界面以及菜單的設(shè)置顯示如圖4-12所示。</p><p> 圖4-11 chatDialog對話框輸入項(xiàng) 圖4-12 startGame對弈界面</
94、p><p> 4.6 XML界面布局模塊</p><p> cnChess系統(tǒng)使用XML進(jìn)行游戲界面的基礎(chǔ)布局[1],主要有以下布局界面,各界面的布局內(nèi)容以及與各Java類的映射關(guān)系為:</p><p> answerdialogbox.xml:回復(fù)對話框的界面布局;</p><p> chatdialogbox.xml:聊天對話框的界面
95、布局;</p><p> companyinfo.xml:顯示開發(fā)商信息以及用戶幫助文件;</p><p> errordialog.xml:錯(cuò)誤信息提示框布局;</p><p> exitgame.xml:退出游戲提示框;</p><p> main.xml:游戲主界面布局;</p><p> settin
96、gs.xml:游戲XMPP連接配置界面布局;</p><p> startgame.xml:游戲?qū)纸缑娌季郑?lt;/p><p> sure_connect.xml:確認(rèn)進(jìn)行網(wǎng)絡(luò)連接對話框布局;</p><p> toconfirm.xml:確認(rèn)回復(fù)對方請求的對話框布局;</p><p> viewscore.xml:查看戰(zhàn)績界面布局。
97、</p><p> 圖4-13為res文件夾下layout(界面布局資源)的文件組織結(jié)構(gòu)。</p><p> 圖4-13 XML界面布局文件</p><p> 4.7 系統(tǒng)中關(guān)鍵技術(shù)的應(yīng)用及實(shí)現(xiàn)</p><p> 4.7.1 SQLite3的應(yīng)用</p><p> SQLite是集成在Android平臺上的嵌
98、入式關(guān)系型數(shù)據(jù)庫。它是一個(gè)支持結(jié)構(gòu)化存儲、查詢輕量級開源數(shù)據(jù)庫。SQLite3支持的數(shù)據(jù)類型有NULL、INTEGER、REAL(浮點(diǎn)數(shù)字)、TEXT(字符串文本)和BLOB(二進(jìn)制對象)數(shù)據(jù)類型,雖然它支持的類型雖然只有五種,但實(shí)際上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等數(shù)據(jù)類型,只不過在運(yùn)算或保存時(shí)會轉(zhuǎn)成對應(yīng)的五種數(shù)據(jù)類型。</p><p> 在Android系
99、統(tǒng),為我們提供了一個(gè)名為SQLiteOpenHelper的類,該類用于對數(shù)據(jù)庫版本進(jìn)行管理,該類是一個(gè)抽象類,必須繼承它才能使用。</p><p> 為了實(shí)現(xiàn)對數(shù)據(jù)庫版本進(jìn)行管理,SQLiteOpenHelper類有兩種重要的方法,分別是onCreate(SQLiteDatabasedb)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。
100、</p><p> 在項(xiàng)目的實(shí)現(xiàn)過程中:DataManager.java和SettingsManager.java兩個(gè)類都是通過調(diào)用Android的SQLiteOpenHelper類對SQLite數(shù)據(jù)庫進(jìn)行數(shù)據(jù)庫以及其中的數(shù)據(jù)進(jìn)行創(chuàng)建、修改和刪除。</p><p> 4.7.2 XML界面設(shè)計(jì)</p><p> 在本系統(tǒng)的軟件設(shè)計(jì)開發(fā)過程中,xml的布局是最先
101、開始的。</p><p> Android的界面[1],需要寫在res/layout的xml里面,一般情況下一個(gè)xml對應(yīng)一個(gè)界面。做android的界面有點(diǎn)像寫html(連注釋代碼的方式都一樣),要先給android定框架,然后再在框架里面放控件,android提供了幾種框架,AbsoluteLayout,LinearLayout,RelativeLayout,TableLayout,FrameLayout,
102、FrameLayout:里面只可以有一個(gè)控件,并且不能設(shè)計(jì)這個(gè)控件的位置,控件會放到左上角</p><p> LinearLayout:里面可以放多個(gè)控件,但是一行只能放一個(gè)控件</p><p> TableLayout:這個(gè)要和TableRow配合使用,很像html里面的table</p><p> AbsoluteLayout:里面可以放多個(gè)控件,并且可以
103、自己定義控件的x,y的位置</p><p> RelativeLayout:里面可以放多個(gè)控件,不過控件的位置都是相對位置(界面的布局好像還可以直接引用一些view,如ScrollView等)框架的xml</p><p><b> 如下:</b></p><p> android:id="@+id/widget36"&
104、lt;/p><p> android:layout_width="fill_parent"</p><p> android:layout_height="fill_parent"</p><p> 上面代碼中以android:開頭,表示控件的屬性,fill_parent是系統(tǒng)自帶參數(shù),表示最大的寬或高,還有一個(gè)wrap_c
105、ontent,表示剛好合適的寬或高。除了上面的三個(gè)屬性外,還有一些其他的屬性,如android:background=“#FF0000FF”,設(shè)置框架的背景色,androidrientation=“vertical”用來設(shè)置這個(gè)框架里面的走向?qū)傩浴?lt;/p><p> 框架弄好,就可以在里面添加控件了,控件的基本寫法也和框架一樣,后面用到的時(shí)候?qū)⒕唧w研究各個(gè)控件的細(xì)節(jié)。</p><p>
106、 4.7.3 cnChess的2D圖像編程</p><p> 本系統(tǒng)的2D圖像編程主要用于對局模塊中棋盤、棋子、選擇框、提示信息等圖像元素的更新。</p><p> SGL編程是本系統(tǒng)設(shè)計(jì)中的難點(diǎn),在系統(tǒng)的開發(fā)過程中主要使用了Android系統(tǒng)類庫中的2D圖形庫接口[2],達(dá)到了預(yù)期的效果,實(shí)現(xiàn)了項(xiàng)目的目標(biāo)。</p><p> 通過使用Android提供的2D
107、畫圖API,程序員能一筆一劃或者使用Graphic來畫所需要的東西了,要畫什么要顯示什么都完全可控。這種方式根據(jù)環(huán)境還分為兩種:一種就是使用普通View的canvas畫圖,還有一種就是使用專門的SurfaceView的canvas來畫圖。兩種的主要是區(qū)別就是可以在SurfaceView中定義一個(gè)專門的線程來完成畫圖工作,應(yīng)用程序不需要等待View的刷圖,提高性能。前面一種適合處理量比較小,幀率比較小的動(dòng)畫,比如說象棋游戲之類的;而后一種
108、主要用在游戲,高品質(zhì)動(dòng)畫方面的畫圖。</p><p> 本系統(tǒng)使用的是前一種圖像處理方式,系統(tǒng)棋盤棋子以及對局信息的繪制、棋盤的顯示更新等圖像處理部分主要使用了系統(tǒng)API中的android.graphics.* 類庫進(jìn)行處理。</p><p> 在本項(xiàng)目中,BoardView類主要是做棋盤模型的構(gòu)建、更行以及圖像方面的處理工作。下面簡要介紹下在本項(xiàng)目的開發(fā)中,是如何構(gòu)建棋盤模型以及如何
109、實(shí)現(xiàn)棋盤圖形的重繪。</p><p> 模型構(gòu)建:棋盤的模型實(shí)際上是一個(gè)int[10][9]的二維數(shù)組,二維數(shù)組中每一個(gè)數(shù)值代表棋盤上相應(yīng)十行九列交叉點(diǎn)上的棋子代碼。象棋一共32個(gè)棋子,每個(gè)棋子的代碼從1至32不等,棋盤網(wǎng)格線上沒有棋子的交叉點(diǎn)代碼為0。對弈模塊初次啟動(dòng)或者對弈完一局后,將進(jìn)行棋盤的數(shù)學(xué)模型以及手機(jī)屏幕上棋盤、棋子的初始化,初始化后的棋盤數(shù)學(xué)模型如圖4-14所示。</p><
110、p> 圖4-14 棋盤數(shù)學(xué)模型</p><p> 當(dāng)棋子走動(dòng)時(shí),棋盤的數(shù)學(xué)模型里的各項(xiàng)數(shù)據(jù)隨之更新,模型里面的數(shù)據(jù)每一次的更新,都將使函數(shù)調(diào)用系統(tǒng)2D函數(shù)庫中的invalidate()方法,此方法通知系統(tǒng)屏幕已過期無效,需重新取數(shù)據(jù)繪制屏幕。系統(tǒng)取更新后的棋盤模型中的數(shù)據(jù),并調(diào)用相關(guān)方法把棋盤重新繪制出來。</p><p> 棋盤、棋子的重繪:本游戲使用到的Android平臺的
111、系統(tǒng)2D函數(shù)庫中的drawLine()、drawCircle()、drawText()三種線條繪制、填充方法。</p><p> 一個(gè)棋盤數(shù)學(xué)模型的圖像繪制過程是這樣的:設(shè)置桌布底色、在桌布上繪制黑色十行九列的橫線和縱線以及棋盤邊框、在四個(gè)炮的初始點(diǎn)繪制十字架以及“楚河漢界”字樣、根據(jù)棋盤數(shù)學(xué)模型在棋盤上相應(yīng)位置繪制棋子圓圈并填充黑色或者紅色、根據(jù)棋盤數(shù)學(xué)模型中棋子的代碼繪制出棋子上相應(yīng)的中文文字、根據(jù)觸摸屏返
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文--基于android操作系統(tǒng)的飛機(jī)大戰(zhàn)手機(jī)游戲
- 基于android操作系統(tǒng)的足球小將手機(jī)游戲畢業(yè)論文
- 基于android操作系統(tǒng)的飛機(jī)大戰(zhàn)手機(jī)游戲畢業(yè)論文(設(shè)計(jì))
- 畢業(yè)論文-- 基于java的手機(jī)游戲《中國象棋》的設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文---基于java的中國象棋游戲設(shè)計(jì)
- 基于qt的中國象棋-畢業(yè)論文
- 基于android的中國象棋畢業(yè)設(shè)計(jì)
- java中國象棋對弈系統(tǒng)畢業(yè)論文
- java中國象棋對弈系統(tǒng)畢業(yè)論文
- java中國象棋對弈系統(tǒng)畢業(yè)論文
- 基于android操作系統(tǒng)的足球小將手機(jī)游戲
- android操作系統(tǒng)畢業(yè)論文
- 中國象棋游戲博弈算法的研究與實(shí)現(xiàn)-畢業(yè)論文
- 畢業(yè)論文 ios系統(tǒng)手機(jī)app象棋游戲
- 基于android平臺中國象棋對戰(zhàn)游戲本科設(shè)計(jì)
- 基于android技術(shù)的中國象棋人機(jī)對弈游戲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)論文
- 基于android平臺中國象棋對戰(zhàn)游戲本科設(shè)計(jì)
- 中國象棋游戲設(shè)計(jì)
- 基于android平臺的中國象棋人人對弈的游戲軟件畢業(yè)設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)(論文)中國象棋對弈系統(tǒng)
評論
0/150
提交評論