畢業(yè)論文---基于j2me手機(jī)華容道游戲的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
已閱讀1頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  基于J2ME手機(jī)華容道游戲的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  The design and implementation of a Mobile Game Named HuaRongDao based on J2ME</p><p>  畢業(yè)設(shè)計(jì)(論文)任務(wù)書(shū)</p><p> 畢業(yè)設(shè)計(jì)(論文)題目:</p><p> 基

2、于J2ME手機(jī)華容道游戲的設(shè)計(jì)與實(shí)現(xiàn)</p><p> 設(shè)計(jì)(論文)的基本內(nèi)容: 隨著手機(jī)硬件設(shè)備性能的提高,基于J2ME的手機(jī)游戲開(kāi)發(fā)前景看好。華容道游戲的內(nèi)容是將游戲主屏幕劃分為幾個(gè)格子,曹操占據(jù)其中一個(gè)較大的格子,然后被其他的格子包圍,這些格子形狀可以不相同,但是擋住了曹操移動(dòng)的方向。游戲者需要挪動(dòng)這些格子最終把曹操移動(dòng)到一個(gè)指定的位置才算是過(guò)關(guān)。本課題要求開(kāi)發(fā)完成基于J2ME的手機(jī)華容道游戲的程序,所使用

3、的開(kāi)發(fā)軟件是JDK1.6,Eclipse6.5,EclipseMe1.7.9和WTK2.5.2。</p><p> 畢業(yè)設(shè)計(jì)(論文)專題部分:題目:                                 設(shè)計(jì)或論文專題的基本內(nèi)容:</p><p> 學(xué)生接受畢業(yè)設(shè)計(jì)(論文)題目日期第 1 周指導(dǎo)教師簽字:2009年 12 月 3 日</p><p>  基

4、于J2ME手機(jī)華容道游戲的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  摘 要</b></p><p>  隨著新技術(shù)的發(fā)展和人們生活水平的提高,手機(jī)開(kāi)始逐漸普及,手機(jī)以其小巧便捷,方便的特性成為人們的必備通訊工具。而手機(jī)的功能也越來(lái)越多,越來(lái)越強(qiáng)大。其中手機(jī)游戲也遠(yuǎn)遠(yuǎn)不是我們印象中的什么“俄羅斯方塊”、“貪吃蛇”之類(lèi)畫(huà)面簡(jiǎn)陋,規(guī)則簡(jiǎn)單的游戲,進(jìn)而發(fā)展到了可以和掌上游戲機(jī)

5、媲美,具有很強(qiáng)的娛樂(lè)性和交互性的復(fù)雜形態(tài)了。</p><p>  隨著手機(jī)硬件設(shè)備性能的提高,基于J2ME(Java 2 Micro Editon)的手機(jī)游戲開(kāi)發(fā)前景看好。而基于手機(jī)平臺(tái)的手機(jī)游戲也就擁有了巨大的市場(chǎng)空間,隨著3g的開(kāi)通和應(yīng)用,手機(jī)游戲必將迎來(lái)新的一輪游戲熱潮?;贘2ME的手機(jī)華容道游戲的實(shí)現(xiàn),把華容道這個(gè)游戲從游戲機(jī)上移植到手機(jī)上面,方便了人們平時(shí)的娛樂(lè),可以隨時(shí)隨地的進(jìn)行游戲。</p&

6、gt;<p>  課題主要研究基于J2ME手機(jī)華容道游戲的設(shè)計(jì)與實(shí)現(xiàn),從而把華容道這款游戲從游戲機(jī)上移植到手機(jī)上面,方便人們平時(shí)的娛樂(lè),也證明了基于J2ME的手機(jī)游戲開(kāi)發(fā)前景被看好。論文首先對(duì)華容道游戲進(jìn)行了需求分析,然后是相應(yīng)的詳細(xì)系統(tǒng)設(shè)計(jì),接著是系統(tǒng)的實(shí)現(xiàn)和測(cè)試。最終在Eclipse環(huán)境中,應(yīng)用Java作為開(kāi)發(fā)語(yǔ)言,實(shí)現(xiàn)了手機(jī)華容道游戲應(yīng)用,該游戲能在WTK模擬器下正常運(yùn)行。</p><p> 

7、 關(guān)鍵詞:J2ME技術(shù),手機(jī)游戲,華容道</p><p>  The design and implementation of a Mobile Game Named HuaRongDao based on J2ME</p><p><b>  Abstract </b></p><p>  With the development of ne

8、w technologies and improvement of living standard, the phone began to spread, compact phone with its convenient, convenient features become essential communication tool. The phone features are also more and more and more

9、 powerful.Which mobile games are far from what our impression of the "Tetris," "Snake," like picture simple, simple game rules, and to develop and handheld games to be comparable to, and highly entert

10、aining and form a complex interaction.</p><p>  With the improved performance of handset hardware, based on J2ME (Java 2 Micro Editon) mobile game development prospect. The mobile phone platform based mobile

11、 games also have a huge market space, and application along with the opening of 3g, mobile phone game will usher in a new round of games boom. J2ME mobile phone game based on the realization of Huarong, the Huarong game

12、consoles to cell phones from the top, easy for people to usual entertainment, anytime, anywhere in the game.</p><p>  Main research topics based on J2ME mobile phone game Hua Rong Dao design and implementati

13、on to the Huarong game consoles to cell phones from the top, easy for people to usual entertainment also proved J2ME-based mobile game development prospects are promising. Firstly the game on the Huarong needs analysis,

14、then the corresponding detailed system design, followed by system implementation and testing. Eventually the Eclipse environment, application of Java as a development language, to achieve a m</p><p>  Key wo

15、rds: J2ME, mobile phone game, HuaRongDao</p><p><b>  目 錄</b></p><p>  畢業(yè)設(shè)計(jì)(論文)任務(wù)書(shū)I</p><p><b>  摘 要II</b></p><p>  AbstractIII</p>&l

16、t;p>  第1章 緒 論1</p><p>  1.1課題背景及研究意義1</p><p>  1.2主要研究?jī)?nèi)容1</p><p>  1.3 論文結(jié)構(gòu)2</p><p>  第2章關(guān)鍵技術(shù)介紹1</p><p>  2.1 J2ME介紹1</p><p>  2.2

17、JDK介紹2</p><p>  2.3 Eclipse集成開(kāi)發(fā)環(huán)境介紹2</p><p>  2.4 EclipseMe3</p><p>  2.5 WTK介紹3</p><p>  第3章 需求分析4</p><p>  3.1 游戲規(guī)則與操作4</p><p>  3.2 游

18、戲畫(huà)面和按鍵4</p><p>  3.3 游戲開(kāi)發(fā)環(huán)境5</p><p>  第4章 系統(tǒng)設(shè)計(jì)1</p><p>  4.1 系統(tǒng)結(jié)構(gòu)1</p><p>  4.2 Image類(lèi)的功能與實(shí)現(xiàn)1</p><p>  4.3 Draw類(lèi)功能與實(shí)現(xiàn)4</p><p>  4.4 Map類(lèi)

19、6</p><p>  4.5 HrdDisplayable類(lèi)8</p><p>  4.6 HrdMIDlet類(lèi)的功能與實(shí)現(xiàn)19</p><p>  4.7函數(shù)的實(shí)現(xiàn)20</p><p>  第5章 系統(tǒng)實(shí)現(xiàn)21</p><p>  5.1手機(jī)華容道游戲的運(yùn)行界面21</p><p&g

20、t;  5.2系統(tǒng)文檔結(jié)構(gòu)23</p><p>  第6章 系統(tǒng)測(cè)試24</p><p>  6.1測(cè)試環(huán)境24</p><p>  6.2 測(cè)試?yán)碚?4</p><p>  6.3 測(cè)試內(nèi)容24</p><p>  6.4 測(cè)試結(jié)果24</p><p><b>  第7

21、章 結(jié)論25</b></p><p><b>  參考文獻(xiàn)26</b></p><p><b>  致 謝28</b></p><p><b>  第1章 緒 論</b></p><p>  1.1課題背景及研究意義</p><p>

22、;  隨著新技術(shù)的發(fā)展和人們生活水平的提高,手機(jī)開(kāi)始逐漸普及,手機(jī)以其小巧便捷,方便的特性成為人們的必備通訊工具。而手機(jī)的功能也越來(lái)越多,越來(lái)越強(qiáng)大。其中手機(jī)游戲也遠(yuǎn)遠(yuǎn)不是我們印象中的什么“俄羅斯方塊”、“貪吃蛇”之類(lèi)畫(huà)面簡(jiǎn)陋,規(guī)則簡(jiǎn)單的游戲,進(jìn)而發(fā)展到了可以和掌上游戲機(jī)媲美,具有很強(qiáng)的娛樂(lè)性和交互性的復(fù)雜形態(tài)了。隨著手機(jī)硬件設(shè)備性能的提高,基于J2ME(Java 2 Micro Editon)的手機(jī)游戲開(kāi)發(fā)前景看好。而基于手機(jī)平臺(tái)的手

23、機(jī)游戲也就擁有了巨大的市場(chǎng)空間,隨著3g的開(kāi)通和應(yīng)用,手機(jī)游戲必將迎來(lái)新的一輪游戲熱潮?;贘2ME的手機(jī)華容道游戲的實(shí)現(xiàn),把華容道這個(gè)游戲從游戲機(jī)上移植到手機(jī)上面,方便了人們平時(shí)的娛樂(lè),可以隨時(shí)隨地的進(jìn)行游戲。也證明了目前手機(jī)游戲?qū)?huì)是未來(lái)的熱潮。</p><p><b>  1.2主要研究?jī)?nèi)容</b></p><p>  本課題基于J2ME的手機(jī)華容道的游戲,游戲

24、本身很簡(jiǎn)單,就是有幾個(gè)格子,曹操占據(jù)其中一個(gè)較大的格子,然后被幾個(gè)格子包圍,這些格子形狀不一定相同,但是擋住了曹操移動(dòng)的方向。游戲者需要挪動(dòng)這些格子最終把曹操移動(dòng)到一個(gè)指定的位置才算是過(guò)關(guān)。</p><p>  華容道游戲主要有三個(gè)方面,貼圖,游戲操作和邏輯判斷。在J2ME中Image類(lèi),專門(mén)用于管理圖片,可以直接讀取圖片文件,也可以截取已有的圖片的一部分。自定義HrdDisplayable類(lèi)用來(lái)處理程序的主要控

25、制邏輯和一部分控制邏輯所需的輔助函數(shù),主要函數(shù)應(yīng)該包括用來(lái)繪圖的函數(shù)、用來(lái)控制操作的函數(shù)、用來(lái)控制選擇區(qū)域的函數(shù)、用來(lái)控制選擇要移動(dòng)到區(qū)域的函數(shù)、用來(lái)移動(dòng)選中區(qū)域的函數(shù)和判斷是否完成任務(wù)的函數(shù)。</p><p>  其中解決游戲操作和邏輯判斷是難點(diǎn),需要查閱很多詳細(xì)資料來(lái)進(jìn)行解決。在整個(gè)游戲設(shè)計(jì)與實(shí)現(xiàn)過(guò)程中,邏輯判斷、類(lèi)的分析和相關(guān)API的應(yīng)用是關(guān)鍵問(wèn)題,本課題中應(yīng)用了5個(gè)類(lèi),分別是Images、Draw,還有M

26、ap和HrdDisplayable和HrdMIDlet。Images類(lèi)是用來(lái)存儲(chǔ)繪圖位置常量、地圖位置常量、地圖標(biāo)記常量、地圖組合標(biāo)記常量、圖片常量。Draw類(lèi)主要作用是在制定的位置畫(huà)出人物圖片。Map類(lèi)是用來(lái)從外部文件讀入地圖,然后保存在一個(gè)數(shù)組之中。HrdDisplayable類(lèi)用來(lái)處理程序的主要控制邏輯和一部分控制邏輯所需的輔助函數(shù)。HrdMIDlet類(lèi)就是一個(gè)控制整個(gè)J2ME應(yīng)用的控制程序。</p><p&g

27、t;<b>  1.3 論文結(jié)構(gòu)</b></p><p>  論文第2章介紹了實(shí)現(xiàn)本課題的相關(guān)技術(shù),其中包括J2ME技術(shù)介紹、JDK介紹、Eclipse集成開(kāi)發(fā)環(huán)境介紹、WTK介紹。第3章對(duì)該課題進(jìn)行了需求分析,第4章根據(jù)需求分析進(jìn)行了詳細(xì)的系統(tǒng)設(shè)計(jì)。第5章對(duì)設(shè)計(jì)好的系統(tǒng)進(jìn)行實(shí)現(xiàn)。第6章對(duì)該系統(tǒng)進(jìn)行相應(yīng)的測(cè)試。第7章對(duì)該課題做出了最后結(jié)論。</p><p>  第2章

28、 關(guān)鍵技術(shù)介紹</p><p>  2.1 J2ME介紹</p><p>  為了適應(yīng)移動(dòng)數(shù)據(jù)的發(fā)展,推進(jìn)無(wú)線電子商務(wù)等業(yè)務(wù)的發(fā)展,J2ME(Java 2 Micro Edition)即用于嵌入式系統(tǒng)的Java被引入無(wú)線領(lǐng)域。J2ME的出現(xiàn)實(shí)際上是Java技術(shù)的回歸。作為Java2平臺(tái)的一部分,J2ME與J2SE,J2EE一起,為無(wú)線應(yīng)用的客戶端和服務(wù)器端建立了完整的開(kāi)發(fā)、部署環(huán)境。隨著J

29、2ME的應(yīng)用,它為移動(dòng)互聯(lián)引入了一種新的模型,即允許手機(jī)可以從互聯(lián)網(wǎng)上下載各種應(yīng)用程序,并在受機(jī)創(chuàng)造可執(zhí)行環(huán)境離線運(yùn)行這些程序。</p><p>  Java在10多年的的發(fā)展歷程中,已經(jīng)成長(zhǎng)為一個(gè)全面而成熟的面向?qū)ο髴?yīng)用程序開(kāi)發(fā)平臺(tái),它適用與廣泛的、異構(gòu)的編程環(huán)境,這些應(yīng)用的涉及面非常廣,從企業(yè)級(jí)的服務(wù)器應(yīng)用到傳統(tǒng)的桌面應(yīng)用以及各式各樣面向小型設(shè)備的嵌入式應(yīng)用。Java有三個(gè)版本,分別是J2ME(微型版),J2

30、SE(標(biāo)準(zhǔn)版)和J2EE(企業(yè)版)。J2ME主要面向消費(fèi)電子產(chǎn)品和嵌入式設(shè)備。J2ME采用3層結(jié)構(gòu)設(shè)計(jì),最低層是配置層(Configuration)也就是設(shè)備層,其上是簡(jiǎn)表層(Profile),再上是應(yīng)用層(Application)。MIDP(Mobile Information Device Profile)就是移動(dòng)信息設(shè)備簡(jiǎn)表,目前主流手機(jī)支持MIDP1.0,最新的是MIDP2.0,它比前一個(gè)版本增加了對(duì)游戲的支持。</p&g

31、t;<p>  J2ME定位在消費(fèi)性電子產(chǎn)品的應(yīng)用上。這個(gè)版本針對(duì)資源有限的電子消費(fèi)產(chǎn)品的需求精簡(jiǎn)核心類(lèi)庫(kù),并提供了模塊化的架構(gòu)讓不同類(lèi)型的產(chǎn)品能夠隨時(shí)增加支持的能力。這個(gè)版本的應(yīng)用層面相當(dāng)廣泛,會(huì)是未來(lái)Java平臺(tái)發(fā)展的重點(diǎn)項(xiàng)目。J2ME在設(shè)計(jì)其規(guī)格的時(shí)候,遵循著“對(duì)各種不同的裝置而造出一個(gè)單一的開(kāi)發(fā)系統(tǒng)是沒(méi)有意義的事”這個(gè)基本原則。于是J2ME先將所有的嵌入式裝置大體上區(qū)分為兩種:一種是運(yùn)算功能有限、電力供應(yīng)也有限的嵌

32、入式裝置(比方說(shuō)PDA、手機(jī));另外一種則是運(yùn)算能力相對(duì)較佳、在電力供應(yīng)上相對(duì)比較充足的嵌入式裝置(比方說(shuō)冷氣機(jī)、電冰箱、電視機(jī)上盒(set-top box))。介于這兩種型態(tài)的嵌入式裝置,所以 Java引入了一個(gè)叫做Configuration的概念,把上述運(yùn)算能力有限、電力有限的嵌入式裝置定義在Connected Limited Device Configuration(CLDC)規(guī)格之中;而另外一種裝置則規(guī)范為 Connected

33、Device Configuration(CDC)規(guī)格。也就是說(shuō),J2ME先把所有的嵌入式裝置利用Configuration的概念區(qū)隔成兩種抽象的型態(tài)</p><p><b>  2.2 JDK介紹</b></p><p> ?。↗DK)JDK(Java Development Kit)是Sun Microsystems針對(duì)Java開(kāi)發(fā)員的產(chǎn)品。自從Java推出以來(lái),

34、JDK已經(jīng)成為使用最廣泛的Java SDK(Software development kit)?! DK 是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境(Java RuntimeEnvironment),一堆Java工具和Java基礎(chǔ)的類(lèi)庫(kù)(rt.jar)。不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK。因此掌握J(rèn)DK是學(xué)好Java的第一步。最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開(kāi)發(fā)了自

35、己的JDK,例如IBM公司開(kāi)發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開(kāi)發(fā)的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)運(yùn)行效率要比Sun JDK包含的JVM高出許多。而專門(mén)運(yùn)行在x86平臺(tái)的Jrocket在服務(wù)端運(yùn)行效率也要比SunJDK好很多。但不管怎么說(shuō),我們還是需要先把Sun JDK掌握好。  從SUN的JDK5.0開(kāi)始,提供了泛型等非常實(shí)用的功能,其</p>

36、<p>  2.3 Eclipse集成開(kāi)發(fā)環(huán)境介紹</p><p>  Eclipse 平臺(tái)是一個(gè)具有一組強(qiáng)大服務(wù)的框架,這些服務(wù)支持插件,比如Java開(kāi)發(fā)環(huán)境插件(JDT)、插件開(kāi)發(fā)環(huán)境(PDE)和其他的第三方插件(New tool)。它由幾個(gè)主要的部分構(gòu)成:平臺(tái)運(yùn)行庫(kù)、工作區(qū)、工作臺(tái)、團(tuán)隊(duì)支持和幫助。</p><p>  Eclipse 是一個(gè)開(kāi)放源代碼的、基于 Java

37、的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開(kāi)發(fā)工具(Java Development Tools,JDT)。 </p><p>  Eclipse最初是IBM的一個(gè)軟件產(chǎn)品,前期投入了4000萬(wàn)美金。2001年11月,IBM宣布將其捐給開(kāi)放源碼組織Eclipse.org。目前Eclipse的市場(chǎng)占有率已

38、經(jīng)超過(guò)了Borland公司的JBuilder,成為Java開(kāi)發(fā)平臺(tái)中的主流。</p><p>  Eclipse的設(shè)計(jì)思想是:一切皆為插件。它自身的核心是非常小的,其它所有的功能都以插件的形式附加到該核心上。</p><p>  Eclipse中三個(gè)最吸引人的地方:一是它創(chuàng)新性的圖形API,即SWT/JFace,在此之前,我曾經(jīng)用過(guò)Java 的AWT/SWING來(lái)開(kāi)發(fā)Windows應(yīng)用程序

39、,AWT/SWING其界面客觀地講不夠美觀,而且界面響應(yīng)速度比較慢;而SWT/JFace則大大改善了Java在這方面的能力。二是它的插件機(jī)制。三是利用它的插件機(jī)制開(kāi)發(fā)的眾多功能強(qiáng)大的插件。</p><p>  2.4 EclipseMe</p><p>  EclipseME作為Eclipse一個(gè)插件,致力于幫助開(kāi)發(fā)者開(kāi)發(fā)J2ME應(yīng)用程序。Eclipse并不為開(kāi)發(fā)者提供無(wú)線設(shè)備仿真器,而將

40、各廠商的實(shí)用仿真器緊密連接到Eclipse開(kāi)發(fā)環(huán)境中為開(kāi)發(fā)者提供一個(gè)統(tǒng)一方便的集成開(kāi)發(fā)環(huán)境。</p><p><b>  2.5 WTK介紹</b></p><p>  WTK 的全稱是Sun J2ME Wireless Toolkit的無(wú)線開(kāi)發(fā)工具包。這一工具包的設(shè)計(jì)目的是為了幫助開(kāi)發(fā)人員簡(jiǎn)化J2ME的開(kāi)發(fā)過(guò)程。使用其中的工具可以開(kāi)發(fā)與 Java Technolog

41、y for the Wireless Industry (JTWI, JSR 185) 規(guī)范兼容的設(shè)備上運(yùn)行的J2ME應(yīng)用程序。該工具箱包含了完整的生成工具、實(shí)用程序以及設(shè)備仿真器。目前各大手機(jī)廠商往往把WTK經(jīng)過(guò)自身的簡(jiǎn)化與改裝,而通過(guò)JBuilder、Eclipse等IDE,J2ME開(kāi)發(fā)包工具可以被綁定在這些集成開(kāi)發(fā)環(huán)境中,進(jìn)一步提高開(kāi)發(fā)效率。</p><p><b>  第3章 需求分析</

42、b></p><p>  3.1 游戲規(guī)則與操作</p><p>  游戲本身很簡(jiǎn)單,就是有幾個(gè)格子,曹操占據(jù)其中一個(gè)較大的格子,然后被幾個(gè)格子包圍,這些格子形狀不一定相同,但是擋住了曹操移動(dòng)的方向.游戲者需要挪動(dòng)這些格子最終把曹操移動(dòng)到一個(gè)指定的位置才算是過(guò)關(guān).其中的人物限定只提供曹操、關(guān)羽、張飛、趙云、黃忠、馬超和卒。游戲的操作方法:首先要通過(guò)方向鍵選擇一個(gè)要移動(dòng)的區(qū)域,被選擇的

43、區(qū)域用黑色方框框住;選好后按Fire鍵(就是確定鍵)將這塊區(qū)域選中,被選中的區(qū)域用綠色方框框??;然后選擇要移動(dòng)到的區(qū)域,此時(shí)用紅色方框框住被選擇的區(qū)域;選好要移動(dòng)到的區(qū)域之后按Fire鍵將要移動(dòng)的區(qū)域(圖片)移到要移動(dòng)到的區(qū)域,并去掉綠色和紅色的方框。</p><p>  3.2 游戲畫(huà)面和按鍵</p><p>  游戲初始畫(huà)面如圖 曹操被9個(gè)其他格子擋住,分別是關(guān)羽、張飛、黃忠、馬超、

44、趙云和4個(gè)小卒。當(dāng)要選擇某個(gè)格子時(shí),先通過(guò)按鍵移動(dòng)到格子上,畫(huà)面如圖格子的周?chē)珊谏蝮w,此時(shí)按Fire鍵選定該格子,其周?chē)目蝮w顏色變?yōu)榫G色如圖,選擇要移動(dòng)到的位置,目標(biāo)位置周?chē)目蝮w顏色變?yōu)榧t</p><p>  色如圖,移動(dòng)后畫(huà)面變成如圖所示最后游戲通關(guān)時(shí)的畫(huà)面如圖,只有當(dāng)曹操移動(dòng)到該圖位置時(shí)候才算通關(guān)。</p><p>  操控的鍵分為上、下、左、右和Fire鍵如圖所示中間的方形鍵

45、為Fire鍵,上下左右箭頭分別對(duì)應(yīng)相應(yīng)的方向鍵。</p><p>  3.3 游戲開(kāi)發(fā)環(huán)境</p><p>  硬件配置:CPU為迅馳2 1.6G,內(nèi)存為2.00GB,硬盤(pán)為60G。</p><p>  軟件配置:Windows XP操作系統(tǒng)。</p><p>  開(kāi)發(fā)平臺(tái):Eclipse,其中安裝EclipseMe插件和WTK模擬器。<

46、;/p><p>  開(kāi)發(fā)語(yǔ)言:Java語(yǔ)言。</p><p><b>  第4章 系統(tǒng)設(shè)計(jì)</b></p><p><b>  4.1 系統(tǒng)結(jié)構(gòu)</b></p><p>  具體到華容道這個(gè)游戲,主要有三個(gè)方面,貼圖.游戲操作.邏輯判斷.我們決定將整個(gè)項(xiàng)目分成五個(gè)部分,分別是Images、Draw,還有

47、Map和HrdDisplayable和HrdMIDlet。所謂的貼圖,其實(shí)就是畫(huà)圖,就是在要顯示圖形的位置上輸出一副圖片,這副圖片可以是事先準(zhǔn)備好的也可以是臨時(shí)處理的.在J2ME中有一個(gè)Image類(lèi),專門(mén)用于管理圖片,它有createImage()方法,可以直接讀取圖片文件,也可以截取已有的圖片的一部分.J2ME還有一個(gè)Graphics類(lèi),專門(mén)用于繪圖,它有drawImage()方法,可以把一副圖片在指定的位置上顯示出來(lái),它還有draw

48、Rect()方法和setColor()方法.有了圖片和繪圖的方法,還需要知道把圖畫(huà)到誰(shuí)身上,J2ME提供了一個(gè)Canvas類(lèi),它有一個(gè)paint()方法用于刷新頁(yè)面,還有一個(gè)repaint()方法用于調(diào)用paint()方法.為了編程的方便,創(chuàng)建兩個(gè)類(lèi)Images和Draw,Images用于保存一些常量值和圖片,Draw主要是用于畫(huà)圖。Map類(lèi)是用來(lái)從外部文件讀入地圖,然后保存在一個(gè)數(shù)組之中。HrdDisplayable是一個(gè)繼</

49、p><p>  4.2 Image類(lèi)的功能與實(shí)現(xiàn)</p><p>  Image類(lèi)主要用于管理圖片,Images類(lèi)存的是繪圖位置常量、地圖位置常量,地圖標(biāo)記常量,地圖組合標(biāo)記常量,圖片常量。Images類(lèi)中的地圖標(biāo)記常量和地圖組合標(biāo)記常量是為了能夠靈活的安排各個(gè)關(guān)面的布局,把游戲布局的信息存儲(chǔ)在外部文件中,然后程序啟動(dòng)后把它讀進(jìn)來(lái)。這樣制定了一套存儲(chǔ)圖片的代碼,這就是地圖標(biāo)記常量,如Image

50、s類(lèi)中定義的曹操用a字符來(lái)表示,當(dāng)程序讀到a字符時(shí)就能將它轉(zhuǎn)化成曹操對(duì)應(yīng)的圖片,并在讀到a字符的位置上進(jìn)行顯示。但是從實(shí)際觀察中發(fā)現(xiàn)所有的圖片并不是統(tǒng)一大小的,有的占4個(gè)格子,有的占2個(gè)格子,還有的占1個(gè)格子,而且即便同是占兩個(gè)格子的圖片還有橫、豎之分。有鑒于此,引入了地圖組合標(biāo)記常量,就是說(shuō)在遇到占有多個(gè)格子的時(shí)候,值1表示它的左邊是一個(gè)真正的地圖標(biāo)記,值2表示它的上邊是一個(gè)真正的地圖標(biāo)記,值1表示它的左上邊是一個(gè)真正的地圖標(biāo)記。地圖

51、組合標(biāo)記常量其實(shí)就是用來(lái)占位置的,與實(shí)際顯示無(wú)關(guān)。</p><p>  Image類(lèi)的實(shí)現(xiàn),代碼如下:</p><p>  import javax.microedition.lcdui.*;</p><p>  import javax.microedition.lcdui.game.*;</p><p>  public class Im

52、ages {// 保存常量</p><p><b>  // 繪圖位置常量</b></p><p>  public static final int UNIT = 32;// 方塊的單位長(zhǎng)度</p><p>  public static final int LEFT = 10;// 畫(huà)圖的左邊界頂點(diǎn)</p><p>

53、  public static final int TOP = 9;// 畫(huà)圖的上邊界頂點(diǎn)</p><p><b>  // 地圖位置常量</b></p><p>  public static final int WIDTH = 4;// 地圖的寬度</p><p>  public static final int HEIGHT = 5;/

54、/ 地圖的高度</p><p><b>  // 地圖標(biāo)記常量</b></p><p>  public static final byte CAOCAO = (byte) 'a'; // <A href="file://曹">file://曹</A>操的地圖標(biāo)記</p><p>  public stati

55、c final byte MACHAO = (byte) 'b';// 馬超的地圖標(biāo)記</p><p>  public static final byte HUANGZHONG = (byte) 'c';// 黃忠的地圖標(biāo)記</p><p>  public static final byte GUANYU = (byte) 'd';//

56、關(guān)羽的地圖標(biāo)記</p><p>  public static final byte ZHANGFEI = (byte) 'e';// 張飛的地圖標(biāo)記</p><p>  public static final byte ZHAOYUN = (byte) 'f';// 趙云的地圖標(biāo)記</p><p>  public static f

57、inal byte ZU = (byte) 'g';// 卒的地圖標(biāo)記</p><p>  public static final byte BLANK = (byte) 'h';// 空白的地圖標(biāo)記</p><p>  public static final byte CURSOR = (byte) 'i';// 光標(biāo)的地圖標(biāo)記</p

58、><p>  // 地圖組合標(biāo)記常量</p><p>  public static final byte DLEFT = (byte) '1'; // <Ahref="file://組">file://組</A>合圖形左邊標(biāo)記</p><p>  public static final byte DUP = (byte) '

59、;2'; // <A href="file://組">file://組</A>合圖形上邊標(biāo)記</p><p>  public static final byte DLEFTUP = (byte) '3'; // <A href="file://組">file://組</A>合圖形左上標(biāo)記</p><p><b> 

60、 // 圖片常量</b></p><p>  public static Image image_base;// 基本圖片</p><p>  public static Image image_Zhaoyun;// 趙云的圖片</p><p>  public static Image image_Caocao;// 曹操的圖片</p>

61、<p>  public static Image image_Huangzhong;// 黃忠的圖片</p><p>  public static Image image_Machao;// 馬超的圖片</p><p>  public static Image image_Guanyu;// 關(guān)羽的圖片</p><p>  public static

62、 Image image_Zhangfei;// 張飛的圖片</p><p>  public static Image image_Zu;// 卒的圖片</p><p>  public static Image image_Blank;// 空白的圖片</p><p>  public static Image image_Frame;// 游戲框架的圖片<

63、;/p><p>  public Images() {// 構(gòu)造函數(shù)</p><p><b>  }</b></p><p>  public static boolean init() {// 初始化游戲中用到的圖片</p><p><b>  try {</b></p><p&g

64、t;  image_base = Image.createImage("/BITBACK.PNG");</p><p>  image_Frame = Image.createImage(image_base, 126, 0, 145, 177,</p><p>  Sprite.TRANS_NONE);</p><p>  // Sprite類(lèi)

65、是用來(lái)翻轉(zhuǎn)圖片的,是MIDP2.0新新增加的支持游戲的特性</p><p>  image_Zhaoyun = Image.createImage(image_base, 0, 0, UNIT, 2 * UNIT,</p><p>  Sprite.TRANS_NONE);</p><p>  image_Caocao = Image.createImage(ima

66、ge_base, UNIT, 0, 2 * UNIT,</p><p>  2 * UNIT, Sprite.TRANS_NONE);</p><p>  image_Huangzhong = Image.createImage(image_base, 3 * UNIT, 0, UNIT,</p><p>  2 * UNIT, Sprite.TRANS_NONE)

67、;</p><p>  image_Machao = Image.createImage(image_base, 0, 2 * UNIT, UNIT,</p><p>  2 * UNIT, Sprite.TRANS_NONE);</p><p>  image_Guanyu = Image.createImage(image_base, UNIT, 2 * UNI

68、T,</p><p>  2 * UNIT, UNIT, Sprite.TRANS_NONE);</p><p>  image_Zhangfei = Image.createImage(image_base, 3 * UNIT, 2 * UNIT,</p><p>  UNIT, 2 * UNIT, Sprite.TRANS_NONE);</p>&

69、lt;p>  image_Zu = Image.createImage(image_base, 0, 4 * UNIT, UNIT, UNIT,</p><p>  Sprite.TRANS_NONE);</p><p>  image_Blank = Image.createImage(image_base, 1 * UNIT, 4 * UNIT,</p><p

70、>  UNIT, UNIT, Sprite.TRANS_NONE);</p><p>  return true;</p><p>  } catch (Exception ex) {</p><p>  ex.printStackTrace();</p><p>  return false;</p><p>

71、<b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.3 Draw類(lèi)功能與實(shí)現(xiàn)</p><p>  Draw類(lèi)主要是用來(lái)在畫(huà)布上畫(huà)出圖形,它有兩個(gè)paint方法,這是很常見(jiàn)的函數(shù)重載。但是程序中實(shí)際上只用

72、到了4個(gè)參數(shù)的paint方法,它直接獲得要畫(huà)圖片的相對(duì)坐標(biāo)位置信息,然后調(diào)用5個(gè)參數(shù)的paint方法。5個(gè)參數(shù)的paint方法將相對(duì)坐標(biāo)位置信息轉(zhuǎn)換成絕對(duì)位置,并實(shí)際調(diào)用Graphics.drawImage()方法,將Images中的圖片畫(huà)了出來(lái)。這種實(shí)現(xiàn)方法的好處是靈活和便于擴(kuò)展,但需要畫(huà)圖的位置并不能夠?qū)?yīng)到格子中的相對(duì)坐標(biāo)位置時(shí),就可以直接調(diào)用5個(gè)參數(shù)的paint方法,而不必再去修改這各類(lèi);但添加新的圖片時(shí),只要在Images中增

73、加對(duì)應(yīng)的常量,然后向Draw中5個(gè)參數(shù)的paint方法添加一條處理就可以了。</p><p>  Draw類(lèi)的實(shí)現(xiàn),代碼如下:</p><p>  import javax.microedition.lcdui.*;</p><p>  public class Draw {</p><p>  // 繪制游戲中的圖片</p>

74、<p>  public Draw(Canvas canvas) {// 構(gòu)造函數(shù)</p><p><b>  }</b></p><p>  public static boolean paint(Graphics g, byte img, int x, int y) {</p><p>  // 在地圖的x,y點(diǎn)繪制img指定的圖

75、片</p><p><b>  try {</b></p><p>  paint(g, img, x, y, Images.UNIT);// 把地圖x,y點(diǎn)轉(zhuǎn)化成畫(huà)布的絕對(duì)坐標(biāo),繪圖</p><p>  return true;</p><p>  } catch (Exception ex) {</p>

76、<p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  public static boolean paint(Graphics g, byte img, int x, int y, int unit) {</p>

77、<p><b>  try {</b></p><p>  switch (img) {</p><p>  case Images.CAOCAO:// 畫(huà)曹操</p><p>  // 變成絕對(duì)坐標(biāo),并做調(diào)整</p><p>  g.drawImage(Images.image_Caocao, Images

78、.LEFT + x * unit,</p><p>  Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT);</p><p><b>  break;</b></p><p>  case Images.GUANYU:// 畫(huà)關(guān)羽</p><p>  g.drawIm

79、age(Images.image_Guanyu, Images.LEFT + x * unit,</p><p>  Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT);</p><p><b>  break;</b></p><p>  case Images.HUANGZHONG://

80、 畫(huà)黃忠</p><p>  g.drawImage(Images.image_Huangzhong, Images.LEFT + x * unit,</p><p>  Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT);</p><p><b>  break;</b></p>

81、;<p>  case Images.MACHAO:// 畫(huà)馬超</p><p>  g.drawImage(Images.image_Machao, Images.LEFT + x * unit,</p><p>  Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT);</p><p><b

82、>  break;</b></p><p>  case Images.ZHANGFEI:// 畫(huà)張飛</p><p>  g.drawImage(Images.image_Zhangfei, Images.LEFT + x * unit,</p><p>  Images.TOP + y * unit, Graphics.TOP | Graphi

83、cs.LEFT);</p><p><b>  break;</b></p><p>  case Images.ZHAOYUN:// 畫(huà)趙云</p><p>  g.drawImage(Images.image_Zhaoyun, Images.LEFT + x * unit,</p><p>  Images.TOP

84、+ y * unit, Graphics.TOP | Graphics.LEFT);</p><p><b>  break;</b></p><p>  case Images.ZU:// 畫(huà)卒</p><p>  g.drawImage(Images.image_Zu, Images.LEFT + x * unit, Images.TOP&

85、lt;/p><p>  + y * unit, Graphics.TOP | Graphics.LEFT);</p><p><b>  break;</b></p><p>  case Images.BLANK:// 畫(huà)空白</p><p>  g.drawImage(Images.image_Blank, Images

86、.LEFT + x * unit,</p><p>  Images.TOP + y * unit, Graphics.TOP | Graphics.LEFT);</p><p><b>  break;</b></p><p>  case Images.CURSOR:// 畫(huà)光標(biāo)</p><p>  g.drawRe

87、ct(Images.LEFT + x * unit, Images.TOP + y * unit,</p><p>  Images.UNIT, Images.UNIT);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  return t

88、rue;</p><p>  } catch (Exception ex) {</p><p>  ex.printStackTrace();</p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b><

89、;/p><p><b>  }</b></p><p><b>  4.4 Map類(lèi)</b></p><p>  Map類(lèi)主要應(yīng)該有一個(gè)Grid[][]的二維數(shù)組,用來(lái)存放華容道的地圖,還應(yīng)該有一個(gè)read_map()函數(shù)用來(lái)從外部文件讀取地圖內(nèi)容填充Grid數(shù)據(jù)結(jié)構(gòu),再就是要有一個(gè)draw_map()函數(shù)用來(lái)把Grid數(shù)據(jù)結(jié)

90、構(gòu)中的地圖內(nèi)容轉(zhuǎn)換成圖片顯示出來(lái)。</p><p>  Map類(lèi)的實(shí)現(xiàn),代碼如下:</p><p>  import java.io.InputStream;</p><p>  import javax.microedition.lcdui.*;</p><p>  public class Map {</p><p&g

91、t;  // 處理游戲的地圖,負(fù)責(zé)從外部文件加載地圖數(shù)據(jù),存放地圖數(shù)據(jù),并按照地圖數(shù)據(jù)繪制地圖</p><p>  public byte Grid[][];// 存放地圖數(shù)據(jù)</p><p>  public Map() {// 構(gòu)造函數(shù),負(fù)責(zé)初始化地圖數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)</p><p>  this.Grid = new byte[Images.HEIGHT][Im

92、ages.WIDTH];</p><p>  // 用二維數(shù)組存放地圖數(shù)據(jù),注意第一維是豎直坐標(biāo),第二維是水平坐標(biāo)</p><p>  Grid[0][0]=(byte)'f';</p><p>  Grid[0][1]=(byte)'a';</p><p>  Grid[0][2]=(byte)'1&

93、#39;;</p><p>  Grid[0][3]=(byte)'c';</p><p>  Grid[1][0]=(byte)'2';</p><p>  Grid[1][1]=(byte)'2';</p><p>  Grid[1][2]=(byte)'3';</p&

94、gt;<p>  Grid[1][3]=(byte)'2';</p><p>  Grid[2][0]=(byte)'b';</p><p>  Grid[2][1]=(byte)'d';</p><p>  Grid[2][2]=(byte)'1';</p><p&g

95、t;  Grid[2][3]=(byte)'e';</p><p>  Grid[3][0]=(byte)'2';</p><p>  Grid[3][1]=(byte)'g';</p><p>  Grid[3][2]=(byte)'g';</p><p>  Grid[3][

96、3]=(byte)'2';</p><p>  Grid[4][0]=(byte)'g';</p><p>  Grid[4][1]=(byte)'i';</p><p>  Grid[4][2]=(byte)'h';</p><p>  Grid[4][3]=(byte)

97、9;g';</p><p><b>  //fa1c</b></p><p><b>  //2232</b></p><p><b>  //bd1e</b></p><p><b>  //2gg2</b></p>

98、<p><b>  //gihg</b></p><p><b>  }</b></p><p>  public int[] read_map(int i) {</p><p>  // <A href="file://從">file://從</A>外部文件加載地圖數(shù)據(jù),并存放在存儲(chǔ)結(jié)

99、構(gòu)中,返回值是光標(biāo)點(diǎn)的位置</p><p>  // 參數(shù)是加載地圖文件的等級(jí)</p><p>  int[] a = new int[2];// 光標(biāo)點(diǎn)的位置,0是水平位置,1是豎直位置</p><p><b>  try {</b></p><p>  //InputStream is = getClass()

100、.getResourceAsStream(</p><p>  //"/huarongroad/level".concat(String.valueOf(i)));</p><p>  //if (is != null) {</p><p>  for (int k = 0; k < Images.HEIGHT; k++)

101、{</p><p>  for (int j = 0; j < Images.WIDTH; j++) {</p><p>  //this.Grid[k][j] = (byte) is.read();</p><p>  if (this.Grid[k][j] == Images.CURSOR) {</p><p>  // 判斷出光標(biāo)

102、所在位置</p><p>  a[0] = j;// 光標(biāo)水平位置</p><p>  a[1] = k;// 光標(biāo)豎直位置</p><p>  this.Grid[k][j] = Images.BLANK;// 將光標(biāo)位置設(shè)成空白背景</p><p><b>  }</b></p><p>&l

103、t;b>  }</b></p><p>  //is.read();// 讀取回車(chē)(13),忽略掉</p><p>  //is.read();// 讀取換行(10),忽略掉</p><p><b>  }</b></p><p>  //is.close();</p&

104、gt;<p>  //} else {</p><p>  //// 讀取文件失敗</p><p>  //a[0] = -1;</p><p>  //a[1] = -1;</p><p><b>  //}</b></p><p>  } ca

105、tch (Exception ex) {</p><p>  ex.printStackTrace();</p><p><b>  // 打開(kāi)文件失敗</b></p><p>  a[0] = -1;</p><p>  a[1] = -1;</p><p><b>  }</b

106、></p><p><b>  return a;</b></p><p><b>  }</b></p><p>  public boolean draw_map(Graphics g) {</p><p>  // 調(diào)用Draw類(lèi)的靜態(tài)方法,繪制地圖</p><p&g

107、t;<b>  try {</b></p><p>  for (int i = 0; i < Images.HEIGHT; i++) {</p><p>  for (int j = 0; j < Images.WIDTH; j++) {</p><p>  Draw.paint(g, this.Grid[i][j], j, i)

108、;// 繪制地圖</p><p><b>  }</b></p><p><b>  }</b></p><p>  return true;</p><p>  } catch (Exception ex) {</p><p>  return false;</p&g

109、t;<p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  4.5 HrdDisplayable類(lèi)</p><p>  HrdDisplayable這個(gè)類(lèi)負(fù)責(zé)處理程序的控制邏輯。它需要有表

110、示當(dāng)前關(guān)面的變量level、表示當(dāng)前光標(biāo)位置的變量loc、表示要移動(dòng)區(qū)域的變量SelectArea、表示要移動(dòng)到的區(qū)域的變量MoveArea、表示是否已有區(qū)域被選中而準(zhǔn)備移動(dòng)的變量Selected和Map類(lèi)的實(shí)例MyMap。根據(jù)用戶按不同的鍵來(lái)處理不同的消息,要實(shí)現(xiàn)keyPressed()函數(shù),在函數(shù)中處理按鍵的上下左右和選中(Fire)。</p><p>  HrdDisplayable類(lèi)的實(shí)現(xiàn),代碼如下:&l

111、t;/p><p>  import javax.microedition.lcdui.Canvas;</p><p>  import javax.microedition.lcdui.Command;</p><p>  import javax.microedition.lcdui.CommandListener;</p><p>  imp

112、ort javax.microedition.lcdui.Displayable;</p><p>  import javax.microedition.lcdui.Graphics;</p><p>  import javax.microedition.midlet.MIDlet;</p><p>  public class HrdDisplayable e

113、xtends Canvas implements CommandListener {</p><p>  private int[] loc = new int[2]; // <A</p><p>  // href="file://光">file://光</A>標(biāo)的當(dāng)前位置,0是水平位置,1是豎直位置</p><p>  private int

114、[] SelectArea = new int[4];// 被選定的區(qū)域,即要移動(dòng)的區(qū)域</p><p>  private int[] MoveArea = new int[4];// 要移動(dòng)到的區(qū)域</p><p>  private Map MyMap = new Map();// 地圖類(lèi)</p><p>  private boolean selected;

115、// 是否已經(jīng)選中要移動(dòng)區(qū)域的標(biāo)志</p><p>  private int level;// 但前的關(guān)面</p><p>  public HrdDisplayable() {// 構(gòu)造函數(shù)</p><p><b>  try {</b></p><p>  jbInit();// JBuilder定義的初始化函數(shù)&

116、lt;/p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p>  private void Init_game(

117、) {</p><p>  // 初始化游戲,讀取地圖,設(shè)置選擇區(qū)域,清空要移動(dòng)到的區(qū)域</p><p>  this.loc = MyMap.read_map(this.level);// 讀取地圖文件,并返回光標(biāo)的初始位置</p><p>  // 0為水平位置,1為豎直位置</p><p>  this.SelectArea[0] =

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論