2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘 要</b></p><p>  本論文著眼于J2ME技術(shù)的應(yīng)用,開發(fā)一款可商用的手機(jī)游戲程序——坦克大戰(zhàn)。本程序的界面和運(yùn)作方式繼承于日本任天堂公司在20世紀(jì)80年代開發(fā)的Battle City游戲,將老少皆宜的經(jīng)典作品移植到手機(jī)上來,為更流行的硬件平臺(tái)提供應(yīng)用軟件。</p><p>  本游戲中設(shè)計(jì)的主要研究的內(nèi)容:敵我雙方的坦克以

2、及子彈均以圖片方式顯示,并且添加游戲包含河、墻、草等環(huán)境元素。使用多線程來控制坦克的動(dòng)作同時(shí)使用緩沖技術(shù)來減少游戲過程中屏幕的閃動(dòng)率,游戲的難度會(huì)隨殺死敵人數(shù)量的增加而自動(dòng)提高。敵人中包含特殊坦克,殺死后會(huì)隨機(jī)出現(xiàn)獎(jiǎng)勵(lì)物品,我方坦克是有生命值控制的,共三條命。本游戲采用版本升級(jí)的方式逐步完善游戲功能。</p><p>  本游戲中包括游戲主窗口程序模塊,坦克類模塊,子彈模塊,河流模塊,墻壁模塊,及容納這些物體的父

3、類容器模塊,獎(jiǎng)勵(lì)模塊,爆炸顯示模塊,配置讀取模塊,這些模塊之間相互聯(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項(xiàng)目背景3</b></p><p>  1.1.1 國內(nèi)背景3</p><p>  1.1.2 國外背景4</p><p><b>  1.2項(xiàng)目來源5</b><

11、/p><p>  1.3設(shè)計(jì)游戲的必備知識(shí)5</p><p>  1.3.1 Java語言程序設(shè)計(jì)的基本知識(shí)點(diǎn)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活動(dòng)建模10</p><p>  2.4開發(fā)環(huán)境10</p><p>  2.5 J2ME概況及應(yīng)用11</p><p>  2.5.1 Java平臺(tái)的四個(gè)版本11</p><p>  2.6 本章小結(jié)11</p><p>

13、;  第3章 游戲設(shè)計(jì)13</p><p>  3.1 游戲結(jié)構(gòu)設(shè)計(jì)13</p><p>  3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)14</p><p>  3.3 算法設(shè)計(jì)15</p><p>  3.4 本章小結(jié)23</p><p>  第4章 游戲詳細(xì)設(shè)計(jì)24</p><p>  4.1 游戲功

14、能設(shè)計(jì)24</p><p><b>  4.2類模型25</b></p><p>  4.3 玩家坦克的功能屬性26</p><p>  4.4 敵人坦克的功能屬性26</p><p>  4.5子彈的運(yùn)行和控制27</p><p>  4.6 坦克的控制和敵方的智能運(yùn)行28</

15、p><p>  4.7 本章小結(jié)30</p><p>  第5章 游戲?qū)崿F(xiàn)31</p><p>  5.1游戲規(guī)則及運(yùn)行界面31</p><p>  5.1.1 游戲步驟31</p><p>  5.1.2 操作31</p><p>  5.1.3 游戲規(guī)則及運(yùn)行界面31</p&g

16、t;<p>  5.2本章小結(jié)36</p><p>  第6章 本游戲中關(guān)鍵技術(shù)和要改進(jìn)的地方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本程序要改進(jìn)的地方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)驗(yàn)和感想41</p><p>&l

18、t;b>  參考文獻(xiàn)42</b></p><p><b>  第1章 緒論</b></p><p><b>  1.1項(xiàng)目背景</b></p><p>  1.1.1 國內(nèi)背景</p><p>  早期的游戲不能被廣泛接受最主要的就是該引擎沒有具備廣泛的硬件支持幅度,不能夠自上而

19、下充分發(fā)揮各等級(jí)硬件的運(yùn)算資源。目前PC游戲銷量萎靡(相對(duì)于游戲機(jī))的主要病根之一就是PC平臺(tái)不同等級(jí)的硬件性能相差甚巨,而大部分PC游戲?qū)Σ煌?jí)別的硬件支持范圍又不夠廣,所以往往要么是配置需求過高,要么就是畫質(zhì)跟不上時(shí)代,導(dǎo)致玩家接受面小而嚴(yán)重影響銷量。而過去暴雪的游戲之所以能夠贏得如此龐大的玩家追捧,除了作品本身的優(yōu)秀質(zhì)量以外,相對(duì)較廣的硬件支持同樣功不可沒。能夠很好兼顧當(dāng)時(shí)高配置下的優(yōu)秀畫質(zhì)以及低端配置下同樣能夠提供流暢的游戲體驗(yàn)

20、而聞名。</p><p>  國內(nèi)大多數(shù)玩家接觸的《坦克大戰(zhàn)》,都是經(jīng)傅瓚改造后的版本,經(jīng)典坦克游戲的編程:原版《坦克大戰(zhàn)》一共35關(guān),玩家的任務(wù)是保住己方司令部,并消滅敵方20輛坦克。傅瓚對(duì)原版的地圖和參數(shù)進(jìn)行修改,增加了一系列新關(guān)卡,這就是最早的“煙山版”《坦克大戰(zhàn)》——《坦克7》(進(jìn)入游戲后有“TANK A”至“TANK G”七個(gè)選項(xiàng),因此得名)。之后他又陸續(xù)制作了《坦克14》、《坦克28》、《89坦克》和

21、《90坦克》等版本,加入了敵方坦克吃寶物、雙打時(shí)互借坦克等功能,以及水陸兩用坦克(可渡河的船)和火焰噴射器(可削草的手槍)等寶物,這些內(nèi)容都是原版沒有的。</p><p>  作為這一系列的集大成者,《90坦克》是其中流傳最廣的一款。其辨識(shí)方法也很簡單,《90坦克》在B3、B5、B6和B7四版的地圖上,分別有“福州”、“煙山”、“軟件”和“542408”(電話號(hào)碼)的字樣,這大約是國內(nèi)最早的游戲內(nèi)置廣告。<

22、/p><p>  憑借“坦克”系列,煙山軟件的營業(yè)額再次翻番,1989年突破200萬元,又推出了《導(dǎo)彈坦克》?!秾?dǎo)彈坦克》已不再滿足于對(duì)地圖和參數(shù)的簡單編輯,還對(duì)游戲程序做了修改,增加了發(fā)射導(dǎo)彈、加固工事等新玩法。玩家發(fā)射的導(dǎo)彈可以越過地圖上的所有障礙,還可以轉(zhuǎn)彎;導(dǎo)彈用完后,玩家可以用A鍵加固工事或設(shè)置路障,將坦克開到磚或石頭前,按A鍵舉起磚石,到需要加固或設(shè)置路障的地方,再按A鍵放下?!秾?dǎo)彈坦克》,連同煙山軟件漢

23、化的《煙山杯圍棋》、《中文麻將》和《中國象棋》等另外三款游戲,被制作成四合一卡帶,這盤卡帶的母片(未加密的芯片)后來被賣給了一家臺(tái)灣公司,這也使煙山軟件無意間成為了國內(nèi)第一家“進(jìn)軍海外”的游戲公司。</p><p>  1.1.2 國外背景</p><p>  FC(Family Computer)主機(jī)在歐美又稱Nintendo Entertainment System(可譯作任天堂娛樂平

24、臺(tái)即NES)。FC主機(jī)在游戲業(yè)界造成的巨大沖擊眾所周知,這款主機(jī)在當(dāng)時(shí)事實(shí)上幾乎占領(lǐng)了世界各地多個(gè)國家的整個(gè)游戲市場(chǎng),并使得逐漸沒落的北美游戲市場(chǎng)再度復(fù)蘇。這款主機(jī)的性能比當(dāng)時(shí)的多數(shù)主機(jī)都要強(qiáng)大,而價(jià)格上卻便宜得多。主機(jī)所采用得處理器為CMOS 6502,一款已經(jīng)淘汰的70年代中期產(chǎn)品。由于其價(jià)格便宜且極易使用,經(jīng)過任天堂的改造后又煥發(fā)了全新活力。6502 芯片 主頻為8 bit,12 MHz,內(nèi)存8k,畫面 52色,同屏最多顯示其中的

25、13色,聲音2個(gè)矩波,1個(gè)三角波,1個(gè)雜音,1個(gè)PCM音頻(見圖1-1)。 </p><p>  Battle City是其發(fā)售卡帶中的一款力作,設(shè)置了35個(gè)關(guān)卡,可以雙人操縱,畫面設(shè)置了若干種類的建筑物和阻擋物,以消滅所有敵人為通關(guān)條件,并有接寶物等增加游戲效果的設(shè)置,畫面精美,音效杰出,在PC機(jī)的80386處理器仍未面世的當(dāng)時(shí),能在硬件上運(yùn)行這樣的2D程序不得不令人驚嘆,難怪

26、常有人說游戲程序是最大限度發(fā)揮硬件水平的載體。其游戲界面如圖1-2所示。</p><p>  早期的游戲難免粗陋和簡單,因?yàn)楝F(xiàn)在發(fā)展太快的游戲行業(yè)正缺少了那些讓我們初次就愛上的游戲。還有技術(shù)性封閉測(cè)試主要是以測(cè)試版本穩(wěn)定性為主,測(cè)試期間可能出現(xiàn)各類技術(shù)問題。暴雪這種精益求精的公司,實(shí)際上游戲開發(fā)人員的第一個(gè)內(nèi)部開發(fā)版本就因?yàn)楫嬶L(fēng)太過于類似魔獸而被徹底推翻重來,而如今面對(duì)這個(gè)十年磨一劍的續(xù)作,我們不難猜想暴雪對(duì)其重

27、視程度已經(jīng)達(dá)到嘔心瀝血的程度!這款繼承經(jīng)典的游戲,給國人重鑄的玩家?guī)砭W(wǎng)游的新天地。所以玩家全心關(guān)注,官網(wǎng)急速啟動(dòng),研發(fā)部門日夜奮斗,只為一個(gè)目標(biāo):在第一時(shí)間開啟坦克大戰(zhàn)這款世紀(jì)經(jīng)典游戲的網(wǎng)游增強(qiáng)版。其中坦克與技能卡都能得到升級(jí)的機(jī)會(huì),經(jīng)過強(qiáng)化與改造,能讓一輛坦克產(chǎn)生翻天覆地的變化。</p><p>  縱觀IT產(chǎn)業(yè)的歷史,就像軍事的發(fā)展時(shí)常推動(dòng)計(jì)算機(jī)的演化一樣,計(jì)算機(jī)游戲已經(jīng)成為技術(shù)創(chuàng)新背后的動(dòng)力之一。計(jì)算機(jī)游

28、戲者渴望更加強(qiáng)大的硬件計(jì)算能力;渴望不受不同的軟件的限制——無論是將圖形強(qiáng)制在人工智能(AI)上 還是網(wǎng)絡(luò)安全性上。游戲開發(fā)者和玩家常常是前沿計(jì)算機(jī)技術(shù)的最早的采用者。由于他們的創(chuàng)新天性,游戲不再是由大型采購公司控制的技術(shù)產(chǎn)品——游戲領(lǐng)域總是有充足的空間給那些在這方面有天分的單個(gè)創(chuàng)新者。</p><p><b>  1.2項(xiàng)目來源</b></p><p>  進(jìn)入21

29、世紀(jì),社會(huì)競(jìng)爭日趨激烈,同時(shí)人們的生活壓力日益增大,為了在緊張的社會(huì)環(huán)境給人們帶來休閑的快樂,各大游戲公司相繼開發(fā)種種其樂無窮的游戲。其中坦克大戰(zhàn)就是其中的一款。坦克大戰(zhàn)早在上世紀(jì)是由日本專家任天堂的開發(fā)的,后流傳到中國福建,在福建的一所高校中,由一位物理老師傅瓚修改后流行于整個(gè)大陸,現(xiàn)在人們所玩的坦克大戰(zhàn)游戲大部分都是在傅瓚的基礎(chǔ)上修改的,出于對(duì)游戲開發(fā)的興趣與好奇,便嘗試開發(fā)了此游戲</p><p>  1.

30、3設(shè)計(jì)游戲的必備知識(shí)</p><p>  1.3.1 Java語言程序設(shè)計(jì)的基本知識(shí)點(diǎn)</p><p>  1.java語言支持面向?qū)ο蟪绦蛘Z言的三個(gè)關(guān)鍵特性</p><p><b>  (1)封裝</b></p><p>  將對(duì)象的數(shù)據(jù)與操作數(shù)據(jù)的方法相結(jié)合,通過方法將對(duì)象的數(shù)據(jù)和實(shí)現(xiàn)的細(xì)節(jié)保護(hù)起來。</p&g

31、t;<p><b>  (2)繼承</b></p><p>  當(dāng)一個(gè)類是另一個(gè)類的特例時(shí),這兩個(gè)類之間具有父子關(guān)系。子類就可以繼承了父類的狀態(tài)(變量)和行為(方法),子類可以重用父類的這部分代碼。繼承關(guān)系減少了程序中相似代碼的重復(fù)說明。程序員可以再父類中對(duì)一些共同操作與屬性只說明一次,而在子類中,基于子類的特性再進(jìn)行擴(kuò)展或是改變。并且繼承具有傳遞性。</p>&

32、lt;p><b>  (3)多態(tài)</b></p><p>  多態(tài)可以表達(dá)為,對(duì)外一個(gè)接口,內(nèi)部多重實(shí)現(xiàn)。Java語言支持2種形式的多態(tài)。運(yùn)行時(shí)多態(tài),和編譯時(shí)多態(tài)是通過方法的重載實(shí)現(xiàn)編譯時(shí)的多態(tài),而遇到類之間的繼承性,方法的重實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)。</p><p>  2.類和對(duì)象的基本概念</p><p>  類和對(duì)象是java中的基本組成要

33、素。類描述了同一類對(duì)象都舉要的數(shù)據(jù)和行為。創(chuàng)建一個(gè)新類,就是創(chuàng)建了一種新的數(shù)據(jù)類型。</p><p>  類有兩種基本成分:變量和方法,成為成員變量和成員方法。</p><p>  (1)public 說明了類的屬性。Extend表示類繼承了superclassname為父名的父類,implements關(guān)鍵詞表示類實(shí)現(xiàn)了interfacenamelist中列出的各個(gè)接口。</p>

34、;<p> ?。?)public的屬性表明任意類均可以訪問這個(gè)類,如果類聲明中沒有public,則只有定義在同一個(gè)包中的類才能訪問這個(gè)類。</p><p> ?。?)類體。類體提供了這個(gè)類的對(duì)象在生命周期中需要的代碼, 構(gòu)造和初始化新對(duì)象的構(gòu)造方法。</p><p> ?。?)類的封裝與隱藏</p><p>  Java中類成員的訪問權(quán)限有: pub

35、lic , private,以及默認(rèn)權(quán)限(是沒有任何定義符的)。利用這種訪問權(quán)限可以控制類中的信息的隱藏程度。</p><p>  (5)方法體中可以聲明方法中所用到的局部變量,它的作用域只在該方法的內(nèi)部,如果局部變量的名字和類的成員變量的名字相同,則成員變量被隱藏。如果要將該成員變量顯露出來,則需要在該變量前加修飾符this。</p><p><b>  3.方法的重寫<

36、/b></p><p>  在類的層次結(jié)構(gòu)中,當(dāng)子類的成員變量與父類的成員變量同名時(shí),子類的成員變量會(huì)將父類的成員變量隱藏。</p><p>  方法重寫:子類可以改寫父類方法所實(shí)現(xiàn)的功能。</p><p>  4.static關(guān)鍵詞</p><p>  在成員變量聲明是用static,是是該變量聲明我靜態(tài)變量。靜態(tài)變量只是在系統(tǒng)加載所

37、在的類時(shí),分配空間并初始化。</p><p>  main方法是一個(gè)靜態(tài)方法,它是程序的入口點(diǎn)。</p><p><b>  5.接口</b></p><p>  與類相比,接口只是規(guī)定了一個(gè)類的基本形式,不涉及什么實(shí)現(xiàn)的細(xì)節(jié)。接口只是進(jìn)行方法的聲明,不提供任何方法的實(shí)現(xiàn)接口中的所用方法都是抽象的,一個(gè)類可以顯現(xiàn)多個(gè)接口, 的淚但是只能繼承一個(gè)

38、抽象的父類接口與顯現(xiàn)它的類不構(gòu)成繼承體系。</p><p><b>  6.包</b></p><p>  為了使類易于查找和使用,為了避免命名沖突,我們將一組相關(guān)類和接口包裹在一起形成包。</p><p>  7.子類和父類,而沒有說明抽象類的作用。抽象類是據(jù)有一個(gè)或多個(gè)抽象方法的類,必須聲明為抽象類。抽象類的特點(diǎn)是,不能創(chuàng)建實(shí)例上面講的只是

39、子類和父類。而沒有說明抽象類的作用。抽象類是據(jù)有一個(gè)或多個(gè)抽象方法的類,必須聲明為抽象類。</p><p>  8.抽象類與接口緊密相關(guān)。然而接口又比抽象類更抽象,這主要體現(xiàn)在它們的差別上:類可以實(shí)現(xiàn)無限個(gè)接口,但僅能從一個(gè)抽象(或任何其他類型)類繼承,從抽象類派生的類仍可實(shí)現(xiàn)接口,從而得出接口是用來解決多重繼承問題的。抽象類當(dāng)中可以存在非抽象的方法,可接口不能且它里面的方法只是一個(gè)聲名必須用public來修飾沒

40、有具體實(shí)現(xiàn)的方法。抽象類中的成員變量可以被不同的修飾符來修飾,可接口中的成員變量默認(rèn)的都是靜態(tài)常量(static final)。這一點(diǎn)也是最重要的一點(diǎn)本質(zhì)的一點(diǎn)"抽象類是對(duì)象的抽象,然接口是一種行為規(guī)范。 </p><p>  1.3.2 Java語言的特性</p><p><b>  1.平臺(tái)無關(guān)性</b></p><p>  Ja

41、va引進(jìn)虛擬機(jī)原理,并運(yùn)行于虛擬機(jī),實(shí)現(xiàn)不同平臺(tái)之間的Java接口。使用Java編寫的程序能在世界范圍內(nèi)共享。Java的數(shù)據(jù)類型與機(jī)器無關(guān)。</p><p><b>  2.安全性</b></p><p>  Java的編程類似C++,但舍棄了C++的指針對(duì)存儲(chǔ)器地址的直接操作,程序運(yùn)行時(shí),內(nèi)存由操作系統(tǒng)分配,這樣可以避免病毒通過指針入侵系統(tǒng)。它提供了安全管理器,防止

42、程序的非法訪問。</p><p><b>  3.面向?qū)ο?lt;/b></p><p>  Java吸收了C++面向?qū)ο蟮母拍睿瑢?shù)據(jù)封裝于類中,實(shí)現(xiàn)了程序的簡潔性和便于維護(hù)性,使程序代碼可以只需一次編譯就可反復(fù)利用。</p><p><b>  4.健壯性</b></p><p>  Java致力與檢

43、查程序在編譯和運(yùn)行時(shí)的錯(cuò)誤,并自動(dòng)回收內(nèi)存,減少了內(nèi)存出錯(cuò)的可能性。Java取消了C語言的結(jié)構(gòu)、指針、#define語句、多重繼承、操作符、重載等不易被掌握的特性,提供垃圾收集器自動(dòng)回收不用的內(nèi)存空間。</p><p><b>  第2章 需求分析</b></p><p>  需求分析即是分析用戶的需求,是軟件計(jì)劃時(shí)建立的可行性進(jìn)行細(xì)化與精確,分配軟件元素,是軟件定義

44、時(shí)期的最后一個(gè)階段,它的基本任務(wù)是確定系統(tǒng)必須做什么。是對(duì)要做的系統(tǒng)確定一個(gè)完整的、具體的、清晰的、準(zhǔn)確的要求??梢苑譃樾枨蟮奶岢觯枨蟮拿枋?,需求的評(píng)審等階段。需求分析也是設(shè)計(jì)數(shù)據(jù)庫的起點(diǎn),需求分析的結(jié)果是否準(zhǔn)確地反映了用戶的實(shí)際要求,將直接影響到后面各個(gè)階段的設(shè)計(jì),并影響到設(shè)計(jì)結(jié)果是否合理和實(shí)用。</p><p>  需求分析的任務(wù)是通過詳細(xì)調(diào)查現(xiàn)實(shí)世界要處理的對(duì)象(坦克、子彈、墻等),充分了解游戲的運(yùn)行概況

45、,明確開發(fā)游戲的各種需求,然后在此基礎(chǔ)上確定游戲的功能。調(diào)查的重點(diǎn)是“數(shù)據(jù)”和“處理”,通過調(diào)查、收集與分析,獲得開發(fā)游戲的如下要求:信息要求、處理要求、安全性與健壯性要求。</p><p><b>  2.1系統(tǒng)需求分析</b></p><p>  坦克大戰(zhàn)主要需要我方坦克和對(duì)方坦克,還有我的基地,磚墻,鐵墻,水,綠草,開始背景,游戲勝利背景,游戲結(jié)束背景,以及各種

46、事件觸發(fā)音樂。我方坦克和對(duì)方坦克都可以上下左右移動(dòng),游戲的玩家通過相應(yīng)的鍵來控制坦克的移動(dòng)和發(fā)射子彈,對(duì)方坦克在創(chuàng)建的時(shí)候就能夠發(fā)出子彈。當(dāng)我方子彈與敵軍坦克相碰時(shí)會(huì)有爆炸效果產(chǎn)生。當(dāng)我方坦克被對(duì)方的子彈打中,或者總部被毀時(shí)或者我方坦克打中對(duì)方坦克的數(shù)目達(dá)到某個(gè)值時(shí)游戲結(jié)束。</p><p><b>  2.2用況建模</b></p><p>  游戲中敵我雙方坦克均

47、可完成射擊,開動(dòng)的功能,但己方坦克的運(yùn)行是通過鍵盤響應(yīng)事件控制,而敵方坦克是根據(jù)設(shè)定相應(yīng)的休眠周期來控制運(yùn)行的。同時(shí),出現(xiàn)在屏幕上的敵方可能會(huì)有較多的數(shù)量,這需要為每個(gè)敵方開辟一個(gè)線程以便能讓其獨(dú)立運(yùn)行。Java的多線程能力為實(shí)現(xiàn)這樣的游戲提供了可能。敵人坦克的運(yùn)行算法也需要進(jìn)行適當(dāng)?shù)脑O(shè)置,以免游戲過于簡單,單調(diào)。</p><p><b>  2.3活動(dòng)建模</b></p>&

48、lt;p><b>  圖2-2游戲活動(dòng)圖</b></p><p>  游戲沒開始前是一個(gè)由玩家確定是否開始的界面,玩家輸入1開始游戲,每一關(guān)坦克數(shù)量不同,隨著關(guān)數(shù)的增加,坦克數(shù)量也在不斷增加,我方坦克不關(guān)在哪一關(guān)生命值用完了游戲便結(jié)束,但只有游戲進(jìn)行到最后一關(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平臺(tái)的四個(gè)版本</p><p>  雖然 Java 已經(jīng)被用到許多企業(yè)級(jí)軟體上,可是其實(shí)骨子里面還是非常適合用在嵌入式系統(tǒng)之中。Java平臺(tái)演進(jìn)到Java2后,Java平臺(tái)分別針對(duì)不同領(lǐng)域

51、的需求被分成四個(gè)版本,亦即J2EE、J2SE、J2ME以及Java Card,其結(jié)構(gòu)示意圖見圖2-3。</p><p>  圖2-3 java版本</p><p>  J2EE是Java2的標(biāo)準(zhǔn)版,其核心是一組技術(shù)規(guī)范與指南,其中所包含的各類組件、服務(wù)架構(gòu)及技術(shù)層次,均有共同的標(biāo)準(zhǔn)及規(guī)格,讓各種依循J2EE架構(gòu)的不同平臺(tái)之間,存在良好的兼容性,解決過去企業(yè)后端使用的信息產(chǎn)品彼此之間無法兼容

52、,企業(yè)內(nèi)部或外部難以互通的窘境。</p><p>  J2SE是Java2的標(biāo)準(zhǔn)版,是J2EE的基礎(chǔ),定位在客戶端,主要用于桌面應(yīng)用軟件的編程,它大量的JDK代碼庫是每個(gè)要學(xué)習(xí)J2EE的編程人員必須掌握的,它包含那些構(gòu)成Java語言核心的類。 比如:數(shù)據(jù)庫連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程 </p><p>  J2ME是為機(jī)頂盒、移動(dòng)電話和PDA之類嵌入式消費(fèi)電子設(shè)備提供的Java語言

53、平臺(tái),包括虛擬機(jī)和一系列標(biāo)準(zhǔn)化的Java API。</p><p>  Java Card技術(shù)主要是讓智慧卡或與智慧卡相近的裝置上,以具有安全防護(hù)性的方式來執(zhí)行小型的Java Applet,此技術(shù)也被廣泛運(yùn)用在SIM卡、提款卡上。</p><p><b>  2.6 本章小結(jié)</b></p><p>  本章主要講述坦克大戰(zhàn)游戲所需要的元素以及

54、國內(nèi)外游戲的發(fā)展背景。以及介紹了國外任天堂(Nintendo)的8位FC機(jī)器和Battle City游戲程序,同時(shí)介紹了java語言的特性和關(guān)鍵知識(shí)點(diǎn)和開發(fā)環(huán)境,由于J2ME平臺(tái)的好多特征對(duì)企業(yè)組織發(fā)展都有益,所以它被廣大設(shè)備制造商、網(wǎng)絡(luò)通信公司和消費(fèi)者廣泛接受。所以J2ME平臺(tái)是未來Java平臺(tái)發(fā)展的重點(diǎn)項(xiàng)目。</p><p>  另外因?yàn)镴2ME應(yīng)用在不同設(shè)備上都是便攜式的,他們常常可在網(wǎng)絡(luò)上下載和執(zhí)行。Ja

55、va被設(shè)計(jì)成一種安全的語言。所有字節(jié)碼應(yīng)用在執(zhí)行之前都要校驗(yàn);JVM在執(zhí)行過程中監(jiān)督應(yīng)用的安全性。</p><p><b>  第3章 游戲設(shè)計(jì)</b></p><p>  本游戲中設(shè)計(jì)的主要研究的內(nèi)容:敵我雙方的坦克以及子彈均以圖片方式顯示,并且添加游戲包含河、墻等環(huán)境元素。使用多線程來控制坦克的動(dòng)作同時(shí)使用緩沖技術(shù)來減少游戲過程中屏幕的閃動(dòng)率,當(dāng)游戲的難度會(huì)隨殺死

56、敵人數(shù)量的增加而自動(dòng)提高。敵人中包含特殊坦克,殺死后會(huì)隨機(jī)出現(xiàn)獎(jiǎng)勵(lì)物品,我方坦克是有生命值控制的。本游戲采用版本升級(jí)的方式逐步完善游戲功能。</p><p>  3.1 游戲結(jié)構(gòu)設(shè)計(jì)</p><p>  本游戲中有游戲主窗口程序模塊,坦克類模塊,子彈模塊,河流模塊,墻壁模塊,及容納這些物體的父類容器模塊,獎(jiǎng)勵(lì)模塊,爆炸顯示模塊,配置讀取模塊,這寫模塊之間相互聯(lián)系,如圖3-1所示。</

57、p><p>  圖3-1 游戲結(jié)構(gòu)圖</p><p>  3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</p><p>  游戲中各個(gè)元素定義成線程類,并且在一定的條件下某些元素隨機(jī)消失,隨機(jī)出現(xiàn),因此為了操作的方便,將這些元素均存放在鏈表中,采用鏈表而不采用數(shù)組是因?yàn)閷?duì)鏈表的插入和刪除操作容易,且其占用內(nèi)存的空間是可變的,不用像數(shù)組那樣事先需要為其分配一定的存儲(chǔ)空間,因此鏈表還節(jié)省了空間。此

58、外,還用到了泛型,將泛型和鏈表結(jié)合使用,是為了方便在從鏈表中取出元素時(shí)無需強(qiáng)制轉(zhuǎn)換。各元素的數(shù)據(jù)結(jié)構(gòu)如下表所示:</p><p><b>  表3.1 數(shù)據(jù)結(jié)構(gòu)</b></p><p><b>  3.3 算法設(shè)計(jì)</b></p><p>  本游戲中每個(gè)可以移動(dòng)的對(duì)象都將其設(shè)置成一個(gè)線程,即敵我雙方坦克,子彈均是以線程的

59、形式出現(xiàn)在游戲中的,此外游戲中還設(shè)置了磚墻,河流,草皮,鋼鐵獎(jiǎng)勵(lì)物品等元素,這些元素都是以圖片的形式出現(xiàn)在游戲中,并且存放在列表中。游戲過程中,坦克和子彈有時(shí)會(huì)碰撞到這些元素,當(dāng)坦克碰撞到墻,河流,鋼鐵時(shí)就會(huì)改變方向,而子彈可以擊碎磚墻無法擊碎鋼鐵,關(guān)于碰撞都是通過難證坐標(biāo)是否重合實(shí)現(xiàn)的,以下是具體實(shí)現(xiàn)。</p><p>  1.敵我雙方坦克在界面中是以圖片的形式呈現(xiàn)的,并存放中定義好的鏈表中,游戲中為其定義了全

60、局變量ruined,類型為布爾型的,用來判斷坦克是否被摧毀,當(dāng)其值為true說明坦克被摧毀,此外還定義了函數(shù)Stop_down(),Stop_up(),Stop_right(), Stop_left()來判斷坦克是否撞擊了墻,其返回類型同樣是布爾型,最后我方坦克定義了fire()函數(shù)用來射擊,敵方坦克定義了shoot()函數(shù)射擊子彈,在游戲中的運(yùn)行情況如圖3-2</p><p>  圖3-2敵我雙方坦克</

61、p><p>  當(dāng)敵人坦克完全死亡時(shí),即tanks.size()為0且flag達(dá)到相應(yīng)的值,需調(diào)用clear()函數(shù)清空桌面上的敵我雙方子彈和其它元素,然后進(jìn)入下一關(guān),重新轉(zhuǎn)回畫面。當(dāng)然,如果當(dāng)前已是最后一關(guān),就不會(huì)再轉(zhuǎn)回。進(jìn)入下一關(guān)時(shí),許多變量需要重新被初始化,如地圖的繪制、敵人出現(xiàn)位置的重置、敵人的數(shù)量、玩家坦克的當(dāng)前位置。如果游戲未結(jié)束,則需判斷屏上坦克是否已小于還剩坦克的總數(shù),如果是這樣,就需要再提供一批坦克

62、。</p><p>  2.敵軍子彈的線程在敵軍坦克出現(xiàn)時(shí)就啟動(dòng)了,為了讓子彈移動(dòng)并且給玩家在視覺上達(dá)到子彈移動(dòng)的效果,將子彈線程的休眠時(shí)間設(shè)為200毫秒。敵我雙方子彈同樣是放在列表中,并且每顆子彈都有屬主,當(dāng)子彈的屬主被摧毀時(shí),即ruined的值為true時(shí),子彈也會(huì)死亡,也就是說存放子彈的鏈表將被清空,最后定義函數(shù)shoot_fe(),shoot_bride(),shoot_home(),succeed()來

63、判斷子彈是否擊中相應(yīng)的墻和對(duì)方坦克,其類型都是布爾類型,當(dāng)子彈擊中墻或?qū)Ψ教箍藭r(shí)就會(huì)通過start()函數(shù)來啟動(dòng)爆炸效果線程,子彈在游戲中的運(yùn)行情況如圖3-3</p><p><b>  圖3-3子彈的運(yùn)行</b></p><p>  子彈是一個(gè)繼承了Thread類的可運(yùn)行單獨(dú)線程的對(duì)象,在其出現(xiàn)在屏幕上的運(yùn)行周期中,每一步都需要循環(huán)檢測(cè)以下條件:是否與某坦克發(fā)生了碰

64、撞,即擊中了這輛坦克。子彈使用的是象素級(jí)的碰撞檢測(cè),因?yàn)樽訌椀膱D片形狀不規(guī)則,如果使用矩形碰撞檢測(cè),將有可能在子彈尚未接觸到物體時(shí)就已返回碰撞的真值。</p><p>  3.敵軍坦克在游戲一開始時(shí)就通過strat()函數(shù)啟動(dòng)線程,之后坦克就會(huì)向著隨機(jī)產(chǎn)生的方向前進(jìn),方向是通過random()函數(shù)產(chǎn)生的,0,1,2,3分別表示上下左右,坦克的移動(dòng)步數(shù)是根據(jù)坦克的等級(jí)不同而定,定義level來表示坦克的等級(jí),其中坦

65、克的移動(dòng)步數(shù)和level之間在的關(guān)系為moveing=level * 2 + 6,敵軍方向的控制如圖3-4</p><p>  圖3-4敵軍坦克的控制 </p><p>  讓敵軍坦克更加智能,同時(shí)動(dòng)起來,構(gòu)造函數(shù)中可以指定方向,new敵軍坦克的時(shí)候指定敵軍坦克的方向,讓敵軍坦克向隨機(jī)方向移動(dòng)。每次碰撞到墻時(shí),都會(huì)產(chǎn)生一個(gè)隨機(jī)方向,以便避開障礙物。</p><p>

66、  4.我方坦克的移動(dòng)是通過玩家敲擊鍵盤來控制的,程序中對(duì)玩家是否敲擊鍵盤加了監(jiān)聽,當(dāng)程序監(jiān)聽到玩家敲擊鍵盤時(shí),就響應(yīng)該事件,并在keyPressed()函數(shù)中判斷玩家按下的是哪個(gè)鍵,從而確定坦克的移動(dòng)方向和是否射擊子彈,當(dāng)監(jiān)聽到坦克需要射擊時(shí),調(diào)用fire()函數(shù)進(jìn)行射擊,如果我方坦克被擊毀時(shí),我方的坦克所分配的子彈也會(huì)從鏈表中清空,并且我方坦克分配子彈也是根據(jù)坦克的等級(jí)進(jìn)行分配的,等級(jí)越高分配的子彈也就越多,如圖3-5所示</

67、p><p><b>  圖3-5 我方坦克</b></p><p>  KeyBoardLis類繼承了KeyListener類,采取響應(yīng)鍵盤事件的方法,每次執(zhí)行周期時(shí)會(huì)讀取KeyPressed()函數(shù)中需執(zhí)行的代碼。本程序?yàn)樘箍硕x了4個(gè)方向(上下左右),先定位坦克的初始方向。根據(jù)按鍵狀態(tài)確定坦克的方向是用key pressed ()這個(gè)方法來實(shí)現(xiàn)的。其中定義了x軸和y軸

68、,按下A鍵,橫坐標(biāo)減少相應(yīng)的值,按下D橫坐標(biāo)增加相應(yīng)的值,按下W鍵縱坐標(biāo)減少相應(yīng)的值,而按下S鍵縱坐標(biāo)增加相應(yīng)的值,具體的值根據(jù)坦克的等級(jí)而定。</p><p>  5.本游戲共設(shè)為三關(guān),隨著關(guān)數(shù)的遞增,每關(guān)的坦克數(shù)量也會(huì)增加,也就是說游戲的難度會(huì)逐漸加大,敵軍坦克分批出現(xiàn)在屏幕上,每批五個(gè),在程序中定義變量flag用作標(biāo)志,用來控制每關(guān)應(yīng)該出現(xiàn)多少批,每殲滅敵軍一批坦克,就再增加五個(gè)并且flag自增,每關(guān)的自增

69、的次數(shù)不一樣,自增的次數(shù)決定了坦克的批數(shù),每一關(guān)過到規(guī)定的批數(shù)時(shí)就通關(guān),如果當(dāng)前是最后一關(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é)束時(shí)都判斷當(dāng)前是否處于最后一關(guān),如果是

70、則顯示YOU WIN的字樣,如果不是則自動(dòng)轉(zhuǎn)到下一關(guān)繼續(xù)游戲,直到最后一關(guān)。如果玩家在任何一關(guān)不辛陣亡,則游戲也結(jié)束,只不過顯示的是GAME OVER的字樣。</p><p>  6.為了增加游戲的趣味性,游戲過程中會(huì)隨機(jī)出現(xiàn)獎(jiǎng)勵(lì)物品,游戲中設(shè)置了三種獎(jiǎng)勵(lì)物品,當(dāng)坦克的坐標(biāo)和這些物品的坐標(biāo)重合時(shí),坦克就可以撿到這些物品,獎(jiǎng)勵(lì)出現(xiàn)與消失如圖3-7所示</p><p>  圖3-7獎(jiǎng)勵(lì)出現(xiàn)與消

71、失</p><p>  游戲中設(shè)置了獎(jiǎng)勵(lì)道具,當(dāng)count的值等于100時(shí),就會(huì)在屏幕上隨機(jī)出現(xiàn)一個(gè)獎(jiǎng)勵(lì)道具,每個(gè)道具都會(huì)有自己的生命值,定義道具生命值life為100,從道具剛出現(xiàn)時(shí),life就做自減操作,當(dāng)life的值為0時(shí),道具就從屏幕上消失,在道具消失前如果坦克撿到道具,坦克就會(huì)有相應(yīng)的變化。其中道具有三種,生命坦克、手槍、炸彈。玩家撿到生命坦克時(shí),生命值會(huì)增加;敵軍撿到生命坦克時(shí),我方坦克生命值減少。雙

72、方坦克撿到手槍時(shí),坦克速度都會(huì)增加,子彈的威力也會(huì)增加。我方坦克撿到炸彈時(shí),敵軍就會(huì)有一輛坦克爆炸,反之亦然。</p><p>  7.用文件保存玩家擊毀敵軍坦克的數(shù)量如圖3-8所示</p><p>  圖3-8保存擊毀敵軍數(shù)量</p><p>  每一關(guān)擊毀多少量敵軍坦克都以文件的形式保存在record中,這樣便于統(tǒng)計(jì)玩家的最好成績,這樣增加了游戲的挑戰(zhàn)性<

73、/p><p>  8.用文件保存屏幕上所有的元素坐標(biāo)如圖3-9所示</p><p>  圖3-9保存屏幕上所有元素坐標(biāo)</p><p>  從當(dāng)前關(guān)卡退出游戲時(shí),屏幕上所有元素的坐標(biāo)都以文件形式的保存起來,這樣便于一次可以繼續(xù)本次退出的位置,進(jìn)一步增加了游戲的友好性。</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í)的數(shù)據(jù)類型才有意義。</p><p><b>  3.4 本章小結(jié)</b></p><p>  本章主介要紹了

75、游戲的結(jié)構(gòu),即游戲的主成模塊,以及游戲中主要功能的算法設(shè)計(jì),通過對(duì)每個(gè)功能的分析和設(shè)計(jì)最終完成了整個(gè)游戲的設(shè)計(jì)。游戲開發(fā)過程中遇到很多困難,但只要專心,堅(jiān)持,一切困難都會(huì)解決的。</p><p>  第4章 游戲詳細(xì)設(shè)計(jì)</p><p>  4.1 游戲功能設(shè)計(jì)</p><p>  游戲中敵我雙方坦克均可完成射擊,開動(dòng)的功能,但己方坦克的運(yùn)行是通過鍵盤響應(yīng)事件控制,

76、而敵方坦克是根據(jù)設(shè)定相應(yīng)的休眠周期來控制運(yùn)行的。</p><p>  下面是對(duì)本系統(tǒng)的主要功能模塊的功能進(jìn)行介紹</p><p><b>  1、我方坦克的功能</b></p><p>  為了滿足游戲的友好性,我方坦克必須能夠射擊和移動(dòng),只有通過射擊才能擊敗敵軍,也只有移動(dòng)才能躲避敵軍的子彈和吃到獎(jiǎng)勵(lì)的物品,這樣才能達(dá)到游戲的真正的目的。我方

77、坦克的射擊和移動(dòng)都是通過響應(yīng)鍵盤事件來實(shí)現(xiàn)的,在玩家的操縱下向敵軍發(fā)動(dòng)進(jìn)攻。</p><p><b>  2、敵方坦克的功能</b></p><p>  敵軍能夠移動(dòng)和發(fā)射子彈,但他們的移動(dòng)和射擊都是隨機(jī)的,并且不需要玩家的操縱,它們是通過線程設(shè)定相應(yīng)的休眠周期來控制移動(dòng)和射擊,敵軍會(huì)向四個(gè)不同的方向移動(dòng)特定的步數(shù)和射擊,其中方向是通過隨機(jī)函數(shù)生成的。</p&g

78、t;<p><b>  3、敵軍子彈</b></p><p>  敵軍子彈也被設(shè)計(jì)成一個(gè)線程,敵軍每隔一段時(shí)間就會(huì)發(fā)射子彈,子彈也設(shè)定了休眠周期來控制自身的移動(dòng),當(dāng)子彈擊中墻時(shí)就會(huì)出現(xiàn)爆炸效果,子彈也隨之消失,擊中的墻如果是磚墻剛磚墻也消失,如果是鐵墻則只有子彈消失,如果擊中的是草和河流,則子彈可以通過,直到撞到邊框才消失,如果擊中我方坦克,程序會(huì)根據(jù)敵軍坦克的等級(jí)做出相應(yīng)的處

79、理。</p><p><b>  4、我方子彈</b></p><p>  我方坦克子彈也是被設(shè)計(jì)成了一個(gè)線程,但是該線程的啟動(dòng)是在玩家敲擊鍵盤的條件發(fā)生的,當(dāng)玩家敲擊鍵盤時(shí)線程啟動(dòng),子彈的就會(huì)以一定的速度向坦克的槍口的方向移動(dòng),當(dāng)子彈擊中墻時(shí)就會(huì)出現(xiàn)爆炸效果,子彈也隨之消失,擊中的墻如果是磚墻剛磚墻也消失,如果是鐵墻則只有子彈消失,如果擊中的是草和河流,則子彈可以通

80、過,直到撞到邊框才消失,如果擊中敵軍坦克,程序會(huì)根據(jù)敵軍坦克的等級(jí)做出相應(yīng)的處理。</p><p><b>  5、爆炸效果</b></p><p>  每一顆子彈在消失時(shí)都會(huì)出現(xiàn)爆炸,爆炸也是一個(gè)線程,只有當(dāng)子彈消失才能啟動(dòng)該線程,并且為了防止屏幕刷新時(shí)效果不佳,為此采用了雙緩沖技術(shù),雙緩沖主要就是去重寫update方法,在更新窗體時(shí)把下一個(gè)要顯示的圖片整體的畫到窗

81、體上去。這樣更增加了游戲的友好性和趣味性。</p><p><b>  6、獎(jiǎng)勵(lì)道具</b></p><p>  將每一個(gè)道具設(shè)置成一個(gè)線程,設(shè)置兩個(gè)計(jì)數(shù)器count和life,其中l(wèi)ife的初值設(shè)為100。count從游戲開始時(shí)就開始計(jì)數(shù),用來控制道具的出現(xiàn),當(dāng)count的值為100時(shí),采用隨機(jī)函數(shù)在屏幕上隨機(jī)產(chǎn)生一種道具。Life用來控制道具的消失,當(dāng)?shù)谰叱霈F(xiàn)時(shí)l

82、ife就開始做自減操作,當(dāng)life的值為0時(shí),道具就從屏幕上消失。在道具消失之前坦克可以拾撿道具,撿到道具后坦克會(huì)有相應(yīng)的變化。</p><p><b>  4.2類模型</b></p><p><b>  圖4-1設(shè)計(jì)類圖</b></p><p>  Monitor主管著所有類之間的協(xié)調(diào),決定何時(shí)死亡,何時(shí)轉(zhuǎn)入下一關(guān),及

83、游戲進(jìn)入界面、游戲結(jié)束后的Game over字樣。它運(yùn)行在獨(dú)立的線程中,以恒定的頻率刷新畫面。刷新速度需大于30/秒才能使畫面顯示因人眼的暫時(shí)停留效應(yīng)流暢運(yùn)行,在Tank類中定義了所有敵軍坦克的行為和屬性,在PlayerTank類中定義了玩家的坦克的行為和屬性。</p><p>  game over字樣、生命值和關(guān)卡統(tǒng)計(jì)畫面也都需在此主邏輯中建立相應(yīng)對(duì)象。還需保存的變量有:游戲開始時(shí)間、敵人的總數(shù)、屏幕上敵人的

84、數(shù)量,游戲是否已成功結(jié)束或是否已死亡。</p><p>  由于敵人將非一次性出現(xiàn)在屏幕上,同時(shí)出現(xiàn)的數(shù)量應(yīng)當(dāng)受控制。所以在構(gòu)造函數(shù)中,也應(yīng)當(dāng)分配對(duì)象的內(nèi)存空間。創(chuàng)建坦克時(shí),僅調(diào)用Tank(int x,int y)實(shí)現(xiàn)。</p><p>  在構(gòu)造函數(shù)自己調(diào)用了線程的start后,程序?qū)㈤_始循環(huán)運(yùn)行,直至跳出while的循環(huán)。每次循環(huán)中將檢測(cè)是否死亡,屏幕上坦克的數(shù)量,是否該過關(guān)。<

85、/p><p>  KeyBoardLis類檢測(cè)用戶輸入的keyPressed(KeyEvent e)函數(shù)中,當(dāng)按方向鍵時(shí),玩家坦克就將向不同的方向運(yùn)行;當(dāng)開炮時(shí),就調(diào)用其shoot()函數(shù),作出相應(yīng)的行為。</p><p>  在繪圖的過程中,除了要重繪坦克、地圖、子彈外,還要在左下角和左上角處繪出一個(gè)生命統(tǒng)計(jì)欄和關(guān)卡顯示欄。</p><p>  構(gòu)造函數(shù)中創(chuàng)建了每個(gè)坦

86、克必須擁有的一顆子彈,這些子彈就將只跟隨自己的坦克調(diào)動(dòng)。</p><p>  4.3 玩家坦克的功能屬性</p><p>  構(gòu)造函數(shù)中需要將坦克方向設(shè)置為向上,因?yàn)閯偝霈F(xiàn)時(shí)就是這樣的狀態(tài)。當(dāng)開炮時(shí),需要聯(lián)系的還有自身坦克、地圖。</p><p>  這些都由坦克傳遞給子彈。因?yàn)樽訌検菍儆谔箍说?,它的屬性需要跟?dāng)前的坦克保持一致。接著將子彈貼顯示出來。最終調(diào)用其st

87、art()開始子彈自己的線程。子彈一旦開始運(yùn)行,就脫離了當(dāng)前坦克的控制,直到其生命周期終止。</p><p>  無論子彈是屬于敵人還是玩家的,它都必須記錄自己的來源和攻擊的對(duì)象。在玩家坦克發(fā)射的子彈中,就必須將攻擊對(duì)象設(shè)置為所有的敵人。這樣,它才能有掃描的目標(biāo)。但卻提供必不可少的功能。他們可被外部調(diào)用,以取得生命值、死亡記數(shù)、重置位置。</p><p>  事實(shí)上,敵人坦克此時(shí)并沒有阻礙

88、玩家前進(jìn)。這樣的判斷必須排除在考慮范圍外。當(dāng)然,在設(shè)置完成后,必須將將檢測(cè)區(qū)域設(shè)置回原先的狀態(tài),否則敵人在往后自己的檢測(cè)中將發(fā)生錯(cuò)誤。</p><p>  4.4 敵人坦克的功能屬性</p><p>  首先,Tank繼承了Thread類。因?yàn)閿橙说倪\(yùn)行是自動(dòng)的,需要有設(shè)定的程序讓它可自己控制,而不像玩家坦克完全通過每次輸入的鍵盤信號(hào)來做出反映。因此,它可以運(yùn)行在單獨(dú)的線程中,并設(shè)有特定的

89、休眠周期。</p><p>  敵人的坦克數(shù)量是有一定限制的,第一關(guān)共10輛,第二關(guān)共15輛,第三關(guān)共20輛,每次屏幕上出現(xiàn)5輛坦克,每消滅5輛坦克就再添加5輛,直至規(guī)定的坦克數(shù)目。此外在坦克重生的地方,不能存在其他任何物體,例如河流,墻,坦克之類的,如果存在了,就要任意再選擇一個(gè)位置進(jìn)行重生。</p><p>  此外還設(shè)置了獎(jiǎng)勵(lì)道具,當(dāng)count的值等于100時(shí),就會(huì)在屏幕上隨機(jī)出現(xiàn)一

90、個(gè)獎(jiǎng)勵(lì)道具,每個(gè)道具都會(huì)有自己的生命值,定義道具生命值life為100,從道具剛出現(xiàn)時(shí),life就做自減操作,當(dāng)life的值為0時(shí),道具就從屏幕上消失,在道具消失前如果坦克撿到道具,坦克就會(huì)有相應(yīng)的變化。其中道具有三種,生命坦克、手槍、炸彈。玩家撿到生命坦克時(shí),生命值會(huì)增加;敵軍撿到生命坦克時(shí),我方坦克生命值減少。雙方坦克撿到手槍時(shí),坦克速度都會(huì)增加,子彈的威力也會(huì)增加。我方坦克撿到炸彈時(shí),敵軍就會(huì)有一輛坦克爆炸,反之亦然。</p

91、><p>  最后為了控制敵軍坦克的射擊,也定義了變量count,當(dāng)count 的值增長到15時(shí),敵軍就進(jìn)行發(fā)炮的動(dòng)作。發(fā)炮后應(yīng)立即重新賦值給count,以便重新計(jì)算。</p><p>  當(dāng)所有的步驟走完后,因?yàn)樾枰D(zhuǎn)動(dòng)方向,于是,調(diào)用一次隨機(jī)取得方向的函數(shù)再次獲值。其他的隨機(jī)值也應(yīng)當(dāng)重置。</p><p>  4.5子彈的運(yùn)行和控制</p><p

92、>  每一個(gè)坦克都有他自己的一顆子彈,這顆子彈在任何一輛坦克被構(gòu)造時(shí)就一直存在,直至此坦克生命的結(jié)束,子彈的再次只是將屏幕上暫時(shí)掩蓋的圖象重新置于坦克炮筒恰當(dāng)位置,并使其顯示出來,這與現(xiàn)實(shí)中每個(gè)子彈都是單獨(dú)的個(gè)體有所不同。</p><p>  子彈所需要完成的任務(wù)有:</p><p>  它是一個(gè)繼承了Thread類的可運(yùn)行單獨(dú)線程的對(duì)象。在其出現(xiàn)在屏幕上的運(yùn)行周期中,每一步都需要循

93、環(huán)檢測(cè)以下條件:</p><p>  是否與某坦克發(fā)生了碰撞,即擊中了這輛坦克。子彈使用的是象素級(jí)的碰撞檢測(cè),因?yàn)樽訌椀膱D片形狀不規(guī)則,如果使用矩形碰撞檢測(cè),將有可能在子彈尚未接觸到物體時(shí)就已返回碰撞的真值。</p><p>  此時(shí)分為兩種情況,如果此子彈來自于敵方,將只檢測(cè)玩家坦克,因?yàn)閿撤街g的子彈必須允許可以透明的穿過,以保證不會(huì)在敵人之間發(fā)生子彈的消減。如果來自玩家,則每一步需掃

94、描所有的敵方坦克,檢查是否發(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ì)不同障礙物將有不同的反映。對(duì)磚墻

95、將有能力將其擊毀,使之在畫面上消失;對(duì)鐵將不能發(fā)生作用,子彈也不能通過;對(duì)于河流,坦克不可以通過,但子彈可以;對(duì)于草叢,子彈和坦克都可以通過,但子彈和草是運(yùn)行在草之下的。</p><p>  子彈繼承了Thread,運(yùn)行在獨(dú)立的線程中。它標(biāo)識(shí)了該子彈是屬于玩家的,還是敵人的,這樣可以控制子彈在脫離坦克管束后的運(yùn)行狀態(tài)中的行為。</p><p>  shoot_bride()方法用來檢測(cè)是否

96、擊中磚,擊中磚塊時(shí),將產(chǎn)生爆炸,將當(dāng)前塊置為空,并產(chǎn)生爆炸效果。爆炸效果根據(jù)需要爆炸的坐標(biāo)點(diǎn)生成,其中將一個(gè)Sprite圖片在界面上閃現(xiàn)50毫秒。爆炸效果需要將圖片insert進(jìn)第0層,這樣才不至于被其他景物所覆蓋,爆炸結(jié)束后自動(dòng)相應(yīng)調(diào)整。擊中草時(shí),由于沒有定義相關(guān)函數(shù),就不會(huì)有任何反映,會(huì)重合在草上正常通過;shoot_fe()判斷是否擊中鐵,擊中鐵時(shí),將只產(chǎn)生爆炸效果。</p><p>  在線程的循環(huán)中作為

97、條件可以控制子彈出界的范圍。這幾項(xiàng)參數(shù)在編寫時(shí)很容易出錯(cuò)。它們反映了象素級(jí)處理的技巧。</p><p>  子彈運(yùn)行中,將用indoor()測(cè)試是否碰撞上了窗口的邊緣。如果為真,就說明子彈已經(jīng)越界。這將針對(duì)四個(gè)不同的方向分別以象素級(jí)檢測(cè)。</p><p>  子彈通過succeed()檢測(cè)是否擊中了某輛坦克。這根據(jù)子彈的來源分為兩種情況。當(dāng)來自玩家時(shí),將首先檢測(cè)所有的敵人發(fā)出的子彈,當(dāng)發(fā)生

98、子彈間的碰撞時(shí),用戶的子彈將被移除,雖然按照道理敵人的子彈同時(shí)也應(yīng)被移除,但敵人子彈是運(yùn)行在另一線程中的,應(yīng)當(dāng)由它自己來控制為好,用戶的子彈只需要管理好自己的狀態(tài)就可以了。如果沒有和子彈發(fā)生碰撞,就檢測(cè)是否與敵人碰撞,發(fā)生碰撞時(shí),移除,并置為null,產(chǎn)生爆炸效果,敵人數(shù)量減少一位,敵人屏幕上數(shù)量減少一位。</p><p>  如果是來自敵人的子彈,將同樣檢測(cè)與玩家子彈的碰撞,及與玩家坦克的碰撞如有碰撞,玩家生命

99、數(shù)減少一位,位置重置。如果玩家生命已死亡殆盡,就需要在進(jìn)行以上操作的同時(shí)將玩家坦克的位置放置到屏幕外的部分。remove函數(shù)并不會(huì)真正將層移除。只是用戶看不見而已。如果不放置到屏外,敵人坦克仍會(huì)被阻擋,子彈仍會(huì)再次擊中用戶坦克。這將會(huì)是很荒唐的場(chǎng)面。</p><p>  4.6 坦克的控制和敵方的智能運(yùn)行</p><p>  KeyBoardLis類繼承了KeyListener類,采取響應(yīng)

100、鍵盤事件的方法,每次執(zhí)行周期時(shí)會(huì)讀取KeyPressed()函數(shù)中需執(zhí)行的代碼。在某些不支持key pressed 功能的設(shè)備上,反復(fù)執(zhí)行的按鍵,比如發(fā)射子彈,將不能因?yàn)殚L時(shí)間按壓而自動(dòng)重復(fù),這樣就需要用戶高頻率的手動(dòng)擊鍵,這在操縱空間非常有限的移動(dòng)設(shè)備上是非常困難的。同時(shí),事件的執(zhí)行周期也并不一定適合游戲的場(chǎng)合,也許需要更高頻率執(zhí)行的按鍵卻只能在指定的周期內(nèi)規(guī)律的響應(yīng)。添加鍵盤監(jiān)聽使坦克聽從指揮。</p><p&g

101、t;  Public void keypressed (key event e)這里使用e.getKeyChar()獲取用戶輸入的信息,與自己定義的按鍵代碼進(jìn)行比較,實(shí)現(xiàn)對(duì)坦克的控制。 </p><p>  同時(shí)要確定坦克的移動(dòng)方向,在坦克4個(gè)方向的基礎(chǔ)上,先定位坦克的初始方向。根據(jù)按鍵狀態(tài)確定坦克的方向是用key pressed ()這個(gè)方法來實(shí)現(xiàn)的。其中定義了x軸和y軸,按下左鍵,橫坐標(biāo)減少相應(yīng)的值,按下右

102、鍵橫坐標(biāo)增加相應(yīng)的值,按下向上的鍵縱坐標(biāo)減少相應(yīng)的值,而按下先下的鍵縱坐標(biāo)增加相應(yīng)的值,具體的值根據(jù)坦克的等級(jí)而定。</p><p>  但是在定義鍵時(shí)要增加 br=ture ,這個(gè)語句,它的含義是在按下想按的鍵之前,必須保證此鍵是沒有按下的。給我們的坦克添加一些智能化:</p><p>  添加變量,記錄隨機(jī)步驟。當(dāng)Moving= =0時(shí),改變方向,否則,只是隨機(jī)步驟遞減。為敵人的坦克每

103、移動(dòng)一步,就要產(chǎn)生一個(gè)新的隨機(jī)的方向。用了random這個(gè)隨機(jī)產(chǎn)生器。</p><p>  提供可獲取當(dāng)前鍵盤上的信息。將以位的形式返回鍵盤上所有鍵的按與釋放的狀態(tài),當(dāng)bit為1時(shí),鍵就是被按下的狀態(tài),為0時(shí)則為釋放狀態(tài)。只需要此一個(gè)函數(shù)的返回值就可以返回所有鍵的狀態(tài)。這保證了快速的按鍵和釋放也會(huì)被循環(huán)所捕捉。</p><p>  讓敵軍坦克更加智能,同時(shí)動(dòng)起來,構(gòu)造函數(shù)中可以指定方向,n

104、ew敵軍坦克的時(shí)候指定敵軍坦克的方向,讓敵軍坦克向隨機(jī)方向移動(dòng),Direction.values(),讓敵軍坦克向隨機(jī)方向移動(dòng)隨機(jī)的步驟。</p><p>  敵方坦克由于需要具有一定的智能性,以便對(duì)玩家攻擊,使之具有一定的可玩性。敵人可以自動(dòng)行走,但是應(yīng)當(dāng)在以下適當(dāng)?shù)那闆r下轉(zhuǎn)向:首先是是否超出界面的邊界,其次是是否與地圖障礙物發(fā)生了碰撞,再次是是否與用戶坦克發(fā)生了碰撞。需要指出的是,當(dāng)發(fā)生阻礙不能在不變方向的情

105、況下繼續(xù)行走時(shí),并不一定立即需要采取轉(zhuǎn)向的對(duì)策。如果一定發(fā)生轉(zhuǎn)向,試想,當(dāng)敵方碰到玩家時(shí),如果它立即轉(zhuǎn)向,將不會(huì)對(duì)玩家發(fā)射射向他的子彈,就不構(gòu)成任何威脅,當(dāng)然,也不能永遠(yuǎn)不轉(zhuǎn)向。本程序設(shè)置為:當(dāng)碰撞到障礙物或邊界時(shí)立即轉(zhuǎn)向,但碰到玩家坦克時(shí)需要有一個(gè)等待的時(shí)間,這個(gè)時(shí)間由碰撞前隨機(jī)取得的在某方向上的持續(xù)行走步數(shù)決定,當(dāng)發(fā)生坦克間碰撞時(shí),此隨機(jī)數(shù)將在下一次循環(huán)前減少,這樣就實(shí)現(xiàn)了加快轉(zhuǎn)向的時(shí)間,避免死鎖在一個(gè)方向上靜止的停留過長的時(shí)間。另

106、外,坦克的發(fā)炮間隔和轉(zhuǎn)后的具體方向都由隨機(jī)數(shù)決定。坦克之間由以上道理也不會(huì)發(fā)生重疊,但當(dāng)某坦克正從上方生成而正巧有另一輛阻礙在其生成點(diǎn)處,這將導(dǎo)致不可避免的重合。這是允許的,但需要對(duì)他們標(biāo)注狀態(tài),即當(dāng)坦克剛出現(xiàn)時(shí)暫時(shí)允許重合,一旦在某個(gè)時(shí)間他們脫離了重合狀態(tài),就不能在允許重合,如果不設(shè)置這樣的判斷,剛出</p><p><b>  4.7 本章小結(jié)</b></p><p&

107、gt;  本章主要講述了游戲主要功能的詳細(xì)設(shè)計(jì)以及設(shè)計(jì)過程,每個(gè)子功能的設(shè)計(jì)是游戲最終實(shí)現(xiàn)的基礎(chǔ)。設(shè)計(jì)每個(gè)功能時(shí)都需要一定的精力,并且都不是那么的簡單,耐心是必須的。</p><p><b>  第5章 游戲?qū)崿F(xiàn)</b></p><p>  5.1游戲規(guī)則及運(yùn)行界面</p><p>  5.1.1 游戲步驟</p><p&g

108、t;  1.配置好path環(huán)境變量(JDK1.6版本)。</p><p>  2.雙擊jar文件運(yùn)行即可。</p><p><b>  5.1.2 操作</b></p><p>  WSAD控制方向 J為子彈 </p><p>  5.1.3 游戲規(guī)則及運(yùn)行界面</p><p>

109、  游戲開始(圖 5-1)</p><p>  圖5-1 游戲開始界面</p><p>  打開游戲時(shí),先進(jìn)入的是開始界面,此界面就是在面板上放置了一張圖片,目前只能進(jìn)行單人游戲,按數(shù)字鍵1就可以進(jìn)行其樂無窮的坦克大戰(zhàn)游戲了,進(jìn)入戰(zhàn)斗的界面如下文所示。</p><p>  2.第一關(guān)(圖 5-2)。</p><p>  圖 5-2 游戲第一關(guān)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論