版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于J2ME手機(jī)華容道游戲的設(shè)計與實現(xiàn)</p><p> The design and implementation of a Mobile Game Named HuaRongDao based on J2ME</p><p> 畢業(yè)設(shè)計(論文)任務(wù)書</p><p> 畢業(yè)設(shè)計(論文)題目:</p><p> 基
2、于J2ME手機(jī)華容道游戲的設(shè)計與實現(xiàn)</p><p> 設(shè)計(論文)的基本內(nèi)容: 隨著手機(jī)硬件設(shè)備性能的提高,基于J2ME的手機(jī)游戲開發(fā)前景看好。華容道游戲的內(nèi)容是將游戲主屏幕劃分為幾個格子,曹操占據(jù)其中一個較大的格子,然后被其他的格子包圍,這些格子形狀可以不相同,但是擋住了曹操移動的方向。游戲者需要挪動這些格子最終把曹操移動到一個指定的位置才算是過關(guān)。本課題要求開發(fā)完成基于J2ME的手機(jī)華容道游戲的程序,所使用
3、的開發(fā)軟件是JDK1.6,Eclipse6.5,EclipseMe1.7.9和WTK2.5.2。</p><p> 畢業(yè)設(shè)計(論文)專題部分:題目: 設(shè)計或論文專題的基本內(nèi)容:</p><p> 學(xué)生接受畢業(yè)設(shè)計(論文)題目日期第 1 周指導(dǎo)教師簽字:2009年 12 月 3 日</p><p> 基
4、于J2ME手機(jī)華容道游戲的設(shè)計與實現(xiàn)</p><p><b> 摘 要</b></p><p> 隨著新技術(shù)的發(fā)展和人們生活水平的提高,手機(jī)開始逐漸普及,手機(jī)以其小巧便捷,方便的特性成為人們的必備通訊工具。而手機(jī)的功能也越來越多,越來越強(qiáng)大。其中手機(jī)游戲也遠(yuǎn)遠(yuǎn)不是我們印象中的什么“俄羅斯方塊”、“貪吃蛇”之類畫面簡陋,規(guī)則簡單的游戲,進(jìn)而發(fā)展到了可以和掌上游戲機(jī)
5、媲美,具有很強(qiáng)的娛樂性和交互性的復(fù)雜形態(tài)了。</p><p> 隨著手機(jī)硬件設(shè)備性能的提高,基于J2ME(Java 2 Micro Editon)的手機(jī)游戲開發(fā)前景看好。而基于手機(jī)平臺的手機(jī)游戲也就擁有了巨大的市場空間,隨著3g的開通和應(yīng)用,手機(jī)游戲必將迎來新的一輪游戲熱潮?;贘2ME的手機(jī)華容道游戲的實現(xiàn),把華容道這個游戲從游戲機(jī)上移植到手機(jī)上面,方便了人們平時的娛樂,可以隨時隨地的進(jìn)行游戲。</p&
6、gt;<p> 課題主要研究基于J2ME手機(jī)華容道游戲的設(shè)計與實現(xiàn),從而把華容道這款游戲從游戲機(jī)上移植到手機(jī)上面,方便人們平時的娛樂,也證明了基于J2ME的手機(jī)游戲開發(fā)前景被看好。論文首先對華容道游戲進(jìn)行了需求分析,然后是相應(yīng)的詳細(xì)系統(tǒng)設(shè)計,接著是系統(tǒng)的實現(xiàn)和測試。最終在Eclipse環(huán)境中,應(yīng)用Java作為開發(fā)語言,實現(xiàn)了手機(jī)華容道游戲應(yīng)用,該游戲能在WTK模擬器下正常運行。</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è)計(論文)任務(wù)書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主要研究內(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集成開發(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、戲畫面和按鍵4</p><p> 3.3 游戲開發(fā)環(huán)境5</p><p> 第4章 系統(tǒng)設(shè)計1</p><p> 4.1 系統(tǒng)結(jié)構(gòu)1</p><p> 4.2 Image類的功能與實現(xiàn)1</p><p> 4.3 Draw類功能與實現(xiàn)4</p><p> 4.4 Map類
19、6</p><p> 4.5 HrdDisplayable類8</p><p> 4.6 HrdMIDlet類的功能與實現(xiàn)19</p><p> 4.7函數(shù)的實現(xiàn)20</p><p> 第5章 系統(tǒng)實現(xiàn)21</p><p> 5.1手機(jī)華容道游戲的運行界面21</p><p&g
20、t; 5.2系統(tǒng)文檔結(jié)構(gòu)23</p><p> 第6章 系統(tǒng)測試24</p><p> 6.1測試環(huán)境24</p><p> 6.2 測試?yán)碚?4</p><p> 6.3 測試內(nèi)容24</p><p> 6.4 測試結(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ī)開始逐漸普及,手機(jī)以其小巧便捷,方便的特性成為人們的必備通訊工具。而手機(jī)的功能也越來越多,越來越強(qiáng)大。其中手機(jī)游戲也遠(yuǎn)遠(yuǎn)不是我們印象中的什么“俄羅斯方塊”、“貪吃蛇”之類畫面簡陋,規(guī)則簡單的游戲,進(jìn)而發(fā)展到了可以和掌上游戲機(jī)媲美,具有很強(qiáng)的娛樂性和交互性的復(fù)雜形態(tài)了。隨著手機(jī)硬件設(shè)備性能的提高,基于J2ME(Java 2 Micro Editon)的手機(jī)游戲開發(fā)前景看好。而基于手機(jī)平臺的手
23、機(jī)游戲也就擁有了巨大的市場空間,隨著3g的開通和應(yīng)用,手機(jī)游戲必將迎來新的一輪游戲熱潮。基于J2ME的手機(jī)華容道游戲的實現(xiàn),把華容道這個游戲從游戲機(jī)上移植到手機(jī)上面,方便了人們平時的娛樂,可以隨時隨地的進(jìn)行游戲。也證明了目前手機(jī)游戲?qū)俏磥淼臒岢薄?lt;/p><p><b> 1.2主要研究內(nèi)容</b></p><p> 本課題基于J2ME的手機(jī)華容道的游戲,游戲
24、本身很簡單,就是有幾個格子,曹操占據(jù)其中一個較大的格子,然后被幾個格子包圍,這些格子形狀不一定相同,但是擋住了曹操移動的方向。游戲者需要挪動這些格子最終把曹操移動到一個指定的位置才算是過關(guān)。</p><p> 華容道游戲主要有三個方面,貼圖,游戲操作和邏輯判斷。在J2ME中Image類,專門用于管理圖片,可以直接讀取圖片文件,也可以截取已有的圖片的一部分。自定義HrdDisplayable類用來處理程序的主要控
25、制邏輯和一部分控制邏輯所需的輔助函數(shù),主要函數(shù)應(yīng)該包括用來繪圖的函數(shù)、用來控制操作的函數(shù)、用來控制選擇區(qū)域的函數(shù)、用來控制選擇要移動到區(qū)域的函數(shù)、用來移動選中區(qū)域的函數(shù)和判斷是否完成任務(wù)的函數(shù)。</p><p> 其中解決游戲操作和邏輯判斷是難點,需要查閱很多詳細(xì)資料來進(jìn)行解決。在整個游戲設(shè)計與實現(xiàn)過程中,邏輯判斷、類的分析和相關(guān)API的應(yīng)用是關(guān)鍵問題,本課題中應(yīng)用了5個類,分別是Images、Draw,還有M
26、ap和HrdDisplayable和HrdMIDlet。Images類是用來存儲繪圖位置常量、地圖位置常量、地圖標(biāo)記常量、地圖組合標(biāo)記常量、圖片常量。Draw類主要作用是在制定的位置畫出人物圖片。Map類是用來從外部文件讀入地圖,然后保存在一個數(shù)組之中。HrdDisplayable類用來處理程序的主要控制邏輯和一部分控制邏輯所需的輔助函數(shù)。HrdMIDlet類就是一個控制整個J2ME應(yīng)用的控制程序。</p><p&g
27、t;<b> 1.3 論文結(jié)構(gòu)</b></p><p> 論文第2章介紹了實現(xiàn)本課題的相關(guān)技術(shù),其中包括J2ME技術(shù)介紹、JDK介紹、Eclipse集成開發(fā)環(huán)境介紹、WTK介紹。第3章對該課題進(jìn)行了需求分析,第4章根據(jù)需求分析進(jìn)行了詳細(xì)的系統(tǒng)設(shè)計。第5章對設(shè)計好的系統(tǒng)進(jìn)行實現(xiàn)。第6章對該系統(tǒng)進(jìn)行相應(yīng)的測試。第7章對該課題做出了最后結(jié)論。</p><p> 第2章
28、 關(guān)鍵技術(shù)介紹</p><p> 2.1 J2ME介紹</p><p> 為了適應(yīng)移動數(shù)據(jù)的發(fā)展,推進(jìn)無線電子商務(wù)等業(yè)務(wù)的發(fā)展,J2ME(Java 2 Micro Edition)即用于嵌入式系統(tǒng)的Java被引入無線領(lǐng)域。J2ME的出現(xiàn)實際上是Java技術(shù)的回歸。作為Java2平臺的一部分,J2ME與J2SE,J2EE一起,為無線應(yīng)用的客戶端和服務(wù)器端建立了完整的開發(fā)、部署環(huán)境。隨著J
29、2ME的應(yīng)用,它為移動互聯(lián)引入了一種新的模型,即允許手機(jī)可以從互聯(lián)網(wǎng)上下載各種應(yīng)用程序,并在受機(jī)創(chuàng)造可執(zhí)行環(huán)境離線運行這些程序。</p><p> Java在10多年的的發(fā)展歷程中,已經(jīng)成長為一個全面而成熟的面向?qū)ο髴?yīng)用程序開發(fā)平臺,它適用與廣泛的、異構(gòu)的編程環(huán)境,這些應(yīng)用的涉及面非常廣,從企業(yè)級的服務(wù)器應(yīng)用到傳統(tǒng)的桌面應(yīng)用以及各式各樣面向小型設(shè)備的嵌入式應(yīng)用。Java有三個版本,分別是J2ME(微型版),J2
30、SE(標(biāo)準(zhǔn)版)和J2EE(企業(yè)版)。J2ME主要面向消費電子產(chǎn)品和嵌入式設(shè)備。J2ME采用3層結(jié)構(gòu)設(shè)計,最低層是配置層(Configuration)也就是設(shè)備層,其上是簡表層(Profile),再上是應(yīng)用層(Application)。MIDP(Mobile Information Device Profile)就是移動信息設(shè)備簡表,目前主流手機(jī)支持MIDP1.0,最新的是MIDP2.0,它比前一個版本增加了對游戲的支持。</p&g
31、t;<p> J2ME定位在消費性電子產(chǎn)品的應(yīng)用上。這個版本針對資源有限的電子消費產(chǎn)品的需求精簡核心類庫,并提供了模塊化的架構(gòu)讓不同類型的產(chǎn)品能夠隨時增加支持的能力。這個版本的應(yīng)用層面相當(dāng)廣泛,會是未來Java平臺發(fā)展的重點項目。J2ME在設(shè)計其規(guī)格的時候,遵循著“對各種不同的裝置而造出一個單一的開發(fā)系統(tǒng)是沒有意義的事”這個基本原則。于是J2ME先將所有的嵌入式裝置大體上區(qū)分為兩種:一種是運算功能有限、電力供應(yīng)也有限的嵌
32、入式裝置(比方說PDA、手機(jī));另外一種則是運算能力相對較佳、在電力供應(yīng)上相對比較充足的嵌入式裝置(比方說冷氣機(jī)、電冰箱、電視機(jī)上盒(set-top box))。介于這兩種型態(tài)的嵌入式裝置,所以 Java引入了一個叫做Configuration的概念,把上述運算能力有限、電力有限的嵌入式裝置定義在Connected Limited Device Configuration(CLDC)規(guī)格之中;而另外一種裝置則規(guī)范為 Connected
33、Device Configuration(CDC)規(guī)格。也就是說,J2ME先把所有的嵌入式裝置利用Configuration的概念區(qū)隔成兩種抽象的型態(tài)</p><p><b> 2.2 JDK介紹</b></p><p> ?。↗DK)JDK(Java Development Kit)是Sun Microsystems針對Java開發(fā)員的產(chǎn)品。自從Java推出以來,
34、JDK已經(jīng)成為使用最廣泛的Java SDK(Software development kit)?! DK 是整個Java的核心,包括了Java運行環(huán)境(Java RuntimeEnvironment),一堆Java工具和Java基礎(chǔ)的類庫(rt.jar)。不論什么Java應(yīng)用服務(wù)器實質(zhì)都是內(nèi)置了某個版本的JDK。因此掌握J(rèn)DK是學(xué)好Java的第一步。最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開發(fā)了自
35、己的JDK,例如IBM公司開發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開發(fā)的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)運行效率要比Sun JDK包含的JVM高出許多。而專門運行在x86平臺的Jrocket在服務(wù)端運行效率也要比SunJDK好很多。但不管怎么說,我們還是需要先把Sun JDK掌握好。 從SUN的JDK5.0開始,提供了泛型等非常實用的功能,其</p>
36、<p> 2.3 Eclipse集成開發(fā)環(huán)境介紹</p><p> Eclipse 平臺是一個具有一組強(qiáng)大服務(wù)的框架,這些服務(wù)支持插件,比如Java開發(fā)環(huán)境插件(JDT)、插件開發(fā)環(huán)境(PDE)和其他的第三方插件(New tool)。它由幾個主要的部分構(gòu)成:平臺運行庫、工作區(qū)、工作臺、團(tuán)隊支持和幫助。</p><p> Eclipse 是一個開放源代碼的、基于 Java
37、的可擴(kuò)展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,Eclipse 附帶了一個標(biāo)準(zhǔn)的插件集,包括 Java 開發(fā)工具(Java Development Tools,JDT)。 </p><p> Eclipse最初是IBM的一個軟件產(chǎn)品,前期投入了4000萬美金。2001年11月,IBM宣布將其捐給開放源碼組織Eclipse.org。目前Eclipse的市場占有率已
38、經(jīng)超過了Borland公司的JBuilder,成為Java開發(fā)平臺中的主流。</p><p> Eclipse的設(shè)計思想是:一切皆為插件。它自身的核心是非常小的,其它所有的功能都以插件的形式附加到該核心上。</p><p> Eclipse中三個最吸引人的地方:一是它創(chuàng)新性的圖形API,即SWT/JFace,在此之前,我曾經(jīng)用過Java 的AWT/SWING來開發(fā)Windows應(yīng)用程序
39、,AWT/SWING其界面客觀地講不夠美觀,而且界面響應(yīng)速度比較慢;而SWT/JFace則大大改善了Java在這方面的能力。二是它的插件機(jī)制。三是利用它的插件機(jī)制開發(fā)的眾多功能強(qiáng)大的插件。</p><p> 2.4 EclipseMe</p><p> EclipseME作為Eclipse一個插件,致力于幫助開發(fā)者開發(fā)J2ME應(yīng)用程序。Eclipse并不為開發(fā)者提供無線設(shè)備仿真器,而將
40、各廠商的實用仿真器緊密連接到Eclipse開發(fā)環(huán)境中為開發(fā)者提供一個統(tǒng)一方便的集成開發(fā)環(huán)境。</p><p><b> 2.5 WTK介紹</b></p><p> WTK 的全稱是Sun J2ME Wireless Toolkit的無線開發(fā)工具包。這一工具包的設(shè)計目的是為了幫助開發(fā)人員簡化J2ME的開發(fā)過程。使用其中的工具可以開發(fā)與 Java Technolog
41、y for the Wireless Industry (JTWI, JSR 185) 規(guī)范兼容的設(shè)備上運行的J2ME應(yīng)用程序。該工具箱包含了完整的生成工具、實用程序以及設(shè)備仿真器。目前各大手機(jī)廠商往往把WTK經(jīng)過自身的簡化與改裝,而通過JBuilder、Eclipse等IDE,J2ME開發(fā)包工具可以被綁定在這些集成開發(fā)環(huán)境中,進(jìn)一步提高開發(fā)效率。</p><p><b> 第3章 需求分析</
42、b></p><p> 3.1 游戲規(guī)則與操作</p><p> 游戲本身很簡單,就是有幾個格子,曹操占據(jù)其中一個較大的格子,然后被幾個格子包圍,這些格子形狀不一定相同,但是擋住了曹操移動的方向.游戲者需要挪動這些格子最終把曹操移動到一個指定的位置才算是過關(guān).其中的人物限定只提供曹操、關(guān)羽、張飛、趙云、黃忠、馬超和卒。游戲的操作方法:首先要通過方向鍵選擇一個要移動的區(qū)域,被選擇的
43、區(qū)域用黑色方框框住;選好后按Fire鍵(就是確定鍵)將這塊區(qū)域選中,被選中的區(qū)域用綠色方框框??;然后選擇要移動到的區(qū)域,此時用紅色方框框住被選擇的區(qū)域;選好要移動到的區(qū)域之后按Fire鍵將要移動的區(qū)域(圖片)移到要移動到的區(qū)域,并去掉綠色和紅色的方框。</p><p> 3.2 游戲畫面和按鍵</p><p> 游戲初始畫面如圖 曹操被9個其他格子擋住,分別是關(guān)羽、張飛、黃忠、馬超、
44、趙云和4個小卒。當(dāng)要選擇某個格子時,先通過按鍵移動到格子上,畫面如圖格子的周圍成黑色框體,此時按Fire鍵選定該格子,其周圍的框體顏色變?yōu)榫G色如圖,選擇要移動到的位置,目標(biāo)位置周圍的框體顏色變?yōu)榧t</p><p> 色如圖,移動后畫面變成如圖所示最后游戲通關(guān)時的畫面如圖,只有當(dāng)曹操移動到該圖位置時候才算通關(guān)。</p><p> 操控的鍵分為上、下、左、右和Fire鍵如圖所示中間的方形鍵
45、為Fire鍵,上下左右箭頭分別對應(yīng)相應(yīng)的方向鍵。</p><p> 3.3 游戲開發(fā)環(huán)境</p><p> 硬件配置:CPU為迅馳2 1.6G,內(nèi)存為2.00GB,硬盤為60G。</p><p> 軟件配置:Windows XP操作系統(tǒng)。</p><p> 開發(fā)平臺:Eclipse,其中安裝EclipseMe插件和WTK模擬器。<
46、;/p><p> 開發(fā)語言:Java語言。</p><p><b> 第4章 系統(tǒng)設(shè)計</b></p><p><b> 4.1 系統(tǒng)結(jié)構(gòu)</b></p><p> 具體到華容道這個游戲,主要有三個方面,貼圖.游戲操作.邏輯判斷.我們決定將整個項目分成五個部分,分別是Images、Draw,還有
47、Map和HrdDisplayable和HrdMIDlet。所謂的貼圖,其實就是畫圖,就是在要顯示圖形的位置上輸出一副圖片,這副圖片可以是事先準(zhǔn)備好的也可以是臨時處理的.在J2ME中有一個Image類,專門用于管理圖片,它有createImage()方法,可以直接讀取圖片文件,也可以截取已有的圖片的一部分.J2ME還有一個Graphics類,專門用于繪圖,它有drawImage()方法,可以把一副圖片在指定的位置上顯示出來,它還有draw
48、Rect()方法和setColor()方法.有了圖片和繪圖的方法,還需要知道把圖畫到誰身上,J2ME提供了一個Canvas類,它有一個paint()方法用于刷新頁面,還有一個repaint()方法用于調(diào)用paint()方法.為了編程的方便,創(chuàng)建兩個類Images和Draw,Images用于保存一些常量值和圖片,Draw主要是用于畫圖。Map類是用來從外部文件讀入地圖,然后保存在一個數(shù)組之中。HrdDisplayable是一個繼</
49、p><p> 4.2 Image類的功能與實現(xiàn)</p><p> Image類主要用于管理圖片,Images類存的是繪圖位置常量、地圖位置常量,地圖標(biāo)記常量,地圖組合標(biāo)記常量,圖片常量。Images類中的地圖標(biāo)記常量和地圖組合標(biāo)記常量是為了能夠靈活的安排各個關(guān)面的布局,把游戲布局的信息存儲在外部文件中,然后程序啟動后把它讀進(jìn)來。這樣制定了一套存儲圖片的代碼,這就是地圖標(biāo)記常量,如Image
50、s類中定義的曹操用a字符來表示,當(dāng)程序讀到a字符時就能將它轉(zhuǎn)化成曹操對應(yīng)的圖片,并在讀到a字符的位置上進(jìn)行顯示。但是從實際觀察中發(fā)現(xiàn)所有的圖片并不是統(tǒng)一大小的,有的占4個格子,有的占2個格子,還有的占1個格子,而且即便同是占兩個格子的圖片還有橫、豎之分。有鑒于此,引入了地圖組合標(biāo)記常量,就是說在遇到占有多個格子的時候,值1表示它的左邊是一個真正的地圖標(biāo)記,值2表示它的上邊是一個真正的地圖標(biāo)記,值1表示它的左上邊是一個真正的地圖標(biāo)記。地圖
51、組合標(biāo)記常量其實就是用來占位置的,與實際顯示無關(guān)。</p><p> Image類的實現(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;// 方塊的單位長度</p><p> public static final int LEFT = 10;// 畫圖的左邊界頂點</p><p>
53、 public static final int TOP = 9;// 畫圖的上邊界頂點</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類
65、是用來翻轉(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類功能與實現(xiàn)</p><p> Draw類主要是用來在畫布上畫出圖形,它有兩個paint方法,這是很常見的函數(shù)重載。但是程序中實際上只用
72、到了4個參數(shù)的paint方法,它直接獲得要畫圖片的相對坐標(biāo)位置信息,然后調(diào)用5個參數(shù)的paint方法。5個參數(shù)的paint方法將相對坐標(biāo)位置信息轉(zhuǎn)換成絕對位置,并實際調(diào)用Graphics.drawImage()方法,將Images中的圖片畫了出來。這種實現(xiàn)方法的好處是靈活和便于擴(kuò)展,但需要畫圖的位置并不能夠?qū)?yīng)到格子中的相對坐標(biāo)位置時,就可以直接調(diào)用5個參數(shù)的paint方法,而不必再去修改這各類;但添加新的圖片時,只要在Images中增
73、加對應(yīng)的常量,然后向Draw中5個參數(shù)的paint方法添加一條處理就可以了。</p><p> Draw類的實現(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點繪制img指定的圖
75、片</p><p><b> try {</b></p><p> paint(g, img, x, y, Images.UNIT);// 把地圖x,y點轉(zhuǎn)化成畫布的絕對坐標(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:// 畫曹操</p><p> // 變成絕對坐標(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:// 畫關(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、 畫黃忠</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:// 畫馬超</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:// 畫張飛</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:// 畫趙云</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:// 畫卒</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:// 畫空白</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:// 畫光標(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類</b></p><p> Map類主要應(yīng)該有一個Grid[][]的二維數(shù)組,用來存放華容道的地圖,還應(yīng)該有一個read_map()函數(shù)用來從外部文件讀取地圖內(nèi)容填充Grid數(shù)據(jù)結(jié)構(gòu),再就是要有一個draw_map()函數(shù)用來把Grid數(shù)據(jù)結(jié)
90、構(gòu)中的地圖內(nèi)容轉(zhuǎn)換成圖片顯示出來。</p><p> Map類的實現(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ù)的存儲結(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ù),并存放在存儲結(jié)
99、構(gòu)中,返回值是光標(biāo)點的位置</p><p> // 參數(shù)是加載地圖文件的等級</p><p> int[] a = new int[2];// 光標(biāo)點的位置,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();// 讀取回車(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> // 打開文件失敗</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類的靜態(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類</p><p> HrdDisplayable這個類負(fù)責(zé)處理程序的控制邏輯。它需要有表
110、示當(dāng)前關(guān)面的變量level、表示當(dāng)前光標(biāo)位置的變量loc、表示要移動區(qū)域的變量SelectArea、表示要移動到的區(qū)域的變量MoveArea、表示是否已有區(qū)域被選中而準(zhǔn)備移動的變量Selected和Map類的實例MyMap。根據(jù)用戶按不同的鍵來處理不同的消息,要實現(xiàn)keyPressed()函數(shù),在函數(shù)中處理按鍵的上下左右和選中(Fire)。</p><p> HrdDisplayable類的實現(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ū)域,即要移動的區(qū)域</p><p> private int[] MoveArea = new int[4];// 要移動到的區(qū)域</p><p> private Map MyMap = new Map();// 地圖類</p><p> private boolean selected;
115、// 是否已經(jī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ū)域,清空要移動到的區(qū)域</p><p> this.loc = MyMap.read_map(this.level);// 讀取地圖文件,并返回光標(biāo)的初始位置</p><p> // 0為水平位置,1為豎直位置</p><p> this.SelectArea[0] =
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于j2me手機(jī)推箱子游戲的設(shè)計與實現(xiàn)[畢業(yè)論文]
- 畢業(yè)論文---- 基于j2me的手機(jī)游戲開發(fā)
- 基于J2ME手機(jī)游戲設(shè)計與實現(xiàn).pdf
- j2me游戲畢業(yè)論文
- 畢業(yè)論文范文——基于j2me的手機(jī)游戲開發(fā) (2)
- J2ME手機(jī)游戲的設(shè)計與實現(xiàn).pdf
- 基于j2me的手機(jī)定時系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)論文
- 基于J2ME技術(shù)的手機(jī)游戲設(shè)計與實現(xiàn).pdf
- 畢業(yè)論文基于j2me的手機(jī)定時系統(tǒng)的設(shè)計與實現(xiàn)
- 畢業(yè)設(shè)計---基于j2me的手機(jī)游戲開發(fā)
- 基于j2me技術(shù)的手機(jī)導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)---畢業(yè)論文
- 基于J2ME的手機(jī)游戲設(shè)計.pdf
- 基于J2ME的手機(jī)紙牌游戲的設(shè)計與實現(xiàn).pdf
- 基于J2ME的手機(jī)游戲開發(fā)與實現(xiàn).pdf
- 基于j2me技術(shù)的手機(jī)導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)---畢業(yè)論文 (2)
- 基于J2ME的手機(jī)游戲引擎庫設(shè)計與實現(xiàn).pdf
- J2ME平臺手機(jī)游戲的設(shè)計與實現(xiàn).pdf
- j2me畢業(yè)論文-- j2me手機(jī)彩票軟件開發(fā)
- 基于j2me技術(shù)的手機(jī)導(dǎo)游系統(tǒng)的設(shè)計與實現(xiàn)---畢業(yè)論文 (2)
- 基于J2ME的手機(jī)游戲設(shè)計開發(fā).pdf
評論
0/150
提交評論