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