版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 摘 要</b></p><p> 本論文著眼于J2ME技術(shù)的應(yīng)用,開發(fā)一款可商用的手機游戲程序——坦克大戰(zhàn)。本程序的界面和運作方式繼承于日本任天堂公司在20世紀80年代開發(fā)的Battle City游戲,將老少皆宜的經(jīng)典作品移植到手機上來,為更流行的硬件平臺提供應(yīng)用軟件。</p><p> 本游戲中設(shè)計的主要研究的內(nèi)容:敵我雙方的坦克以
2、及子彈均以圖片方式顯示,并且添加游戲包含河、墻、草等環(huán)境元素。使用多線程來控制坦克的動作同時使用緩沖技術(shù)來減少游戲過程中屏幕的閃動率,游戲的難度會隨殺死敵人數(shù)量的增加而自動提高。敵人中包含特殊坦克,殺死后會隨機出現(xiàn)獎勵物品,我方坦克是有生命值控制的,共三條命。本游戲采用版本升級的方式逐步完善游戲功能。</p><p> 本游戲中包括游戲主窗口程序模塊,坦克類模塊,子彈模塊,河流模塊,墻壁模塊,及容納這些物體的父
3、類容器模塊,獎勵模塊,爆炸顯示模塊,配置讀取模塊,這些模塊之間相互聯(lián)系。</p><p> 關(guān)鍵詞 多線程 雙緩沖技術(shù) 容器</p><p><b> Abstract</b></p><p> This paper focuses on the application of J2ME technology, developed a c
4、ommercial mobile phone games -- tank war. The program interface and operation mode of inheritance in the Nintendo Co of Japan in the nineteen eighties developed Battle City game, the ages of classics ported to mobile pho
5、ne, for more popular hardware platform to provide application software.</p><p> The main research content of the game design:the bullets between us and the enemy displayed in picture, and the game contains
6、river, wall, grass and other environmental elements. The use of multiple threads to control the tank action, at the same time using buffer technology to reduce the course of the game screen flicker rate.The difficulty of
7、 the game will raise automatically with the increase of the number of the killed enemy.The enemy has special tanks,and it will randomly appear rewards aft</p><p> The game includes a main program module, ta
8、nk module , bullet module, river module, wall module, and the parent container module which accommodates these objects , reward module, display of blast module, configured module, these modules are interconnected with
9、each other.</p><p> Keywords: multiple threads,buffer technology,container</p><p><b> 目 錄</b></p><p><b> 摘 要1</b></p><p> Abstract2</p
10、><p><b> 第1章 緒論3</b></p><p><b> 1.1項目背景3</b></p><p> 1.1.1 國內(nèi)背景3</p><p> 1.1.2 國外背景4</p><p><b> 1.2項目來源5</b><
11、/p><p> 1.3設(shè)計游戲的必備知識5</p><p> 1.3.1 Java語言程序設(shè)計的基本知識點5</p><p> 1.3.2 Java語言的特性7</p><p> 第2章 需求分析8</p><p> 2.1系統(tǒng)需求分析8</p><p><b> 2
12、.2用況建模9</b></p><p> 2.3活動建模10</p><p> 2.4開發(fā)環(huán)境10</p><p> 2.5 J2ME概況及應(yīng)用11</p><p> 2.5.1 Java平臺的四個版本11</p><p> 2.6 本章小結(jié)11</p><p>
13、; 第3章 游戲設(shè)計13</p><p> 3.1 游戲結(jié)構(gòu)設(shè)計13</p><p> 3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計14</p><p> 3.3 算法設(shè)計15</p><p> 3.4 本章小結(jié)23</p><p> 第4章 游戲詳細設(shè)計24</p><p> 4.1 游戲功
14、能設(shè)計24</p><p><b> 4.2類模型25</b></p><p> 4.3 玩家坦克的功能屬性26</p><p> 4.4 敵人坦克的功能屬性26</p><p> 4.5子彈的運行和控制27</p><p> 4.6 坦克的控制和敵方的智能運行28</
15、p><p> 4.7 本章小結(jié)30</p><p> 第5章 游戲?qū)崿F(xiàn)31</p><p> 5.1游戲規(guī)則及運行界面31</p><p> 5.1.1 游戲步驟31</p><p> 5.1.2 操作31</p><p> 5.1.3 游戲規(guī)則及運行界面31</p&g
16、t;<p> 5.2本章小結(jié)36</p><p> 第6章 本游戲中關(guān)鍵技術(shù)和要改進的地方37</p><p> 6.1 有關(guān)繪圖的關(guān)鍵技術(shù)37</p><p> 6.2 Graphics類37</p><p> 6.3 文件系統(tǒng)37</p><p> 6.4利用緩沖技術(shù)消除閃爍現(xiàn)象
17、38</p><p> 6.5本程序要改進的地方39</p><p> 6.6本章總結(jié)40</p><p><b> 第7章 總結(jié)41</b></p><p> 7.1 本程序的總結(jié)41</p><p> 7.2 經(jīng)驗和感想41</p><p>&l
18、t;b> 參考文獻42</b></p><p><b> 第1章 緒論</b></p><p><b> 1.1項目背景</b></p><p> 1.1.1 國內(nèi)背景</p><p> 早期的游戲不能被廣泛接受最主要的就是該引擎沒有具備廣泛的硬件支持幅度,不能夠自上而
19、下充分發(fā)揮各等級硬件的運算資源。目前PC游戲銷量萎靡(相對于游戲機)的主要病根之一就是PC平臺不同等級的硬件性能相差甚巨,而大部分PC游戲?qū)Σ煌墑e的硬件支持范圍又不夠廣,所以往往要么是配置需求過高,要么就是畫質(zhì)跟不上時代,導致玩家接受面小而嚴重影響銷量。而過去暴雪的游戲之所以能夠贏得如此龐大的玩家追捧,除了作品本身的優(yōu)秀質(zhì)量以外,相對較廣的硬件支持同樣功不可沒。能夠很好兼顧當時高配置下的優(yōu)秀畫質(zhì)以及低端配置下同樣能夠提供流暢的游戲體驗
20、而聞名。</p><p> 國內(nèi)大多數(shù)玩家接觸的《坦克大戰(zhàn)》,都是經(jīng)傅瓚改造后的版本,經(jīng)典坦克游戲的編程:原版《坦克大戰(zhàn)》一共35關(guān),玩家的任務(wù)是保住己方司令部,并消滅敵方20輛坦克。傅瓚對原版的地圖和參數(shù)進行修改,增加了一系列新關(guān)卡,這就是最早的“煙山版”《坦克大戰(zhàn)》——《坦克7》(進入游戲后有“TANK A”至“TANK G”七個選項,因此得名)。之后他又陸續(xù)制作了《坦克14》、《坦克28》、《89坦克》和
21、《90坦克》等版本,加入了敵方坦克吃寶物、雙打時互借坦克等功能,以及水陸兩用坦克(可渡河的船)和火焰噴射器(可削草的手槍)等寶物,這些內(nèi)容都是原版沒有的。</p><p> 作為這一系列的集大成者,《90坦克》是其中流傳最廣的一款。其辨識方法也很簡單,《90坦克》在B3、B5、B6和B7四版的地圖上,分別有“福州”、“煙山”、“軟件”和“542408”(電話號碼)的字樣,這大約是國內(nèi)最早的游戲內(nèi)置廣告。<
22、/p><p> 憑借“坦克”系列,煙山軟件的營業(yè)額再次翻番,1989年突破200萬元,又推出了《導彈坦克》?!秾椞箍恕芬巡辉贊M足于對地圖和參數(shù)的簡單編輯,還對游戲程序做了修改,增加了發(fā)射導彈、加固工事等新玩法。玩家發(fā)射的導彈可以越過地圖上的所有障礙,還可以轉(zhuǎn)彎;導彈用完后,玩家可以用A鍵加固工事或設(shè)置路障,將坦克開到磚或石頭前,按A鍵舉起磚石,到需要加固或設(shè)置路障的地方,再按A鍵放下?!秾椞箍恕?,連同煙山軟件漢
23、化的《煙山杯圍棋》、《中文麻將》和《中國象棋》等另外三款游戲,被制作成四合一卡帶,這盤卡帶的母片(未加密的芯片)后來被賣給了一家臺灣公司,這也使煙山軟件無意間成為了國內(nèi)第一家“進軍海外”的游戲公司。</p><p> 1.1.2 國外背景</p><p> FC(Family Computer)主機在歐美又稱Nintendo Entertainment System(可譯作任天堂娛樂平
24、臺即NES)。FC主機在游戲業(yè)界造成的巨大沖擊眾所周知,這款主機在當時事實上幾乎占領(lǐng)了世界各地多個國家的整個游戲市場,并使得逐漸沒落的北美游戲市場再度復(fù)蘇。這款主機的性能比當時的多數(shù)主機都要強大,而價格上卻便宜得多。主機所采用得處理器為CMOS 6502,一款已經(jīng)淘汰的70年代中期產(chǎn)品。由于其價格便宜且極易使用,經(jīng)過任天堂的改造后又煥發(fā)了全新活力。6502 芯片 主頻為8 bit,12 MHz,內(nèi)存8k,畫面 52色,同屏最多顯示其中的
25、13色,聲音2個矩波,1個三角波,1個雜音,1個PCM音頻(見圖1-1)。 </p><p> Battle City是其發(fā)售卡帶中的一款力作,設(shè)置了35個關(guān)卡,可以雙人操縱,畫面設(shè)置了若干種類的建筑物和阻擋物,以消滅所有敵人為通關(guān)條件,并有接寶物等增加游戲效果的設(shè)置,畫面精美,音效杰出,在PC機的80386處理器仍未面世的當時,能在硬件上運行這樣的2D程序不得不令人驚嘆,難怪
26、常有人說游戲程序是最大限度發(fā)揮硬件水平的載體。其游戲界面如圖1-2所示。</p><p> 早期的游戲難免粗陋和簡單,因為現(xiàn)在發(fā)展太快的游戲行業(yè)正缺少了那些讓我們初次就愛上的游戲。還有技術(shù)性封閉測試主要是以測試版本穩(wěn)定性為主,測試期間可能出現(xiàn)各類技術(shù)問題。暴雪這種精益求精的公司,實際上游戲開發(fā)人員的第一個內(nèi)部開發(fā)版本就因為畫風太過于類似魔獸而被徹底推翻重來,而如今面對這個十年磨一劍的續(xù)作,我們不難猜想暴雪對其重
27、視程度已經(jīng)達到嘔心瀝血的程度!這款繼承經(jīng)典的游戲,給國人重鑄的玩家?guī)砭W(wǎng)游的新天地。所以玩家全心關(guān)注,官網(wǎng)急速啟動,研發(fā)部門日夜奮斗,只為一個目標:在第一時間開啟坦克大戰(zhàn)這款世紀經(jīng)典游戲的網(wǎng)游增強版。其中坦克與技能卡都能得到升級的機會,經(jīng)過強化與改造,能讓一輛坦克產(chǎn)生翻天覆地的變化。</p><p> 縱觀IT產(chǎn)業(yè)的歷史,就像軍事的發(fā)展時常推動計算機的演化一樣,計算機游戲已經(jīng)成為技術(shù)創(chuàng)新背后的動力之一。計算機游
28、戲者渴望更加強大的硬件計算能力;渴望不受不同的軟件的限制——無論是將圖形強制在人工智能(AI)上 還是網(wǎng)絡(luò)安全性上。游戲開發(fā)者和玩家常常是前沿計算機技術(shù)的最早的采用者。由于他們的創(chuàng)新天性,游戲不再是由大型采購公司控制的技術(shù)產(chǎn)品——游戲領(lǐng)域總是有充足的空間給那些在這方面有天分的單個創(chuàng)新者。</p><p><b> 1.2項目來源</b></p><p> 進入21
29、世紀,社會競爭日趨激烈,同時人們的生活壓力日益增大,為了在緊張的社會環(huán)境給人們帶來休閑的快樂,各大游戲公司相繼開發(fā)種種其樂無窮的游戲。其中坦克大戰(zhàn)就是其中的一款。坦克大戰(zhàn)早在上世紀是由日本專家任天堂的開發(fā)的,后流傳到中國福建,在福建的一所高校中,由一位物理老師傅瓚修改后流行于整個大陸,現(xiàn)在人們所玩的坦克大戰(zhàn)游戲大部分都是在傅瓚的基礎(chǔ)上修改的,出于對游戲開發(fā)的興趣與好奇,便嘗試開發(fā)了此游戲</p><p> 1.
30、3設(shè)計游戲的必備知識</p><p> 1.3.1 Java語言程序設(shè)計的基本知識點</p><p> 1.java語言支持面向?qū)ο蟪绦蛘Z言的三個關(guān)鍵特性</p><p><b> ?。?)封裝</b></p><p> 將對象的數(shù)據(jù)與操作數(shù)據(jù)的方法相結(jié)合,通過方法將對象的數(shù)據(jù)和實現(xiàn)的細節(jié)保護起來。</p&g
31、t;<p><b> ?。?)繼承</b></p><p> 當一個類是另一個類的特例時,這兩個類之間具有父子關(guān)系。子類就可以繼承了父類的狀態(tài)(變量)和行為(方法),子類可以重用父類的這部分代碼。繼承關(guān)系減少了程序中相似代碼的重復(fù)說明。程序員可以再父類中對一些共同操作與屬性只說明一次,而在子類中,基于子類的特性再進行擴展或是改變。并且繼承具有傳遞性。</p>&
32、lt;p><b> (3)多態(tài)</b></p><p> 多態(tài)可以表達為,對外一個接口,內(nèi)部多重實現(xiàn)。Java語言支持2種形式的多態(tài)。運行時多態(tài),和編譯時多態(tài)是通過方法的重載實現(xiàn)編譯時的多態(tài),而遇到類之間的繼承性,方法的重實現(xiàn)運行時多態(tài)。</p><p> 2.類和對象的基本概念</p><p> 類和對象是java中的基本組成要
33、素。類描述了同一類對象都舉要的數(shù)據(jù)和行為。創(chuàng)建一個新類,就是創(chuàng)建了一種新的數(shù)據(jù)類型。</p><p> 類有兩種基本成分:變量和方法,成為成員變量和成員方法。</p><p> ?。?)public 說明了類的屬性。Extend表示類繼承了superclassname為父名的父類,implements關(guān)鍵詞表示類實現(xiàn)了interfacenamelist中列出的各個接口。</p>
34、;<p> ?。?)public的屬性表明任意類均可以訪問這個類,如果類聲明中沒有public,則只有定義在同一個包中的類才能訪問這個類。</p><p> ?。?)類體。類體提供了這個類的對象在生命周期中需要的代碼, 構(gòu)造和初始化新對象的構(gòu)造方法。</p><p> (4)類的封裝與隱藏</p><p> Java中類成員的訪問權(quán)限有: pub
35、lic , private,以及默認權(quán)限(是沒有任何定義符的)。利用這種訪問權(quán)限可以控制類中的信息的隱藏程度。</p><p> ?。?)方法體中可以聲明方法中所用到的局部變量,它的作用域只在該方法的內(nèi)部,如果局部變量的名字和類的成員變量的名字相同,則成員變量被隱藏。如果要將該成員變量顯露出來,則需要在該變量前加修飾符this。</p><p><b> 3.方法的重寫<
36、/b></p><p> 在類的層次結(jié)構(gòu)中,當子類的成員變量與父類的成員變量同名時,子類的成員變量會將父類的成員變量隱藏。</p><p> 方法重寫:子類可以改寫父類方法所實現(xiàn)的功能。</p><p> 4.static關(guān)鍵詞</p><p> 在成員變量聲明是用static,是是該變量聲明我靜態(tài)變量。靜態(tài)變量只是在系統(tǒng)加載所
37、在的類時,分配空間并初始化。</p><p> main方法是一個靜態(tài)方法,它是程序的入口點。</p><p><b> 5.接口</b></p><p> 與類相比,接口只是規(guī)定了一個類的基本形式,不涉及什么實現(xiàn)的細節(jié)。接口只是進行方法的聲明,不提供任何方法的實現(xiàn)接口中的所用方法都是抽象的,一個類可以顯現(xiàn)多個接口, 的淚但是只能繼承一個
38、抽象的父類接口與顯現(xiàn)它的類不構(gòu)成繼承體系。</p><p><b> 6.包</b></p><p> 為了使類易于查找和使用,為了避免命名沖突,我們將一組相關(guān)類和接口包裹在一起形成包。</p><p> 7.子類和父類,而沒有說明抽象類的作用。抽象類是據(jù)有一個或多個抽象方法的類,必須聲明為抽象類。抽象類的特點是,不能創(chuàng)建實例上面講的只是
39、子類和父類。而沒有說明抽象類的作用。抽象類是據(jù)有一個或多個抽象方法的類,必須聲明為抽象類。</p><p> 8.抽象類與接口緊密相關(guān)。然而接口又比抽象類更抽象,這主要體現(xiàn)在它們的差別上:類可以實現(xiàn)無限個接口,但僅能從一個抽象(或任何其他類型)類繼承,從抽象類派生的類仍可實現(xiàn)接口,從而得出接口是用來解決多重繼承問題的。抽象類當中可以存在非抽象的方法,可接口不能且它里面的方法只是一個聲名必須用public來修飾沒
40、有具體實現(xiàn)的方法。抽象類中的成員變量可以被不同的修飾符來修飾,可接口中的成員變量默認的都是靜態(tài)常量(static final)。這一點也是最重要的一點本質(zhì)的一點"抽象類是對象的抽象,然接口是一種行為規(guī)范。 </p><p> 1.3.2 Java語言的特性</p><p><b> 1.平臺無關(guān)性</b></p><p> Ja
41、va引進虛擬機原理,并運行于虛擬機,實現(xiàn)不同平臺之間的Java接口。使用Java編寫的程序能在世界范圍內(nèi)共享。Java的數(shù)據(jù)類型與機器無關(guān)。</p><p><b> 2.安全性</b></p><p> Java的編程類似C++,但舍棄了C++的指針對存儲器地址的直接操作,程序運行時,內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過指針入侵系統(tǒng)。它提供了安全管理器,防止
42、程序的非法訪問。</p><p><b> 3.面向?qū)ο?lt;/b></p><p> Java吸收了C++面向?qū)ο蟮母拍?,將?shù)據(jù)封裝于類中,實現(xiàn)了程序的簡潔性和便于維護性,使程序代碼可以只需一次編譯就可反復(fù)利用。</p><p><b> 4.健壯性</b></p><p> Java致力與檢
43、查程序在編譯和運行時的錯誤,并自動回收內(nèi)存,減少了內(nèi)存出錯的可能性。Java取消了C語言的結(jié)構(gòu)、指針、#define語句、多重繼承、操作符、重載等不易被掌握的特性,提供垃圾收集器自動回收不用的內(nèi)存空間。</p><p><b> 第2章 需求分析</b></p><p> 需求分析即是分析用戶的需求,是軟件計劃時建立的可行性進行細化與精確,分配軟件元素,是軟件定義
44、時期的最后一個階段,它的基本任務(wù)是確定系統(tǒng)必須做什么。是對要做的系統(tǒng)確定一個完整的、具體的、清晰的、準確的要求??梢苑譃樾枨蟮奶岢?,需求的描述,需求的評審等階段。需求分析也是設(shè)計數(shù)據(jù)庫的起點,需求分析的結(jié)果是否準確地反映了用戶的實際要求,將直接影響到后面各個階段的設(shè)計,并影響到設(shè)計結(jié)果是否合理和實用。</p><p> 需求分析的任務(wù)是通過詳細調(diào)查現(xiàn)實世界要處理的對象(坦克、子彈、墻等),充分了解游戲的運行概況
45、,明確開發(fā)游戲的各種需求,然后在此基礎(chǔ)上確定游戲的功能。調(diào)查的重點是“數(shù)據(jù)”和“處理”,通過調(diào)查、收集與分析,獲得開發(fā)游戲的如下要求:信息要求、處理要求、安全性與健壯性要求。</p><p><b> 2.1系統(tǒng)需求分析</b></p><p> 坦克大戰(zhàn)主要需要我方坦克和對方坦克,還有我的基地,磚墻,鐵墻,水,綠草,開始背景,游戲勝利背景,游戲結(jié)束背景,以及各種
46、事件觸發(fā)音樂。我方坦克和對方坦克都可以上下左右移動,游戲的玩家通過相應(yīng)的鍵來控制坦克的移動和發(fā)射子彈,對方坦克在創(chuàng)建的時候就能夠發(fā)出子彈。當我方子彈與敵軍坦克相碰時會有爆炸效果產(chǎn)生。當我方坦克被對方的子彈打中,或者總部被毀時或者我方坦克打中對方坦克的數(shù)目達到某個值時游戲結(jié)束。</p><p><b> 2.2用況建模</b></p><p> 游戲中敵我雙方坦克均
47、可完成射擊,開動的功能,但己方坦克的運行是通過鍵盤響應(yīng)事件控制,而敵方坦克是根據(jù)設(shè)定相應(yīng)的休眠周期來控制運行的。同時,出現(xiàn)在屏幕上的敵方可能會有較多的數(shù)量,這需要為每個敵方開辟一個線程以便能讓其獨立運行。Java的多線程能力為實現(xiàn)這樣的游戲提供了可能。敵人坦克的運行算法也需要進行適當?shù)脑O(shè)置,以免游戲過于簡單,單調(diào)。</p><p><b> 2.3活動建模</b></p>&
48、lt;p><b> 圖2-2游戲活動圖</b></p><p> 游戲沒開始前是一個由玩家確定是否開始的界面,玩家輸入1開始游戲,每一關(guān)坦克數(shù)量不同,隨著關(guān)數(shù)的增加,坦克數(shù)量也在不斷增加,我方坦克不關(guān)在哪一關(guān)生命值用完了游戲便結(jié)束,但只有游戲進行到最后一關(guān)并將最后一關(guān)的坦克全數(shù)殲滅我方才算取得勝利。</p><p><b> 2.4開發(fā)環(huán)境<
49、;/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) </p><p> Micro. J2ME Wireless Tool Ki
50、t 2.1</p><p> IDE: Myeclipse7.0</p><p> 2.5 J2ME概況及應(yīng)用</p><p> 2.5.1 Java平臺的四個版本</p><p> 雖然 Java 已經(jīng)被用到許多企業(yè)級軟體上,可是其實骨子里面還是非常適合用在嵌入式系統(tǒng)之中。Java平臺演進到Java2后,Java平臺分別針對不同領(lǐng)域
51、的需求被分成四個版本,亦即J2EE、J2SE、J2ME以及Java Card,其結(jié)構(gòu)示意圖見圖2-3。</p><p> 圖2-3 java版本</p><p> J2EE是Java2的標準版,其核心是一組技術(shù)規(guī)范與指南,其中所包含的各類組件、服務(wù)架構(gòu)及技術(shù)層次,均有共同的標準及規(guī)格,讓各種依循J2EE架構(gòu)的不同平臺之間,存在良好的兼容性,解決過去企業(yè)后端使用的信息產(chǎn)品彼此之間無法兼容
52、,企業(yè)內(nèi)部或外部難以互通的窘境。</p><p> J2SE是Java2的標準版,是J2EE的基礎(chǔ),定位在客戶端,主要用于桌面應(yīng)用軟件的編程,它大量的JDK代碼庫是每個要學習J2EE的編程人員必須掌握的,它包含那些構(gòu)成Java語言核心的類。 比如:數(shù)據(jù)庫連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程 </p><p> J2ME是為機頂盒、移動電話和PDA之類嵌入式消費電子設(shè)備提供的Java語言
53、平臺,包括虛擬機和一系列標準化的Java API。</p><p> Java Card技術(shù)主要是讓智慧卡或與智慧卡相近的裝置上,以具有安全防護性的方式來執(zhí)行小型的Java Applet,此技術(shù)也被廣泛運用在SIM卡、提款卡上。</p><p><b> 2.6 本章小結(jié)</b></p><p> 本章主要講述坦克大戰(zhàn)游戲所需要的元素以及
54、國內(nèi)外游戲的發(fā)展背景。以及介紹了國外任天堂(Nintendo)的8位FC機器和Battle City游戲程序,同時介紹了java語言的特性和關(guān)鍵知識點和開發(fā)環(huán)境,由于J2ME平臺的好多特征對企業(yè)組織發(fā)展都有益,所以它被廣大設(shè)備制造商、網(wǎng)絡(luò)通信公司和消費者廣泛接受。所以J2ME平臺是未來Java平臺發(fā)展的重點項目。</p><p> 另外因為J2ME應(yīng)用在不同設(shè)備上都是便攜式的,他們常??稍诰W(wǎng)絡(luò)上下載和執(zhí)行。Ja
55、va被設(shè)計成一種安全的語言。所有字節(jié)碼應(yīng)用在執(zhí)行之前都要校驗;JVM在執(zhí)行過程中監(jiān)督應(yīng)用的安全性。</p><p><b> 第3章 游戲設(shè)計</b></p><p> 本游戲中設(shè)計的主要研究的內(nèi)容:敵我雙方的坦克以及子彈均以圖片方式顯示,并且添加游戲包含河、墻等環(huán)境元素。使用多線程來控制坦克的動作同時使用緩沖技術(shù)來減少游戲過程中屏幕的閃動率,當游戲的難度會隨殺死
56、敵人數(shù)量的增加而自動提高。敵人中包含特殊坦克,殺死后會隨機出現(xiàn)獎勵物品,我方坦克是有生命值控制的。本游戲采用版本升級的方式逐步完善游戲功能。</p><p> 3.1 游戲結(jié)構(gòu)設(shè)計</p><p> 本游戲中有游戲主窗口程序模塊,坦克類模塊,子彈模塊,河流模塊,墻壁模塊,及容納這些物體的父類容器模塊,獎勵模塊,爆炸顯示模塊,配置讀取模塊,這寫模塊之間相互聯(lián)系,如圖3-1所示。</
57、p><p> 圖3-1 游戲結(jié)構(gòu)圖</p><p> 3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計</p><p> 游戲中各個元素定義成線程類,并且在一定的條件下某些元素隨機消失,隨機出現(xiàn),因此為了操作的方便,將這些元素均存放在鏈表中,采用鏈表而不采用數(shù)組是因為對鏈表的插入和刪除操作容易,且其占用內(nèi)存的空間是可變的,不用像數(shù)組那樣事先需要為其分配一定的存儲空間,因此鏈表還節(jié)省了空間。此
58、外,還用到了泛型,將泛型和鏈表結(jié)合使用,是為了方便在從鏈表中取出元素時無需強制轉(zhuǎn)換。各元素的數(shù)據(jù)結(jié)構(gòu)如下表所示:</p><p><b> 表3.1 數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> 3.3 算法設(shè)計</b></p><p> 本游戲中每個可以移動的對象都將其設(shè)置成一個線程,即敵我雙方坦克,子彈均是以線程的
59、形式出現(xiàn)在游戲中的,此外游戲中還設(shè)置了磚墻,河流,草皮,鋼鐵獎勵物品等元素,這些元素都是以圖片的形式出現(xiàn)在游戲中,并且存放在列表中。游戲過程中,坦克和子彈有時會碰撞到這些元素,當坦克碰撞到墻,河流,鋼鐵時就會改變方向,而子彈可以擊碎磚墻無法擊碎鋼鐵,關(guān)于碰撞都是通過難證坐標是否重合實現(xiàn)的,以下是具體實現(xiàn)。</p><p> 1.敵我雙方坦克在界面中是以圖片的形式呈現(xiàn)的,并存放中定義好的鏈表中,游戲中為其定義了全
60、局變量ruined,類型為布爾型的,用來判斷坦克是否被摧毀,當其值為true說明坦克被摧毀,此外還定義了函數(shù)Stop_down(),Stop_up(),Stop_right(), Stop_left()來判斷坦克是否撞擊了墻,其返回類型同樣是布爾型,最后我方坦克定義了fire()函數(shù)用來射擊,敵方坦克定義了shoot()函數(shù)射擊子彈,在游戲中的運行情況如圖3-2</p><p> 圖3-2敵我雙方坦克</
61、p><p> 當敵人坦克完全死亡時,即tanks.size()為0且flag達到相應(yīng)的值,需調(diào)用clear()函數(shù)清空桌面上的敵我雙方子彈和其它元素,然后進入下一關(guān),重新轉(zhuǎn)回畫面。當然,如果當前已是最后一關(guān),就不會再轉(zhuǎn)回。進入下一關(guān)時,許多變量需要重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家坦克的當前位置。如果游戲未結(jié)束,則需判斷屏上坦克是否已小于還剩坦克的總數(shù),如果是這樣,就需要再提供一批坦克
62、。</p><p> 2.敵軍子彈的線程在敵軍坦克出現(xiàn)時就啟動了,為了讓子彈移動并且給玩家在視覺上達到子彈移動的效果,將子彈線程的休眠時間設(shè)為200毫秒。敵我雙方子彈同樣是放在列表中,并且每顆子彈都有屬主,當子彈的屬主被摧毀時,即ruined的值為true時,子彈也會死亡,也就是說存放子彈的鏈表將被清空,最后定義函數(shù)shoot_fe(),shoot_bride(),shoot_home(),succeed()來
63、判斷子彈是否擊中相應(yīng)的墻和對方坦克,其類型都是布爾類型,當子彈擊中墻或?qū)Ψ教箍藭r就會通過start()函數(shù)來啟動爆炸效果線程,子彈在游戲中的運行情況如圖3-3</p><p><b> 圖3-3子彈的運行</b></p><p> 子彈是一個繼承了Thread類的可運行單獨線程的對象,在其出現(xiàn)在屏幕上的運行周期中,每一步都需要循環(huán)檢測以下條件:是否與某坦克發(fā)生了碰
64、撞,即擊中了這輛坦克。子彈使用的是象素級的碰撞檢測,因為子彈的圖片形狀不規(guī)則,如果使用矩形碰撞檢測,將有可能在子彈尚未接觸到物體時就已返回碰撞的真值。</p><p> 3.敵軍坦克在游戲一開始時就通過strat()函數(shù)啟動線程,之后坦克就會向著隨機產(chǎn)生的方向前進,方向是通過random()函數(shù)產(chǎn)生的,0,1,2,3分別表示上下左右,坦克的移動步數(shù)是根據(jù)坦克的等級不同而定,定義level來表示坦克的等級,其中坦
65、克的移動步數(shù)和level之間在的關(guān)系為moveing=level * 2 + 6,敵軍方向的控制如圖3-4</p><p> 圖3-4敵軍坦克的控制 </p><p> 讓敵軍坦克更加智能,同時動起來,構(gòu)造函數(shù)中可以指定方向,new敵軍坦克的時候指定敵軍坦克的方向,讓敵軍坦克向隨機方向移動。每次碰撞到墻時,都會產(chǎn)生一個隨機方向,以便避開障礙物。</p><p>
66、 4.我方坦克的移動是通過玩家敲擊鍵盤來控制的,程序中對玩家是否敲擊鍵盤加了監(jiān)聽,當程序監(jiān)聽到玩家敲擊鍵盤時,就響應(yīng)該事件,并在keyPressed()函數(shù)中判斷玩家按下的是哪個鍵,從而確定坦克的移動方向和是否射擊子彈,當監(jiān)聽到坦克需要射擊時,調(diào)用fire()函數(shù)進行射擊,如果我方坦克被擊毀時,我方的坦克所分配的子彈也會從鏈表中清空,并且我方坦克分配子彈也是根據(jù)坦克的等級進行分配的,等級越高分配的子彈也就越多,如圖3-5所示</
67、p><p><b> 圖3-5 我方坦克</b></p><p> KeyBoardLis類繼承了KeyListener類,采取響應(yīng)鍵盤事件的方法,每次執(zhí)行周期時會讀取KeyPressed()函數(shù)中需執(zhí)行的代碼。本程序為坦克定義了4個方向(上下左右),先定位坦克的初始方向。根據(jù)按鍵狀態(tài)確定坦克的方向是用key pressed ()這個方法來實現(xiàn)的。其中定義了x軸和y軸
68、,按下A鍵,橫坐標減少相應(yīng)的值,按下D橫坐標增加相應(yīng)的值,按下W鍵縱坐標減少相應(yīng)的值,而按下S鍵縱坐標增加相應(yīng)的值,具體的值根據(jù)坦克的等級而定。</p><p> 5.本游戲共設(shè)為三關(guān),隨著關(guān)數(shù)的遞增,每關(guān)的坦克數(shù)量也會增加,也就是說游戲的難度會逐漸加大,敵軍坦克分批出現(xiàn)在屏幕上,每批五個,在程序中定義變量flag用作標志,用來控制每關(guān)應(yīng)該出現(xiàn)多少批,每殲滅敵軍一批坦克,就再增加五個并且flag自增,每關(guān)的自增
69、的次數(shù)不一樣,自增的次數(shù)決定了坦克的批數(shù),每一關(guān)過到規(guī)定的批數(shù)時就通關(guān),如果當前是最后一關(guān)并全殲敵軍,那么就顯示you win 的畫面,游戲也隨之結(jié)束,如圖3-6所示</p><p><b> 圖3-6 游戲通關(guān)</b></p><p> 游戲的每一關(guān)的敵軍坦克數(shù)量都不一樣,隨著關(guān)數(shù)的增加,敵軍坦克的數(shù)量也在不斷增加,每一關(guān)結(jié)束時都判斷當前是否處于最后一關(guān),如果是
70、則顯示YOU WIN的字樣,如果不是則自動轉(zhuǎn)到下一關(guān)繼續(xù)游戲,直到最后一關(guān)。如果玩家在任何一關(guān)不辛陣亡,則游戲也結(jié)束,只不過顯示的是GAME OVER的字樣。</p><p> 6.為了增加游戲的趣味性,游戲過程中會隨機出現(xiàn)獎勵物品,游戲中設(shè)置了三種獎勵物品,當坦克的坐標和這些物品的坐標重合時,坦克就可以撿到這些物品,獎勵出現(xiàn)與消失如圖3-7所示</p><p> 圖3-7獎勵出現(xiàn)與消
71、失</p><p> 游戲中設(shè)置了獎勵道具,當count的值等于100時,就會在屏幕上隨機出現(xiàn)一個獎勵道具,每個道具都會有自己的生命值,定義道具生命值life為100,從道具剛出現(xiàn)時,life就做自減操作,當life的值為0時,道具就從屏幕上消失,在道具消失前如果坦克撿到道具,坦克就會有相應(yīng)的變化。其中道具有三種,生命坦克、手槍、炸彈。玩家撿到生命坦克時,生命值會增加;敵軍撿到生命坦克時,我方坦克生命值減少。雙
72、方坦克撿到手槍時,坦克速度都會增加,子彈的威力也會增加。我方坦克撿到炸彈時,敵軍就會有一輛坦克爆炸,反之亦然。</p><p> 7.用文件保存玩家擊毀敵軍坦克的數(shù)量如圖3-8所示</p><p> 圖3-8保存擊毀敵軍數(shù)量</p><p> 每一關(guān)擊毀多少量敵軍坦克都以文件的形式保存在record中,這樣便于統(tǒng)計玩家的最好成績,這樣增加了游戲的挑戰(zhàn)性<
73、/p><p> 8.用文件保存屏幕上所有的元素坐標如圖3-9所示</p><p> 圖3-9保存屏幕上所有元素坐標</p><p> 從當前關(guān)卡退出游戲時,屏幕上所有元素的坐標都以文件形式的保存起來,這樣便于一次可以繼續(xù)本次退出的位置,進一步增加了游戲的友好性。</p><p> 9.讀取文件中的信息如圖3-10所示</p>
74、<p> 圖3-10讀取文件中的信息</p><p> Record是以字節(jié)為基本單位來存放的,所以所有要寫入record的數(shù)據(jù)都必須先將其轉(zhuǎn)為字節(jié)才能寫入,從record所讀出來的數(shù)據(jù)也是字節(jié),必須將其轉(zhuǎn)換為原先寫入時的數(shù)據(jù)類型才有意義。</p><p><b> 3.4 本章小結(jié)</b></p><p> 本章主介要紹了
75、游戲的結(jié)構(gòu),即游戲的主成模塊,以及游戲中主要功能的算法設(shè)計,通過對每個功能的分析和設(shè)計最終完成了整個游戲的設(shè)計。游戲開發(fā)過程中遇到很多困難,但只要專心,堅持,一切困難都會解決的。</p><p> 第4章 游戲詳細設(shè)計</p><p> 4.1 游戲功能設(shè)計</p><p> 游戲中敵我雙方坦克均可完成射擊,開動的功能,但己方坦克的運行是通過鍵盤響應(yīng)事件控制,
76、而敵方坦克是根據(jù)設(shè)定相應(yīng)的休眠周期來控制運行的。</p><p> 下面是對本系統(tǒng)的主要功能模塊的功能進行介紹</p><p><b> 1、我方坦克的功能</b></p><p> 為了滿足游戲的友好性,我方坦克必須能夠射擊和移動,只有通過射擊才能擊敗敵軍,也只有移動才能躲避敵軍的子彈和吃到獎勵的物品,這樣才能達到游戲的真正的目的。我方
77、坦克的射擊和移動都是通過響應(yīng)鍵盤事件來實現(xiàn)的,在玩家的操縱下向敵軍發(fā)動進攻。</p><p><b> 2、敵方坦克的功能</b></p><p> 敵軍能夠移動和發(fā)射子彈,但他們的移動和射擊都是隨機的,并且不需要玩家的操縱,它們是通過線程設(shè)定相應(yīng)的休眠周期來控制移動和射擊,敵軍會向四個不同的方向移動特定的步數(shù)和射擊,其中方向是通過隨機函數(shù)生成的。</p&g
78、t;<p><b> 3、敵軍子彈</b></p><p> 敵軍子彈也被設(shè)計成一個線程,敵軍每隔一段時間就會發(fā)射子彈,子彈也設(shè)定了休眠周期來控制自身的移動,當子彈擊中墻時就會出現(xiàn)爆炸效果,子彈也隨之消失,擊中的墻如果是磚墻剛磚墻也消失,如果是鐵墻則只有子彈消失,如果擊中的是草和河流,則子彈可以通過,直到撞到邊框才消失,如果擊中我方坦克,程序會根據(jù)敵軍坦克的等級做出相應(yīng)的處
79、理。</p><p><b> 4、我方子彈</b></p><p> 我方坦克子彈也是被設(shè)計成了一個線程,但是該線程的啟動是在玩家敲擊鍵盤的條件發(fā)生的,當玩家敲擊鍵盤時線程啟動,子彈的就會以一定的速度向坦克的槍口的方向移動,當子彈擊中墻時就會出現(xiàn)爆炸效果,子彈也隨之消失,擊中的墻如果是磚墻剛磚墻也消失,如果是鐵墻則只有子彈消失,如果擊中的是草和河流,則子彈可以通
80、過,直到撞到邊框才消失,如果擊中敵軍坦克,程序會根據(jù)敵軍坦克的等級做出相應(yīng)的處理。</p><p><b> 5、爆炸效果</b></p><p> 每一顆子彈在消失時都會出現(xiàn)爆炸,爆炸也是一個線程,只有當子彈消失才能啟動該線程,并且為了防止屏幕刷新時效果不佳,為此采用了雙緩沖技術(shù),雙緩沖主要就是去重寫update方法,在更新窗體時把下一個要顯示的圖片整體的畫到窗
81、體上去。這樣更增加了游戲的友好性和趣味性。</p><p><b> 6、獎勵道具</b></p><p> 將每一個道具設(shè)置成一個線程,設(shè)置兩個計數(shù)器count和life,其中l(wèi)ife的初值設(shè)為100。count從游戲開始時就開始計數(shù),用來控制道具的出現(xiàn),當count的值為100時,采用隨機函數(shù)在屏幕上隨機產(chǎn)生一種道具。Life用來控制道具的消失,當?shù)谰叱霈F(xiàn)時l
82、ife就開始做自減操作,當life的值為0時,道具就從屏幕上消失。在道具消失之前坦克可以拾撿道具,撿到道具后坦克會有相應(yīng)的變化。</p><p><b> 4.2類模型</b></p><p><b> 圖4-1設(shè)計類圖</b></p><p> Monitor主管著所有類之間的協(xié)調(diào),決定何時死亡,何時轉(zhuǎn)入下一關(guān),及
83、游戲進入界面、游戲結(jié)束后的Game over字樣。它運行在獨立的線程中,以恒定的頻率刷新畫面。刷新速度需大于30/秒才能使畫面顯示因人眼的暫時停留效應(yīng)流暢運行,在Tank類中定義了所有敵軍坦克的行為和屬性,在PlayerTank類中定義了玩家的坦克的行為和屬性。</p><p> game over字樣、生命值和關(guān)卡統(tǒng)計畫面也都需在此主邏輯中建立相應(yīng)對象。還需保存的變量有:游戲開始時間、敵人的總數(shù)、屏幕上敵人的
84、數(shù)量,游戲是否已成功結(jié)束或是否已死亡。</p><p> 由于敵人將非一次性出現(xiàn)在屏幕上,同時出現(xiàn)的數(shù)量應(yīng)當受控制。所以在構(gòu)造函數(shù)中,也應(yīng)當分配對象的內(nèi)存空間。創(chuàng)建坦克時,僅調(diào)用Tank(int x,int y)實現(xiàn)。</p><p> 在構(gòu)造函數(shù)自己調(diào)用了線程的start后,程序?qū)㈤_始循環(huán)運行,直至跳出while的循環(huán)。每次循環(huán)中將檢測是否死亡,屏幕上坦克的數(shù)量,是否該過關(guān)。<
85、/p><p> KeyBoardLis類檢測用戶輸入的keyPressed(KeyEvent e)函數(shù)中,當按方向鍵時,玩家坦克就將向不同的方向運行;當開炮時,就調(diào)用其shoot()函數(shù),作出相應(yīng)的行為。</p><p> 在繪圖的過程中,除了要重繪坦克、地圖、子彈外,還要在左下角和左上角處繪出一個生命統(tǒng)計欄和關(guān)卡顯示欄。</p><p> 構(gòu)造函數(shù)中創(chuàng)建了每個坦
86、克必須擁有的一顆子彈,這些子彈就將只跟隨自己的坦克調(diào)動。</p><p> 4.3 玩家坦克的功能屬性</p><p> 構(gòu)造函數(shù)中需要將坦克方向設(shè)置為向上,因為剛出現(xiàn)時就是這樣的狀態(tài)。當開炮時,需要聯(lián)系的還有自身坦克、地圖。</p><p> 這些都由坦克傳遞給子彈。因為子彈是屬于坦克的,它的屬性需要跟當前的坦克保持一致。接著將子彈貼顯示出來。最終調(diào)用其st
87、art()開始子彈自己的線程。子彈一旦開始運行,就脫離了當前坦克的控制,直到其生命周期終止。</p><p> 無論子彈是屬于敵人還是玩家的,它都必須記錄自己的來源和攻擊的對象。在玩家坦克發(fā)射的子彈中,就必須將攻擊對象設(shè)置為所有的敵人。這樣,它才能有掃描的目標。但卻提供必不可少的功能。他們可被外部調(diào)用,以取得生命值、死亡記數(shù)、重置位置。</p><p> 事實上,敵人坦克此時并沒有阻礙
88、玩家前進。這樣的判斷必須排除在考慮范圍外。當然,在設(shè)置完成后,必須將將檢測區(qū)域設(shè)置回原先的狀態(tài),否則敵人在往后自己的檢測中將發(fā)生錯誤。</p><p> 4.4 敵人坦克的功能屬性</p><p> 首先,Tank繼承了Thread類。因為敵人的運行是自動的,需要有設(shè)定的程序讓它可自己控制,而不像玩家坦克完全通過每次輸入的鍵盤信號來做出反映。因此,它可以運行在單獨的線程中,并設(shè)有特定的
89、休眠周期。</p><p> 敵人的坦克數(shù)量是有一定限制的,第一關(guān)共10輛,第二關(guān)共15輛,第三關(guān)共20輛,每次屏幕上出現(xiàn)5輛坦克,每消滅5輛坦克就再添加5輛,直至規(guī)定的坦克數(shù)目。此外在坦克重生的地方,不能存在其他任何物體,例如河流,墻,坦克之類的,如果存在了,就要任意再選擇一個位置進行重生。</p><p> 此外還設(shè)置了獎勵道具,當count的值等于100時,就會在屏幕上隨機出現(xiàn)一
90、個獎勵道具,每個道具都會有自己的生命值,定義道具生命值life為100,從道具剛出現(xiàn)時,life就做自減操作,當life的值為0時,道具就從屏幕上消失,在道具消失前如果坦克撿到道具,坦克就會有相應(yīng)的變化。其中道具有三種,生命坦克、手槍、炸彈。玩家撿到生命坦克時,生命值會增加;敵軍撿到生命坦克時,我方坦克生命值減少。雙方坦克撿到手槍時,坦克速度都會增加,子彈的威力也會增加。我方坦克撿到炸彈時,敵軍就會有一輛坦克爆炸,反之亦然。</p
91、><p> 最后為了控制敵軍坦克的射擊,也定義了變量count,當count 的值增長到15時,敵軍就進行發(fā)炮的動作。發(fā)炮后應(yīng)立即重新賦值給count,以便重新計算。</p><p> 當所有的步驟走完后,因為需要轉(zhuǎn)動方向,于是,調(diào)用一次隨機取得方向的函數(shù)再次獲值。其他的隨機值也應(yīng)當重置。</p><p> 4.5子彈的運行和控制</p><p
92、> 每一個坦克都有他自己的一顆子彈,這顆子彈在任何一輛坦克被構(gòu)造時就一直存在,直至此坦克生命的結(jié)束,子彈的再次只是將屏幕上暫時掩蓋的圖象重新置于坦克炮筒恰當位置,并使其顯示出來,這與現(xiàn)實中每個子彈都是單獨的個體有所不同。</p><p> 子彈所需要完成的任務(wù)有:</p><p> 它是一個繼承了Thread類的可運行單獨線程的對象。在其出現(xiàn)在屏幕上的運行周期中,每一步都需要循
93、環(huán)檢測以下條件:</p><p> 是否與某坦克發(fā)生了碰撞,即擊中了這輛坦克。子彈使用的是象素級的碰撞檢測,因為子彈的圖片形狀不規(guī)則,如果使用矩形碰撞檢測,將有可能在子彈尚未接觸到物體時就已返回碰撞的真值。</p><p> 此時分為兩種情況,如果此子彈來自于敵方,將只檢測玩家坦克,因為敵方之間的子彈必須允許可以透明的穿過,以保證不會在敵人之間發(fā)生子彈的消減。如果來自玩家,則每一步需掃
94、描所有的敵方坦克,檢查是否發(fā)生碰撞,這可能會花費不少的CPU時間。</p><p> 其次,子彈之間需要檢測是否碰撞。敵人之間顯然,如上已經(jīng)提過,不需要檢測,但敵人與玩家之間應(yīng)當可以互相消除子彈,以便在狹窄的路口中仍有存活的機會。玩家的子彈需要在每一步檢測所有敵人的子彈的運行狀態(tài)。這樣較多的運算也將不可避免的耗費大量CPU時間。</p><p> 子彈對不同障礙物將有不同的反映。對磚墻
95、將有能力將其擊毀,使之在畫面上消失;對鐵將不能發(fā)生作用,子彈也不能通過;對于河流,坦克不可以通過,但子彈可以;對于草叢,子彈和坦克都可以通過,但子彈和草是運行在草之下的。</p><p> 子彈繼承了Thread,運行在獨立的線程中。它標識了該子彈是屬于玩家的,還是敵人的,這樣可以控制子彈在脫離坦克管束后的運行狀態(tài)中的行為。</p><p> shoot_bride()方法用來檢測是否
96、擊中磚,擊中磚塊時,將產(chǎn)生爆炸,將當前塊置為空,并產(chǎn)生爆炸效果。爆炸效果根據(jù)需要爆炸的坐標點生成,其中將一個Sprite圖片在界面上閃現(xiàn)50毫秒。爆炸效果需要將圖片insert進第0層,這樣才不至于被其他景物所覆蓋,爆炸結(jié)束后自動相應(yīng)調(diào)整。擊中草時,由于沒有定義相關(guān)函數(shù),就不會有任何反映,會重合在草上正常通過;shoot_fe()判斷是否擊中鐵,擊中鐵時,將只產(chǎn)生爆炸效果。</p><p> 在線程的循環(huán)中作為
97、條件可以控制子彈出界的范圍。這幾項參數(shù)在編寫時很容易出錯。它們反映了象素級處理的技巧。</p><p> 子彈運行中,將用indoor()測試是否碰撞上了窗口的邊緣。如果為真,就說明子彈已經(jīng)越界。這將針對四個不同的方向分別以象素級檢測。</p><p> 子彈通過succeed()檢測是否擊中了某輛坦克。這根據(jù)子彈的來源分為兩種情況。當來自玩家時,將首先檢測所有的敵人發(fā)出的子彈,當發(fā)生
98、子彈間的碰撞時,用戶的子彈將被移除,雖然按照道理敵人的子彈同時也應(yīng)被移除,但敵人子彈是運行在另一線程中的,應(yīng)當由它自己來控制為好,用戶的子彈只需要管理好自己的狀態(tài)就可以了。如果沒有和子彈發(fā)生碰撞,就檢測是否與敵人碰撞,發(fā)生碰撞時,移除,并置為null,產(chǎn)生爆炸效果,敵人數(shù)量減少一位,敵人屏幕上數(shù)量減少一位。</p><p> 如果是來自敵人的子彈,將同樣檢測與玩家子彈的碰撞,及與玩家坦克的碰撞如有碰撞,玩家生命
99、數(shù)減少一位,位置重置。如果玩家生命已死亡殆盡,就需要在進行以上操作的同時將玩家坦克的位置放置到屏幕外的部分。remove函數(shù)并不會真正將層移除。只是用戶看不見而已。如果不放置到屏外,敵人坦克仍會被阻擋,子彈仍會再次擊中用戶坦克。這將會是很荒唐的場面。</p><p> 4.6 坦克的控制和敵方的智能運行</p><p> KeyBoardLis類繼承了KeyListener類,采取響應(yīng)
100、鍵盤事件的方法,每次執(zhí)行周期時會讀取KeyPressed()函數(shù)中需執(zhí)行的代碼。在某些不支持key pressed 功能的設(shè)備上,反復(fù)執(zhí)行的按鍵,比如發(fā)射子彈,將不能因為長時間按壓而自動重復(fù),這樣就需要用戶高頻率的手動擊鍵,這在操縱空間非常有限的移動設(shè)備上是非常困難的。同時,事件的執(zhí)行周期也并不一定適合游戲的場合,也許需要更高頻率執(zhí)行的按鍵卻只能在指定的周期內(nèi)規(guī)律的響應(yīng)。添加鍵盤監(jiān)聽使坦克聽從指揮。</p><p&g
101、t; Public void keypressed (key event e)這里使用e.getKeyChar()獲取用戶輸入的信息,與自己定義的按鍵代碼進行比較,實現(xiàn)對坦克的控制。 </p><p> 同時要確定坦克的移動方向,在坦克4個方向的基礎(chǔ)上,先定位坦克的初始方向。根據(jù)按鍵狀態(tài)確定坦克的方向是用key pressed ()這個方法來實現(xiàn)的。其中定義了x軸和y軸,按下左鍵,橫坐標減少相應(yīng)的值,按下右
102、鍵橫坐標增加相應(yīng)的值,按下向上的鍵縱坐標減少相應(yīng)的值,而按下先下的鍵縱坐標增加相應(yīng)的值,具體的值根據(jù)坦克的等級而定。</p><p> 但是在定義鍵時要增加 br=ture ,這個語句,它的含義是在按下想按的鍵之前,必須保證此鍵是沒有按下的。給我們的坦克添加一些智能化:</p><p> 添加變量,記錄隨機步驟。當Moving= =0時,改變方向,否則,只是隨機步驟遞減。為敵人的坦克每
103、移動一步,就要產(chǎn)生一個新的隨機的方向。用了random這個隨機產(chǎn)生器。</p><p> 提供可獲取當前鍵盤上的信息。將以位的形式返回鍵盤上所有鍵的按與釋放的狀態(tài),當bit為1時,鍵就是被按下的狀態(tài),為0時則為釋放狀態(tài)。只需要此一個函數(shù)的返回值就可以返回所有鍵的狀態(tài)。這保證了快速的按鍵和釋放也會被循環(huán)所捕捉。</p><p> 讓敵軍坦克更加智能,同時動起來,構(gòu)造函數(shù)中可以指定方向,n
104、ew敵軍坦克的時候指定敵軍坦克的方向,讓敵軍坦克向隨機方向移動,Direction.values(),讓敵軍坦克向隨機方向移動隨機的步驟。</p><p> 敵方坦克由于需要具有一定的智能性,以便對玩家攻擊,使之具有一定的可玩性。敵人可以自動行走,但是應(yīng)當在以下適當?shù)那闆r下轉(zhuǎn)向:首先是是否超出界面的邊界,其次是是否與地圖障礙物發(fā)生了碰撞,再次是是否與用戶坦克發(fā)生了碰撞。需要指出的是,當發(fā)生阻礙不能在不變方向的情
105、況下繼續(xù)行走時,并不一定立即需要采取轉(zhuǎn)向的對策。如果一定發(fā)生轉(zhuǎn)向,試想,當敵方碰到玩家時,如果它立即轉(zhuǎn)向,將不會對玩家發(fā)射射向他的子彈,就不構(gòu)成任何威脅,當然,也不能永遠不轉(zhuǎn)向。本程序設(shè)置為:當碰撞到障礙物或邊界時立即轉(zhuǎn)向,但碰到玩家坦克時需要有一個等待的時間,這個時間由碰撞前隨機取得的在某方向上的持續(xù)行走步數(shù)決定,當發(fā)生坦克間碰撞時,此隨機數(shù)將在下一次循環(huán)前減少,這樣就實現(xiàn)了加快轉(zhuǎn)向的時間,避免死鎖在一個方向上靜止的停留過長的時間。另
106、外,坦克的發(fā)炮間隔和轉(zhuǎn)后的具體方向都由隨機數(shù)決定。坦克之間由以上道理也不會發(fā)生重疊,但當某坦克正從上方生成而正巧有另一輛阻礙在其生成點處,這將導致不可避免的重合。這是允許的,但需要對他們標注狀態(tài),即當坦克剛出現(xiàn)時暫時允許重合,一旦在某個時間他們脫離了重合狀態(tài),就不能在允許重合,如果不設(shè)置這樣的判斷,剛出</p><p><b> 4.7 本章小結(jié)</b></p><p&
107、gt; 本章主要講述了游戲主要功能的詳細設(shè)計以及設(shè)計過程,每個子功能的設(shè)計是游戲最終實現(xiàn)的基礎(chǔ)。設(shè)計每個功能時都需要一定的精力,并且都不是那么的簡單,耐心是必須的。</p><p><b> 第5章 游戲?qū)崿F(xiàn)</b></p><p> 5.1游戲規(guī)則及運行界面</p><p> 5.1.1 游戲步驟</p><p&g
108、t; 1.配置好path環(huán)境變量(JDK1.6版本)。</p><p> 2.雙擊jar文件運行即可。</p><p><b> 5.1.2 操作</b></p><p> WSAD控制方向 J為子彈 </p><p> 5.1.3 游戲規(guī)則及運行界面</p><p>
109、 游戲開始(圖 5-1)</p><p> 圖5-1 游戲開始界面</p><p> 打開游戲時,先進入的是開始界面,此界面就是在面板上放置了一張圖片,目前只能進行單人游戲,按數(shù)字鍵1就可以進行其樂無窮的坦克大戰(zhàn)游戲了,進入戰(zhàn)斗的界面如下文所示。</p><p> 2.第一關(guān)(圖 5-2)。</p><p> 圖 5-2 游戲第一關(guān)
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 坦克大戰(zhàn)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計---java編寫的坦克大戰(zhàn)的游戲設(shè)計
- 坦克大戰(zhàn)游戲設(shè)計論文
- 畢業(yè)設(shè)計---基于java的網(wǎng)絡(luò)版坦克大戰(zhàn)游戲設(shè)計
- java坦克大戰(zhàn)畢業(yè)設(shè)計論文
- 畢業(yè)設(shè)計----基于java的網(wǎng)絡(luò)版坦克大戰(zhàn)游戲設(shè)計
- 畢業(yè)論文---flash游戲制作——坦克大戰(zhàn)
- 畢業(yè)論文——基于安卓坦克大戰(zhàn)游戲
- 基于java的游戲坦克大戰(zhàn)
- 畢業(yè)設(shè)計---基于j2me為平臺的坦克大戰(zhàn)游戲開發(fā)
- 基于安卓坦克大戰(zhàn)游戲畢業(yè)論文.doc
- java課程設(shè)計坦克大戰(zhàn)游戲(含代碼)
- 基于java的坦克大戰(zhàn)游戲開發(fā)
- 畢業(yè)論文---基于java的網(wǎng)絡(luò)版坦克大戰(zhàn)游戲設(shè)計
- 基于java的坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn)
- 計算機科學與技術(shù)畢業(yè)設(shè)計基于java的網(wǎng)絡(luò)版坦克大戰(zhàn)游戲設(shè)計
- 坦克大戰(zhàn)
- 基于Android的《坦克大戰(zhàn)》游戲的設(shè)計與實現(xiàn).pdf
- 基于java的坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn) 開題報告
- 基于java的坦克大戰(zhàn)游戲的設(shè)計與實現(xiàn)【文獻綜述】
評論
0/150
提交評論