版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> java編寫的坦克大戰(zhàn)的游戲設(shè)計 </p><p> 摘要:J2ME(Java 2 Micro Edition) 是近年來隨著各種不同設(shè)備,尤其是移動通信設(shè)備的飛速發(fā)展而誕生的一項新的開發(fā)技術(shù)。它定位在消費性電子產(chǎn)品的應用上,對設(shè)備的智能化、多樣化,提供了革命性的解決方案,并因其“Write Once, run anywhere”的Java特性而提高開發(fā)的效率。</p>&l
2、t;p> 隨著手機的日益普及、Java功能在移動設(shè)備上的實現(xiàn),Java應用程序產(chǎn)生的手機增值服務逐漸體現(xiàn)出其影響力,對豐富人們的生活內(nèi)容、提供快捷的資訊起著不可忽視的作用。本論文著眼于J2ME技術(shù)的應用,開發(fā)一款可商用的手機游戲程序——坦克大戰(zhàn)。本程序的界面和運作方式繼承于日本任天堂公司在20世紀80年代開發(fā)的Battle City游戲,將老少皆宜的經(jīng)典作品移植到手機上來,為更流行的硬件平臺提供應用軟件。</p>
3、<p> 本論文介紹了任天堂紅白機的軟硬件特性、J2ME的相關(guān)技術(shù)及本程序的結(jié)構(gòu)分析和具體功能的實現(xiàn)。</p><p> 關(guān)鍵字:J2ME,手機游戲, Java,坦克大戰(zhàn)</p><p> ABSTRACT:J2ME is a kind of fast developing technology implemented on various devices especial
4、ly mobile communication equipments. It focuses on application for consumptive electronic products, providing revolutionary solution to the intelligentization and diversification of the equipment. It improve the efficienc
5、y of the development process thanks to its “Write Once, run anywhere” nature.</p><p> When cell phone is getting ever more popular nowadays, with the implementation of Java technology on mobile equipment, i
6、ncrement of capital on communication service exhibits its force on people’s everyday life, providing them ever fast information just in hand. This dissertation focuses on implementation of J2ME technology and has develop
7、ed a commercial game suite run on mobile phones—Tank. This application inherits many characters of the old fashioned game Battle City which developed by Nintend</p><p> This dissertation introduces the char
8、acteristic of Nintendo FC machine and its software, J2ME and its relative technology as well as this program’s structure and analysis of implementation in details. </p><p> Key words: J2ME, mobile game, Jav
9、a, tank, Battle City.</p><p><b> 引言</b></p><p> Java語言是美國Sun Microsystem的James Gosling、Pratrick Naughton及Mike Sheridan等人于1991年精心設(shè)計出來的計算機編程語言,其構(gòu)想在于實現(xiàn)使用同一種編程語言所寫出來的程序可以在不同的平臺上運作。這種架構(gòu)
10、對于消費性電子產(chǎn)品而言是具有革命性的,因為在消費性電子產(chǎn)品中的處理器及操作系統(tǒng)各不相同,要在這些平臺上開發(fā)程序必須要了解各個平臺的特性,以及其提供的API使用方式,分別開發(fā)不同的版本才能執(zhí)行,影響應用程序的普及性。</p><p> 手機中將Java語言引入,作為一種通用的開發(fā)標準,并將向市場推廣普及僅僅短短幾年,J2ME仍是一種新型的技術(shù),中文資料除臺灣出版過相關(guān)書籍外,國內(nèi)相關(guān)介紹資源很有限,國內(nèi)J2ME開
11、發(fā)商也屈指可數(shù),名聲較響的Digital-Red公司也僅成立于1999年。本文可算是對新技術(shù)的一些嘗試,代表對無線平臺應用程序推廣的一些努力。</p><p> 本論文中第一章介紹游戲機軟硬件歷史、Java語言、J2ME及其相關(guān)技術(shù);</p><p> 第二章介紹了開發(fā)工具和相關(guān)軟硬件環(huán)境的背景;</p><p> 第三章分析該作品設(shè)計的思想和流程,介紹總體結(jié)
12、構(gòu);</p><p> 第四章并詳細闡述有關(guān)重點實現(xiàn)細節(jié);</p><p> 第五章提及了開發(fā)過程、心得體會、經(jīng)驗和感想</p><p><b> 目 錄</b></p><p> 摘 要- I -</p><p> Abstract - II -</p>
13、<p> 引 言- 2 -</p><p> 第一章 緒 論- 2 -</p><p> 1.1 手機軟件現(xiàn)狀- 2 -</p><p> 1.2 游戲業(yè)務及J2ME概況- 2 -</p><p> 1.3 本章小結(jié)- 2 -</p><p> 第二章 開發(fā)環(huán)境及相關(guān)技術(shù)的介紹
14、- 2 -</p><p> 2.1 開發(fā)環(huán)境- 2 -</p><p> 2.2 Java語言的特點- 2 -</p><p> 2.3 關(guān)于Wireless Tool Kit- 2 -</p><p> 2.4 Java Appication Manager- 2 -</p><p> 2.5
15、本章小結(jié)- 2 -</p><p> 第三章 程序結(jié)構(gòu)、思想和相關(guān)技術(shù)- 2 -</p><p> 3.1 程序流程- 2 -</p><p> 3.2繪圖與MIDP2.0新增的GameCanvas包- 2 -</p><p> 3.2.1 提供低級繪制的Canvas類- 2 -</p><p>
16、 3.2.2 Graphics類- 2 -</p><p> 3.2.3 PNG格式- 2 -</p><p> 3.2.4 Game包中的新功能- 2 -</p><p> 3.2.5 有關(guān)繪圖的一些技術(shù)- 2 -</p><p> 3.3 坦克的控制和敵方的智能運行- 2 -</p><p&g
17、t; 3.4 子彈的運行和控制- 2 -</p><p> 3.5 RMS數(shù)據(jù)庫系統(tǒng)- 2 -</p><p> 第四章 總 結(jié)- 2 -</p><p> 5.1 本程序的總結(jié)和展望- 2 -</p><p> 5.2 經(jīng)驗和感想- 2 -</p><p> 參考文獻- 2 -&l
18、t;/p><p><b> 第一章 緒 論</b></p><p> 1.1 手機軟件現(xiàn)狀</p><p> 在信息社會中,手機及其他無線設(shè)備越來越多的走進普通百姓的工作和生活,隨著信息網(wǎng)絡化的不斷進展,手機及其他無線設(shè)備上網(wǎng)絡勢在必行。但是傳統(tǒng)手機存在以下弊端:</p><p> 1. 傳統(tǒng)手機出廠時均由硬
19、件廠商固化程序,程序不能增加、刪除,有了錯誤也不能更新、修改,若要增加新功能必須另換一部手機。</p><p> 2. 傳統(tǒng)手機訪問互聯(lián)網(wǎng)是通過WAP(Wireless Application Protocal),所有網(wǎng)絡資源必須接通網(wǎng)絡才能在線訪問,非常耗時、費用亦很高。</p><p> 而Java技術(shù)在無線應用方面的優(yōu)勢非常明顯:</p><p> 1
20、. 應用程序可按需下載,而不是購買由硬件商提供的套件,可升級空間大。</p><p> 2. Java技術(shù)提供了一個類庫,它使的應用開發(fā)商可以創(chuàng)建更為直覺、豐富的用戶界面(GUI);</p><p> 3. Java技術(shù)使網(wǎng)絡帶寬的應用更為有效,因為應用程序可以下載到器件上,并在本地運行,僅僅是在連接到服務器時才會占用網(wǎng)絡帶寬。</p><p> 基于以
21、上分析,Java手機將是未來手機的發(fā)展方向,是業(yè)界的熱點。</p><p> 1.2 游戲業(yè)務及J2ME概況</p><p> 雖然 Java 已經(jīng)被用到許多企業(yè)級軟體上,可是其實骨子里面還是非常適合用在嵌入式系統(tǒng)之中。Java平臺演進到Java2后,Java平臺分別針對不同領(lǐng)域的需求被分成四個版本,亦即J2EE、J2SE、J2ME以及JavaCard(其結(jié)構(gòu)示意圖見圖1-1)。其中J
22、2ME定位在消費性電子產(chǎn)品的應用上。這個版本針對資源有限的電子消費產(chǎn)品的需求精簡核心類庫,并提供了模塊化的架構(gòu)讓不同類型產(chǎn)品能夠隨時增加支持的能力。這個版本的應用層面相當廣泛,會是未來Java平臺發(fā)展的重點項目。J2ME 在設(shè)計其規(guī)格的時候,遵循著“對各種不同的裝置而造出一個單一的開發(fā)系統(tǒng)是沒有意義的事”這個基本原則。于是 J2ME 先將所有的嵌入式裝置大體上區(qū)分為兩種:一種是運算功能有限、電力供應也有限的嵌入式裝置(比方說PDA 、手
23、機);另外一種則是運算能力相對較佳、在電力供應上相對比較充足的嵌入式裝置 (比方說冷氣機、電冰箱、電視機上盒 (set-top box))。因為這兩種型態(tài)的嵌入式裝置,所以Java 引入了一個叫做Configuration 的概念,把上述</p><p> 一個成功的手機游戲大多具有以下特征: </p><p> ·易于學習: 既然手機游戲面向的是普通消費者而不是計算機專家,
24、那么他們不可能深入的學習游戲技巧。消費者不會花幾個小時去研究一個3元的手動操作的游戲。保持游戲的簡單是最基本的要求。 </p><p> ·可中斷性: 多任務處理是手機生活方式的基本特征。手機用戶常常在任務(如等一個電子郵件或者等車)之間有一小段時間。而游戲、日歷管理、通訊和工作數(shù)據(jù)訪問使用的是同一個設(shè)備。所以一個好的手機游戲應該提供短時間的娛樂功能,并且允許用戶在游戲和工作模式之間順利切換。 <
25、;/p><p> ·基于訂閱:手機游戲的盈利成功取決于他們巨大的使用量。一開始開發(fā)和設(shè)計每個游戲都是昂貴的。如果一個手機游戲開發(fā)者要贏利的話,重要的是:同一個游戲引擎,多個標題,基本的故事情節(jié)類似?;谟嗛喌挠螒蚴遣粩喈a(chǎn)生收入的最好方法。 </p><p> 第二章 開發(fā)環(huán)境及相關(guān)技術(shù)的介紹</p><p><b> 2.1 開發(fā)環(huán)境</
26、b></p><p> 操作系統(tǒng):Microsoft Windows XP</p><p> 程序語言:Java 2</p><p> 開發(fā)包: Java(TM) 2 Standard Edition (build 1.4.1_02-b06) Sun Micro. J2ME Wireless Tool Kit 2.1</
27、p><p> IDE: Borland Jbuilder 9</p><p> 2.2 Java語言的特點</p><p><b> 1. 平臺無關(guān)性</b></p><p> Java引進虛擬機原理,并運行于虛擬機,實現(xiàn)不同平臺之間的Java接口。使用Java編寫的程序能在世界范圍內(nèi)共享。Java的數(shù)據(jù)類
28、型與機器無關(guān)。</p><p><b> 2. 安全性</b></p><p> Java的編程類似C++,但舍棄了C++的指針對存儲器地址的直接操作,程序運行時,內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過指針入侵系統(tǒng)。它提供了安全管理器,防止程序的非法訪問。</p><p><b> 3. 面向?qū)ο?lt;/b></
29、p><p> Java吸收了C++面向?qū)ο蟮母拍?,將?shù)據(jù)封裝于類中,實現(xiàn)了程序的簡潔性和便于維護性,使程序代碼可以只需一次編譯就可反復利用。</p><p><b> 4. 分布式</b></p><p> Java建立在TCP/IP網(wǎng)絡平臺上,提供了用HTTP和FTP協(xié)議傳送和接收信息的庫函數(shù),使用其相關(guān)技術(shù)可以十分方便的構(gòu)建分布式應用系統(tǒng)
30、。</p><p><b> 5. 健壯性</b></p><p> Java致力與檢查程序在編譯和運行時的錯誤,并自動回收內(nèi)存,減少了內(nèi)存出錯的可能性。Java取消了C語言的結(jié)構(gòu)、指針、#define語句、多重繼承、goto語句、操作符、重載等不易被掌握的特性,提供垃圾收集器自動回收不用的內(nèi)存空間。</p><p> 2.3 關(guān)于Wir
31、eless Tool Kit</p><p> WTK(Wireless Tool Kit)是Sun公司針對J2ME推出的用于手機和Palm等移動設(shè)備的開發(fā)包,是除手機廠商的專用開發(fā)包外唯一的手機模擬器開發(fā)包。它通用性高,開發(fā)出的應用程序可保證能運行在大部分設(shè)備上,而不像專用廠商具有一定的不兼容性。雖然它沒有強大的功能和完善的調(diào)試手段,但它提供運行模擬器的最基本組件,是其他IDE需集成采用的必備元素。</
32、p><p> 2.4 Java Appication Manager</p><p> 手機中負責調(diào)配程序運行資源的管理后臺是Java Application Manager。它所使用的傳輸媒體可以是紅外線、網(wǎng)絡、以及其他可用來傳輸?shù)拿襟w。Java Application Manager 會從網(wǎng)絡上下載代表該Application Suite 的JAR 檔,接著在手機上安裝此MIDlet
33、 Suite,然后在手機開始執(zhí)行該應用程序。整個詳細的運作流程如圖2-1所示。</p><p><b> 2.5 本章小結(jié):</b></p><p> 第二章介紹了Java語言的特點、本程序的開發(fā)環(huán)境及其相關(guān)工具的原理和使用。</p><p> 第三章 程序結(jié)構(gòu)、思想和相關(guān)技術(shù)</p><p><b>
34、 3.1 程序流程</b></p><p> MIDlet suite是MIDP應用程序的最小單位,JAM負責將手機內(nèi)的MIDlet suite以圖形化的方式呈現(xiàn),讓用戶能夠選取欲執(zhí)行的MIDlet suite,一旦選取了某個MIDlet suite,操作系統(tǒng)就會激活KVM執(zhí)行里面的MIDlet。MIDlet及相關(guān)的支持類組成了MIDP應用程序的實際內(nèi)容。</p><p>
35、 載入程序后首先啟動的是程序介紹的信息畫面。閃過后載入StartChoice類,為用戶提供可選擇的選項。在選擇開始后,將運行BattleCanvas類中的總流程控制。它決定了游戲何時該結(jié)束,何時分配敵人數(shù)量,GameOver字樣的閃現(xiàn)規(guī)則,地圖的繪制及整個游戲的調(diào)度。</p><p> 圖3-3是程序中類之間的UML分析圖。敵方坦克與用戶坦克的相關(guān)功能和具體行為分別定義在EnemySprite和UserSpr
36、ite類中,它們都繼承自TankSprite公共類,以簡化程序的代碼、理清結(jié)構(gòu)。</p><p> 在每關(guān)的結(jié)束或死亡后都將載入ScoreScreen類,統(tǒng)計當前的分數(shù)。如果已死亡或完成所有的關(guān)數(shù),程序?qū)⒂脩羲玫姆謹?shù)記載到RMS數(shù)據(jù)庫中,進行永久性保存。載入過程中將對所得分數(shù)與以往歷史比較,放置到合適的位置中,形成排序。</p><p> 3.2 繪圖與MIDP2.0新增的GameC
37、anvas包</p><p> 3.2.1 提供低級繪制的Canvas類</p><p> 為了能有程序開發(fā)人員控制接口的外觀和行為,需要使用大量的初級用戶接口類,尤其在游戲程序中,幾乎完全依賴的就是Canvas抽象類進行繪圖。從程序開發(fā)的觀點看,Canvas類可與高級Screen類交互,程序可在需要時在Canvas中摻入高級類的組件。Canvas提供了鍵盤事件、指點桿事件(如果設(shè)備
38、支持),并定義了允許將鍵盤按鍵映射為游戲控制鍵的函數(shù)。鍵盤事件由鍵代碼指定,但這樣控制游戲會導致缺乏通用性,并不是每個設(shè)備的鍵盤布局都適合游戲的操作。應當將鍵代碼轉(zhuǎn)換為游戲鍵的代碼,以便硬件開發(fā)商能定義他們自己的游戲鍵布局。本程序中,操縱用戶坦克運行的按鍵都定義為游戲控制鍵,這樣便能適應所有的機器。</p><p> 3.2.2 Graphics類</p><p> Graphics類
39、提供了簡單的2D繪圖功能。它具有24位深度色彩的繪制能力,以三原色分別各占一個字節(jié)表示其顏色。程序只能在paint()函數(shù)中使用Graphics繪制,GameCanvas可調(diào)用getGraphics()函數(shù)直接繪制在緩沖區(qū)上,可以在任何時間請求傳輸?shù)角芭_。其對象會被傳給Canvas的paint()函數(shù),以便最終顯示。</p><p> 3.2.3 PNG格式</p><p> PNG(
40、Portable Network Graphics)格式是MIDlet唯一支持的圖象格式,PNG具體格式由PNG Specification,Version 1.0定義的。PNG格式提供透明背景的圖象,這對繪制游戲畫面和被操縱主角極有幫助。坦克之間或與障礙物碰撞時就不會因為背景有特定的顏色,顯示出的效果像貼上的圖片而缺乏真實感,物體之間輕微重疊時最上層圖片也不會覆蓋超過其有效象素外的部分。</p><p> P
41、NG格式圖片中包含許多定義其圖片特性的冗余部分(Chunks)。這些代碼包含在每一個單獨的png格式圖象中,然而如果將多個png圖象合并在一張幅面稍大一些的整圖中,多個chunks就可以得到精簡,圖片的大小可以得到控制。使用Image類中的createImage函數(shù)可從整圖中分割出所需要的元素。在Game包中的TiledLayer和Sprite類都整合了這樣的功能。本程序中的地圖元素都集成在一張tile.png圖片中,實現(xiàn)了方便的管理和
42、程序體積的精簡。</p><p> 3.2.4 Game包中的新功能</p><p> MIDP自2.0以后新增了Game包,為游戲的開發(fā)帶來了極大的便利。地圖繪制、主角的動態(tài)顯示、按鍵的檢測、圖層的控制等游戲?qū)俚奶匦远嫉玫搅嗽谝苿釉O(shè)備上最大的發(fā)揮。</p><p> LayerManager(以下簡稱LM)提供控制整體畫面層的控制。它包括了一系列自動獲取
43、了代號和位置的層,簡化了各層加入游戲畫面的過程,提供了自動排序和繪制的能力。</p><p> LM存儲了一個層的列表,新的層可以用append函數(shù)附加、刪除和插入。層的序號相當于坐標的Z軸,0層表示最接近用戶視覺,層數(shù)越高,離用戶越遠。層號總是連續(xù)的,即使有中間的層被移除,其他層的序號會作相應的調(diào)整以保持整體的完整性。LM中的View Window控制著與LM相對坐標的可視區(qū)域。改變View Window的位
44、置可以制造出滾動屏幕的效果。</p><p> Sprite類是繼承自Layer的用于存儲多楨的基本可視元素。不同的frame可交相顯示,構(gòu)成動態(tài)的效果。圖片可翻轉(zhuǎn)、顛倒、由一個主角圖片就可以方便的得到所有方向的顯示狀態(tài),相比原先只能使用Canvas繪圖,需要將所有方向的主角圖象都繪制在png圖象中簡化了許多。Sprite也可以從整合的圖象中讀圖,讀圖時將把大圖分解為若干等寬等高的小圖。每個小圖按照其排列順序有
45、相應的序號,在程序中調(diào)用其序號,就可以繪制出相應的圖片。本程序中的雙方坦克、子彈都由Sprite繼承得到。在有些情況下,控制主角的翻轉(zhuǎn),尤其是多幅圖片配合顯示的過程,如果將多圖的共享定位點設(shè)置在通常的左上角,將很不容易控制,因為許多翻轉(zhuǎn)都是以其他點為參考電的(比如,中心點)。由此,引入?yún)⒖键c的概念。參考點由defineReferencePixel函數(shù)確定未翻轉(zhuǎn)圖片狀態(tài)時的坐標。默認是(0,0)點,如果需要,可將參考點設(shè)置在畫面邊界之外。
46、本程序中的坦克的參考點定義在圖片正中,以便簡便的實現(xiàn)轉(zhuǎn)向等功能。子彈的參考點設(shè)置在子彈底部的中心,因為子彈一出炮筒的時候緊挨著坦克的象素就是其底部中心。</p><p> TiledLayer是有一組圖象格元素(grid of cells)組成的整塊虛擬圖象。該類使不需要高分辨率的圖象就能創(chuàng)建大幅圖面成為可能。這項技術(shù)通常應用在2D游戲平臺的滾動背景的繪圖。一塊整圖可被分割成等大小的圖象格,每塊格有其對應的序號
47、,按照行列遞增。多塊格可由大塊同時替換組合而模擬動態(tài)的背景,這不需要逐塊替換所有的靜態(tài)圖象格而顯得非常方便。</p><p><b> 。</b></p><p> 3.2.5 有關(guān)繪圖的一些技術(shù)</p><p> 在沒有MIDP2.0前,進行游戲繪圖一般需要手動編程使用雙緩沖。需要在paint()方法內(nèi)所想要畫的圖形畫在一張預先準備好
48、的背景,等所有繪圖操作都完成后再將背景的數(shù)據(jù)拷貝到實際的屏幕上。Image類提供了一個建立背景的靜態(tài)方法createImage(int width, int height),再利用getGraphics()方法取得屬于這個背景的Graphics對象,所進行的繪圖操作都會作用在背景上,等到全部的繪圖操作完成后,再調(diào)用drawImage()方法將背景的數(shù)據(jù)復制到實際顯示的屏幕上。</p><p> 3.3 坦克的
49、控制和敵方的智能運行</p><p> GameCanvas中提供了與以往MIDP1.0不同的鍵盤采樣功能。Canvas類中采取響應鍵盤事件的方法,每次執(zhí)行周期時會讀取keyPressed函數(shù)中需執(zhí)行的代碼。這樣的機制并不適合某些游戲場合。在某些不支持keyRepeat功能的設(shè)備上,反復執(zhí)行的按鍵,比如發(fā)射子彈,將不能因為長時間按壓而自動重復,這樣就需要用戶高頻率的手動擊鍵,這在操縱空間非常有限的移動設(shè)備上是非
50、常困難的。同時,事件的執(zhí)行周期也并不一定適合游戲的場合,也許需要更高頻率執(zhí)行的按鍵卻只能在指定的周期內(nèi)規(guī)律的響應。對此,針對游戲的開發(fā),Game包提供的鍵盤狀態(tài)功能將顯得十分有效。</p><p> GameCanvas提供getKeyStates函數(shù)可獲取當前鍵盤上的信息。將以位的形式返回鍵盤上所有鍵的按與釋放的狀態(tài),當bit為1時,鍵就是被按下的狀態(tài),為0時則為釋放狀態(tài)。只需要此一個函數(shù)的返回值就可以返回所
51、有鍵的狀態(tài)。這保證了快速的按鍵和釋放也會被循環(huán)所捕捉。同時,這樣的機制也可檢測到幾個鍵同時按下的狀態(tài),從而提供斜向運行等相應功能。</p><p> 3.4 子彈的運行和控制</p><p> 每一個坦克都有他自己的一顆子彈,這顆子彈在任何一輛坦克被構(gòu)造時就一直存在,直至此坦克生命的結(jié)束,子彈的再次只是將屏幕上暫時掩蓋的圖象重新置于坦克炮筒才恰當位置,并使其顯示出來,這與現(xiàn)實中每個子彈
52、都是單獨的個體有所不同。</p><p> 子彈所需要完成的任務有:</p><p> 它是否與某坦克發(fā)生了碰撞,即擊中了這輛坦克。子彈使用的是象素級的碰撞檢測,因為子彈的圖片形狀不規(guī)則,如果使用矩形碰撞檢測,將有可能在子彈尚未接觸到物體時就已返回碰撞的真值。分為兩種情況,如果此子彈來自于敵方,將只檢測玩家坦克,因為敵方之間的子彈必須允許可以透明的穿過,以保證不會在敵人之間發(fā)生子彈的消
53、減。如果來自玩家,則每一步需掃描所有的敵方坦克,檢查是否發(fā)生碰撞,這可能會花費不少的CPU時間。</p><p> 其次,子彈之間需要檢測是否碰撞。敵人之間顯然,如上已經(jīng)提過,不需要檢測,但敵人與玩家之間應當可以互相消除子彈,以便在狹窄的路口中仍有存活的機會。玩家的子彈需要在每一步檢測所有敵人的子彈的運行狀態(tài)。這樣較多的運算也將不可避免的耗費大量CPU時間。</p><p> 子彈對不
54、同障礙物將有不同的反映。對磚墻將有能力將其擊毀,使之在畫面上消失;對水泥鋼筋將不能發(fā)生作用,子彈也不能通過;對于河流,坦克不可以通過,但子彈可以;對于草叢,子彈和坦克都可以通過。</p><p> 3.5 RMS數(shù)據(jù)庫系統(tǒng)</p><p> MIDP為MIDlets提供了一種永久存儲和后來讀出數(shù)據(jù)的數(shù)據(jù)庫解決方案,被稱為Record Managerment System(RMS),是一
55、種類簡單的基于記錄的數(shù)據(jù)庫。</p><p> 很顯然,手機上的數(shù)據(jù)庫系統(tǒng)不可能有PC上的強大功能。微小的存儲空間也限制了它們的結(jié)構(gòu)不能過于復雜。RMS是專門針對移動設(shè)備的服務的。</p><p> RMS包中包括RecordStore類。在一個MIDlet suite包里的所有MIDlet都允許創(chuàng)建多個記錄集,只要它們賦有不同的名稱。當MIDlet包從平臺中被移除后,所有與該包有關(guān)的
56、的記錄集都同時會被移除。同一個包內(nèi)的MIDlets可以直接互相訪問它們的記錄集,不同包內(nèi)也可產(chǎn)生共享,但這需要有包的授權(quán)屬性決定。訪問模式會在準備提供共享的RecordStore被建立時被創(chuàng)建。訪問模式允許私有使用或訪問。</p><p> RecordStore的API采用了時間戳的概念,其長整型變量由System的currentTimeMillis()函數(shù)返回決定。Record store 每次被修改后都會
57、自動在其屬性上附加上時間戳,這為同步化引擎和程序的控制都極為有效。</p><p> 記錄是字節(jié)數(shù)組。開發(fā)者可以利用InputStream的派生類DataInputStream、DataOutputStream以及ByteArrayInputStream、ByteArrayOutputStream將不同種類的數(shù)據(jù)類型打包,以字節(jié)流的形式發(fā)送和接收。</p><p> 區(qū)別記錄的唯一標記
58、是他們的ID值,作為記錄集的主鍵。第一項記錄的ID是1,其后的每個記錄ID遞增。</p><p> Record是以字節(jié)為基本單位來存放的,所以所有要寫入record的數(shù)據(jù)都必須先將其轉(zhuǎn)為字節(jié)才能寫入,從record所讀出來的數(shù)據(jù)也是字節(jié),必須將其轉(zhuǎn)換為原先寫入時的數(shù)據(jù)類型才有意義。</p><p> 然而讀取或?qū)懭氲淖止?jié)數(shù)組都只能代表一個字段的信息,如果需要讀取或?qū)懭攵鄠€字段就必須要
59、將數(shù)據(jù)轉(zhuǎn)換成字節(jié)信息,并且提供適當?shù)臋C制來分隔這些信息。主要有兩種方法:</p><p><b> 標記法。</b></p><p> 將所有要存放的數(shù)據(jù)用字符串表示,但是在字段和字段之間以一個特殊的符號作為分隔。符號不能和字段內(nèi)的數(shù)據(jù)相同的字符。</p><p> 2.利用輸入/輸出流</p><p> 這一種
60、方法較上一種復雜,但是較為實用。方法一中所有的字段只能以字符串的形式存儲,要對這些字段作進一步的處理非常麻煩。利用輸入輸出流可以寫入及讀取不同數(shù)據(jù)類型的數(shù)據(jù),做法是在寫入數(shù)據(jù)時先將一個DataOutputStream數(shù)據(jù)流對象串接到一個ByteArrayOutStream數(shù)據(jù)流對象,然后再依字段的數(shù)據(jù)類型用writeInt()、writeBoolean()等方法寫入,最后把ByteArrayOutputStream內(nèi)的元素數(shù)據(jù)寫入rec
61、ord中。反之若要讀取數(shù)據(jù),則先要串接一個DataInputStream對象和ByteArrayInputStream,依字段的數(shù)據(jù)類用readInt()、readBoolean()等方法讀取。</p><p> 本程序中主要存放在永久區(qū)的內(nèi)容為用戶得到的最高分數(shù)的記錄。一共可以存儲10條最高分。每次有新的更高的記錄就會插入進相應的位置,將最低一名排擠出記錄。在輸入記錄前,要求用戶在TextField框中寫入他
62、自己的名字。返回的getString可以將名字輸送給字節(jié)流。因為每個記錄包括用戶名和分數(shù),因此需要使用多字段的方式編入。打印到屏幕上時,記錄ID號即為排名,因此將顯示三項數(shù)據(jù)。</p><p> 第四章 總 結(jié)</p><p> 4.1 本程序的總結(jié)和展望</p><p> 本程序設(shè)計實現(xiàn)了手機上以J2ME為平臺的坦克大戰(zhàn)游戲的開發(fā),采用從外部文件讀
63、取地圖、自動控制敵人坦克運行的方式進行控制,具有一定的可玩性和復雜性。經(jīng)過了細心的調(diào)試和排錯解決了絕大部分的問題。</p><p> 但幾乎每一個計算機程序都會有這樣那樣的不足,尤其是未經(jīng)過精心維護的非商業(yè)軟件。即使是作為操作系統(tǒng)的各種版本的Windows也時常會發(fā)生許多類型的錯誤和漏洞。本游戲程序?qū)τ诔跎娲祟I(lǐng)域的畢業(yè)設(shè)計課題來說,尤其在開始初期,感覺邏輯復雜,難以控制,因此至今還有一些未能解決的bug。<
64、;/p><p> 目前發(fā)現(xiàn)的bug和未完善的功能列表如下:</p><p> 1. 與敵人對子彈的時候有時候可能會出現(xiàn)當敵人死后,自己若仍在原地,子彈會發(fā)不出去。</p><p> 2. 敵人的人工智能變化較少,不夠理想。</p><p> 3. 子彈和敵人經(jīng)常會與畫面的刷新的線程不同步,造成畫面閃爍。</p><
65、;p> 4. 由于每次子彈發(fā)射和每次坦克的移動的一個象素都會對所有坦克和所有子彈進行一次循環(huán)檢查,并由于同時開的線程比較多,使得本來運行效率就不高的KVM運行異常緩慢。即使刷屏沒有間隔也不會提高速度。</p><p> 5. 最好有接寶物的設(shè)置,增強可玩性。</p><p> 6. 當敵人和自己同時死亡時,仍會過關(guān),但gameover字樣會出現(xiàn),下一關(guān)坦克不會出現(xiàn),但可以
66、隱身發(fā)炮。</p><p> 已經(jīng)解決的重要bug:</p><p> 1. 當發(fā)出子彈到達邊界并同時還在草叢中時會拋出數(shù)組邊界異常。</p><p> 2. 有時會莫名其妙的死機。 </p><p> 3. 當坦克在草叢中時,對方坦克發(fā)出的子彈不能將其擊毀。</p><p><b
67、> 參考文獻</b></p><p> [1] 手機程序設(shè)計入門,王森(臺灣),中國鐵道出版社,30~50頁</p><p> [2] 循序漸進Java2教程(第三版)Rogers Cadenhead著,淡文剛 于紅梅 譯,人民郵電出版社,12~20頁</p><p> [3] MIDP 圖形編程簡介,Nokia電子文檔&
68、lt;/p><p> [4] 精通Jbuilder9,飛思科技產(chǎn)品研發(fā)中心,電子工業(yè)出版社,2004,23~40頁</p><p> [5] Java手機程序開發(fā),微型爪哇人,中國鐵道出版社,2003,20~100頁</p><p> [6] J2ME in a Nutshell, Kim Topley,O'Reilly publish,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 坦克大戰(zhàn)游戲畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---基于java的網(wǎng)絡版坦克大戰(zhàn)游戲設(shè)計
- 畢業(yè)設(shè)計----基于java的網(wǎng)絡版坦克大戰(zhàn)游戲設(shè)計
- java坦克大戰(zhàn)畢業(yè)設(shè)計論文
- 基于java的游戲坦克大戰(zhàn)
- 基于java的坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn)
- 基于java的坦克大戰(zhàn)游戲開發(fā)
- 畢業(yè)論文---基于java的網(wǎng)絡版坦克大戰(zhàn)游戲設(shè)計
- 坦克大戰(zhàn)畢業(yè)設(shè)計
- java課程設(shè)計坦克大戰(zhàn)游戲(含代碼)
- 基于java的坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn) 開題報告
- 基于java的坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn)【開題報告】
- 基于java的坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn)【文獻綜述】
- 計算機科學與技術(shù)畢業(yè)設(shè)計基于java的網(wǎng)絡版坦克大戰(zhàn)游戲設(shè)計
- java課程設(shè)計---基于java的坦克大戰(zhàn)
- 坦克大戰(zhàn)游戲設(shè)計論文
- 基于java的坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn) 任務書
- java課程設(shè)計----基于java的坦克大戰(zhàn)
- 坦克大戰(zhàn)--java課程設(shè)計
- java坦克大戰(zhàn)課程設(shè)計報告
評論
0/150
提交評論