坦克大戰(zhàn)畢業(yè)設(shè)計(jì)_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  摘 要</b></p><p>  隨著計(jì)算機(jī)的普及以及對(duì)電子游戲的認(rèn)識(shí),電子游戲已被越來越多的人選作放松、娛樂的休閑方式;電子游戲既不需要專門購(gòu)買游戲器材,也不需要寬闊的游戲場(chǎng)地,只需要一臺(tái)能獨(dú)立完成任務(wù)的計(jì)算機(jī)即可,它可以是人們工作、學(xué)習(xí)時(shí)用的計(jì)算機(jī),并不需要另行配置,這比起傳統(tǒng)休閑游戲即省錢又省事。局域網(wǎng)游戲更是可以將現(xiàn)實(shí)空間中零散的計(jì)算機(jī),組織起來,使

2、其在邏輯空間中集中起來,使游戲的組織、開展變得輕松。如此輕松而又安逸的休閑方式,使得越來越多的人嘗試,甚至已經(jīng)將電子游戲作為主要休閑方式,既然有如此多的人使用,那其中必然存在巨大的商機(jī),即使人們不愿意為一個(gè)小小的休閑游戲花費(fèi)金錢,但在游戲中添加廣告、游戲相關(guān)服務(wù)也包藏了巨大的財(cái)富;當(dāng)然電子游戲的制作如今已是空前的火爆,大大小小的游戲公司橫空出世,都想在電子游戲制作這個(gè)行業(yè)里占據(jù)一席之地,而一款成功的電子游戲需要精心的策劃、分析、設(shè)計(jì),只

3、有這樣才能獲得游戲中包藏的財(cái)富,以及做出一款真正能夠讓玩家娛樂、放松的游戲,而不是騙取玩家錢財(cái)?shù)墓ぞ摺?lt;/p><p>  關(guān)鍵字:游戲開發(fā),休閑</p><p><b>  目 錄</b></p><p>  第1章 前言........................................................4&l

4、t;/p><p>  1.1 游戲設(shè)計(jì)的需求分析.........................................4</p><p>  1.1.1 系統(tǒng)分析........................................4</p><p>  1.1.2 本系統(tǒng)的現(xiàn)實(shí)意義..............................

5、..5</p><p>  1.1.3 本系統(tǒng)和其他開發(fā)游戲區(qū)別........................5</p><p>  1.2 開發(fā)技術(shù)概述...............................................6</p><p>  1.2.1 Java、C語言、C++三種主流編程技術(shù)比較...........6<

6、/p><p>  1.3 本章小結(jié)...................................................6</p><p>  第2章 系統(tǒng)設(shè)計(jì)...................................................7</p><p>  2.1 坦克的控制和敵方的智能運(yùn)行…………………………………………

7、…7</p><p>  2.2 子彈的運(yùn)行和控制…………………………………………………………8</p><p>  2.3 系統(tǒng)功能設(shè)計(jì)...............................................9</p><p>  2.3.1 坦克大戰(zhàn)總體功能設(shè)計(jì)...........................9</p>

8、<p>  2.3.2 MyTankGame1類基本功能分析......................9</p><p>  2.3.3 MyTankGame1類基本功能分析......................10</p><p>  2.3.4 Tank類基本功能分析..............................12</p><

9、p>  2.3.5 Hh類基本功能分析................................13</p><p>  2.3.6 GameMusics類基本功能分析........................13</p><p>  2.4 本章小結(jié)..................................................15</p&g

10、t;<p>  第3章 不足與展望.................................................16</p><p>  3.1 設(shè)計(jì)中的不足之處..........................................16</p><p>  3.2 展望..................................

11、....................16</p><p><b>  第4章 總結(jié)</b></p><p>  4.1 本程序的總結(jié)……………………………………………………………17</p><p>  4.2 經(jīng)驗(yàn)和感想………………………………………………………………17</p><p>  致 謝.....

12、........................................................19</p><p><b>  第1章 前 言</b></p><p>  人類進(jìn)入21世紀(jì),全球一體化,互聯(lián)網(wǎng)就起到重要的作用,而且隨著互聯(lián)網(wǎng)的不斷發(fā)展,信息技術(shù)逐漸發(fā)展壯大,將成為網(wǎng)絡(luò)經(jīng)濟(jì)的核心。其中計(jì)算機(jī)、網(wǎng)絡(luò)通信的發(fā)展最為迅速。在現(xiàn)今電子信息高

13、速發(fā)展的時(shí)代,網(wǎng)絡(luò)游戲已經(jīng)深入到人們的日常生活中,成為老少皆宜的娛樂方式。</p><p>  1.1游戲設(shè)計(jì)的需求分析</p><p><b>  1.1.1系統(tǒng)分析</b></p><p><b>  技術(shù)可行性</b></p><p>  軟件使用swing、GUI、Socket、面向?qū)ο笤O(shè)計(jì)

14、等技術(shù)實(shí)現(xiàn),這些技術(shù)均已是非常成熟的技術(shù),之前已有相當(dāng)多使用這些技術(shù)的成功案例,故現(xiàn)使用這些技術(shù)是可行的。</p><p><b>  經(jīng)濟(jì)可行性</b></p><p>  本軟件為免費(fèi)軟件,將免費(fèi)提供軟件的下載、運(yùn)行和維護(hù)服務(wù),軟件暫無收入,待公布之后隨著使用者越來越多,將添加相應(yīng)的廣告、服務(wù),從而增加收入,若使用者寥寥無幾,將再次分析是否重新策劃軟件或者放棄開發(fā)

15、,以減少損失。</p><p><b>  需求分析</b></p><p>  通過反復(fù)研究以及市場(chǎng)調(diào)查,得知游戲須具有以下功能:</p><p> ?。?)需要有圖形游戲界面,讓用戶能看到游戲給出的反饋</p><p> ?。?)有人機(jī)交互功能,使用戶能操作指定的游戲元素</p><p>  

16、(3)不同隊(duì)伍的坦克,須顯示不同外觀,已分辨敵我</p><p>  (4)坦克能夠開火,攻擊敵方,但不能攻擊隊(duì)友</p><p> ?。?)坦克有生命值,并非被擊中一次就會(huì)爆炸</p><p> ?。?)坦克爆炸后將產(chǎn)生道具,拾到道具的坦克可加滿生命值</p><p> ?。?)游戲結(jié)束時(shí)須判斷哪一隊(duì)勝利</p><p&

17、gt;  (8)游戲結(jié)束后可重新開始</p><p> ?。?)游戲的操作、進(jìn)度等須提供相應(yīng)說明,以告知玩家</p><p>  1.1.2 本系統(tǒng)的現(xiàn)實(shí)意義</p><p>  游戲本身是一種娛樂方式,能帶給人們無盡的樂趣,而且游戲行業(yè)的發(fā)展還將會(huì)帶動(dòng)眾多周邊產(chǎn)業(yè),如五金、塑料、機(jī)械、電子、 顯像管,高端機(jī)型甚至使用了40英寸以上的大屏幕背投、液晶顯示器等,這些

18、顯像設(shè)備不但要依賴國(guó)內(nèi)眾多顯像管生產(chǎn)企業(yè)提供支持,更要針對(duì)游戲的內(nèi)容進(jìn)行深入開發(fā)和優(yōu)化,以適應(yīng)游戲內(nèi)容的飛速發(fā)展和變化,大大突破了傳統(tǒng)家電類顯像設(shè)備的限制,對(duì)國(guó)內(nèi)顯像管制造企業(yè)的發(fā)展、創(chuàng)新具有極大的推動(dòng)作用,大型游戲機(jī)的外部框體制造涉及工業(yè)設(shè)計(jì)、模具加工、五金加工、塑料成形、特殊印刷等工藝流程,由此帶動(dòng)了一大批相關(guān)的零部件生產(chǎn)制造企業(yè),而這些企業(yè)均為生產(chǎn)密集型企業(yè),大幅度增加了勞動(dòng)就業(yè)的需求。</p><p> 

19、 1.1.3 本系統(tǒng)和其他開發(fā)游戲區(qū)別</p><p>  本系統(tǒng)的坦克大戰(zhàn)是基于Java語言設(shè)計(jì)開發(fā)的,具有高超的人工智能,精美的圖形處理,支持單機(jī)運(yùn)行和網(wǎng)絡(luò)對(duì)戰(zhàn)的坦克射擊游戲。比之前網(wǎng)絡(luò)上實(shí)現(xiàn)的游戲更加方便,快捷,智能。游戲基本玩法較簡(jiǎn)單,游戲可一人電腦作戰(zhàn),每次電腦方有坦克10輛,游戲以消滅全部敵方坦克過關(guān)為目的。在這過程中,坦克有機(jī)會(huì)得到血塊來添加生命值,從而變得更加強(qiáng)大,也能利用各種有利地形來阻擊敵人

20、。游戲設(shè)置了墻面,電腦方坦克不能穿越墻面射擊玩家坦克,而玩家坦克可隨意穿越墻面打擊電腦方坦克,這一游戲特權(quán)。還有給玩家坦克設(shè)置超級(jí)炮彈,當(dāng)電腦方坦克數(shù)量過多時(shí),玩家坦克可以發(fā)射超級(jí)炮彈打擊敵方。主要新增的功能簡(jiǎn)單羅列如下:</p><p>  1、屏幕左上方顯示游戲狀態(tài),當(dāng)玩家方坦克數(shù)全為零時(shí)則游戲結(jié)束;</p><p>  2、一般坦克只可在空地中或草叢中行走,不可通過墻面等障礙物;&l

21、t;/p><p>  3、游戲中打壞敵方坦克后,可能會(huì)在隨機(jī)位置隨機(jī)出現(xiàn)血塊獎(jiǎng)勵(lì),坦克經(jīng)過該位置可獲得相應(yīng)加生命值獎(jiǎng)勵(lì);</p><p>  4、玩家坦克的游戲資格和電腦坦克不同。1.2 開發(fā)技術(shù)概述</p><p><b>  1.2開發(fā)技術(shù)概論</b></p><p>  1.2.1 Java、C語言、C++三種主流

22、編程技術(shù)比較</p><p>  Java 語言是一種跨平臺(tái),適合于分布式計(jì)算環(huán)境的面向?qū)ο缶幊陶Z言。JAVA現(xiàn)在主要用在WEB開發(fā),手機(jī)游戲及一些平臺(tái)游戲的開發(fā),因?yàn)樗哂泻芎玫目缙脚_(tái)性,在手機(jī)等各種電子產(chǎn)品上應(yīng)用非常廣泛。</p><p>  C語言是一種面向過程編程,這就使得Java具有重用的特性,在開發(fā)速度上比C語言更快,但是在運(yùn)行速度上卻是C更快,因?yàn)镃屬于底層語言,它比JAVA

23、更加親近機(jī)器,所以在許多系統(tǒng)開發(fā)上一般是用C語言,比如我們常用的XP系統(tǒng)、LINUX系統(tǒng),都是C語言開發(fā)的??缙脚_(tái)的服務(wù)器端的嵌入式腳本語言。</p><p>  C++多用于游戲引擎、反病毒、硬件驅(qū)動(dòng)以及一些對(duì)運(yùn)行效率要求比較高的應(yīng)用程序,比如數(shù)據(jù)庫(kù)管理系統(tǒng)。 C++語言在提供強(qiáng)大的功能的同時(shí)也提高了程序含BUG的可能性。 C++為了照顧大量的C語言使用者,而兼容了C,使得自身僅僅成為了帶類的C語言,多多少少影

24、響了其面向?qū)ο蟮膹氐仔浴?lt;/p><p><b>  1.3 本章小結(jié)</b></p><p>  本章主要介紹了網(wǎng)絡(luò)游戲在國(guó)內(nèi)外發(fā)展的現(xiàn)狀,現(xiàn)如今,網(wǎng)絡(luò)游戲市場(chǎng)的重新定位是最迫切需要解決的問題。本系統(tǒng)主要的現(xiàn)實(shí)意義,與其他游戲的區(qū)別和完善的一些功能。本文用Java語言、C語言、C++三種主流編程技術(shù)比較,闡述了使用Java語言編程的原因。</p>&

25、lt;p><b>  第2章 系統(tǒng)設(shè)計(jì)</b></p><p>  2.1 坦克的控制和敵方的智能運(yùn)行</p><p>  GameCanvas中提供了與以往MIDP1.0不同的鍵盤采樣功能。Canvas類中采取響應(yīng)鍵盤事件的方法,每次執(zhí)行周期時(shí)會(huì)讀取keyPressed函數(shù)中需執(zhí)行的代碼。這樣的機(jī)制并不適合某些游戲場(chǎng)合。在某些不支持keyRepeat功能的

26、設(shè)備上,反復(fù)執(zhí)行的按鍵,比如發(fā)射子彈,將不能因?yàn)殚L(zhǎng)時(shí)間按壓而自動(dòng)重復(fù),這樣就需要用戶高頻率的手動(dòng)擊鍵,這在操縱空間非常有限的移動(dòng)設(shè)備上是非常困難的。同時(shí),事件的執(zhí)行周期也并不一定適合游戲的場(chǎng)合,也許需要更高頻率執(zhí)行的按鍵卻只能在指定的周期內(nèi)規(guī)律的響應(yīng)。對(duì)此,針對(duì)游戲的開發(fā),Game包提供的鍵盤狀態(tài)功能將顯得十分有效。</p><p>  GameCanvas提供getKeyStates函數(shù)可獲取當(dāng)前鍵盤上的信息。

27、將以位的形式返回鍵盤上所有鍵的按與釋放的狀態(tài),當(dāng)bit為1時(shí),鍵就是被按下的狀態(tài),為0時(shí)則為釋放狀態(tài)。只需要此一個(gè)函數(shù)的返回值就可以返回所有鍵的狀態(tài)。這保證了快速的按鍵和釋放也會(huì)被循環(huán)所捕捉。同時(shí),這樣的機(jī)制也可檢測(cè)到幾個(gè)鍵同時(shí)按下的狀態(tài),從而提供斜向運(yùn)行等相應(yīng)功能。</p><p>  敵方按照規(guī)則不能和用戶坦克重合,則它每行走一步就需要把用戶坦克掃描一次,判斷其是否碰撞到了用戶的坦克。Sprite類中提供了c

28、ollidesWith函數(shù),用于判斷是否與某個(gè)TiledLayer、Sprite、Image的對(duì)象有圖象上的重合(即游戲中的碰撞)。然而不能僅僅將用戶坦克作為其Sprite參數(shù)傳遞給敵人的類進(jìn)行判斷。因?yàn)槿绻l(fā)生碰撞,collidesWith成立,則兩輛坦克已經(jīng)發(fā)生了圖象重合,違反了規(guī)則,甚至若再進(jìn)行collidesWith判斷的話,其結(jié)果將永為真。為了提前預(yù)知碰撞,可以將所有坦克的碰撞范圍設(shè)定為一個(gè)比坦克圖片稍大一些的矩形,此矩形僅在

29、坦克前方比坦克圖形多出一個(gè)象素。在多出的11個(gè)象素中,按照每個(gè)象素依次檢查此象素是否于外界發(fā)生碰撞,如果不是按照象素檢查,則當(dāng)坦克與障礙物錯(cuò)位并同時(shí)與兩種物體接觸時(shí)將有可能忽略檢測(cè)其中的一樣物體。這樣,就可以提前一步判斷。如果發(fā)生碰撞,則坦克應(yīng)當(dāng)選擇掉轉(zhuǎn)方向,此時(shí),兩輛碰撞的坦克又因?yàn)槠渚匦螀^(qū)域不重合而不符合collidesWith的條件,就可以繼續(xù)正常運(yùn)行了。</p><p>  敵方坦克由于需要具有一定的智能

30、性,以便對(duì)玩家攻擊,使之具有一定的可玩性。敵人可以自動(dòng)行走,但是應(yīng)當(dāng)在以下適當(dāng)?shù)那闆r下轉(zhuǎn)向:首先是是否超出界面的邊界,其次是是否與地圖障礙物發(fā)生了碰撞,再次是是否與用戶坦克發(fā)生了碰撞。需要指出的是,當(dāng)發(fā)生阻礙不能在不變方向的情況下繼續(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í)

31、立即轉(zhuǎn)向,但碰到玩家坦克時(shí)需要有一個(gè)等待的時(shí)間,這個(gè)時(shí)間由碰撞前隨機(jī)取得的在某方向上的持續(xù)行走步數(shù)決定,當(dāng)發(fā)生坦克間碰撞時(shí),此隨機(jī)數(shù)將在下一次循環(huán)前減少為原來的2/3,這樣就實(shí)現(xiàn)了加快轉(zhuǎn)向的時(shí)間,避免死鎖在一個(gè)方向上靜止的停留過長(zhǎng)的時(shí)間。另外,坦克的發(fā)炮間隔和轉(zhuǎn)后的具體方向都由隨機(jī)數(shù)決定。坦克之間由以上道理也不會(huì)發(fā)生重疊,但當(dāng)某坦克正從上方生成而正巧有另一輛阻礙在其生成點(diǎn)處,這將導(dǎo)致不可避免的重合。這是允許的,但需要對(duì)他們標(biāo)注狀態(tài),即當(dāng)

32、坦克剛出現(xiàn)時(shí)暫時(shí)允許重合,一旦在某個(gè)時(shí)間他們脫離了重合狀態(tài),就不能在允許重合,如果不設(shè)置這</p><p>  2.2 子彈的運(yùn)行和控制</p><p>  每一個(gè)坦克都有他自己的一顆子彈,這顆子彈在任何一輛坦克被構(gòu)造時(shí)就一直存在,直至此坦克生命的結(jié)束,子彈的再次只是將屏幕上暫時(shí)掩蓋的圖象重新置于坦克炮筒才恰當(dāng)位置,并使其顯示出來,這與現(xiàn)實(shí)中每個(gè)子彈都是單獨(dú)的個(gè)體有所不同。</p&g

33、t;<p>  子彈所需要完成的任務(wù)有:</p><p>  它是一個(gè)繼承了Runnable虛類的可運(yùn)行單獨(dú)線程的對(duì)象。在其出現(xiàn)在屏幕上的運(yùn)行周期中,每一步都需要循環(huán)檢測(cè)以下條件:</p><p>  是否與某坦克發(fā)生了碰撞,即擊中了這輛坦克。子彈使用的是象素級(jí)的碰撞檢測(cè),因?yàn)樽訌椀膱D片形狀不規(guī)則,如果使用矩形碰撞檢測(cè),將有可能在子彈尚未接觸到物體時(shí)就已返回碰撞的真值。分為兩

34、種情況,如果此子彈來自于敵方,將只檢測(cè)玩家坦克,因?yàn)閿撤街g的子彈必須允許可以透明的穿過,以保證不會(huì)在敵人之間發(fā)生子彈的消減。如果來自玩家,則每一步需掃描所有的敵方坦克,檢查是否發(fā)生碰撞,這可能會(huì)花費(fèi)不少的CPU時(shí)間。</p><p>  其次,子彈之間需要檢測(cè)是否碰撞。敵人之間顯然,如上已經(jīng)提過,不需要檢測(cè),但敵人與玩家之間應(yīng)當(dāng)可以互相消除子彈,以便在狹窄的路口中仍有存活的機(jī)會(huì)。玩家的子彈需要在每一步檢測(cè)所有敵

35、人的子彈的運(yùn)行狀態(tài)。這樣較多的運(yùn)算也將不可避免的耗費(fèi)大量CPU時(shí)間。</p><p>  子彈對(duì)不同障礙物將有不同的反映。對(duì)磚墻將有能力將其擊毀,使之在畫面上消失;對(duì)水泥鋼筋將不能發(fā)生作用,子彈也不能通過;對(duì)于河流,坦克不可以通過,但子彈可以;對(duì)于草叢,子彈和坦克都可以通過。</p><p>  2.3 系統(tǒng)功能設(shè)計(jì)</p><p>  2.3.1 坦克大戰(zhàn)總體

36、功能設(shè)計(jì)</p><p>  坦克大戰(zhàn)游戲主要實(shí)現(xiàn)玩家參加游戲的整個(gè)流程,玩家點(diǎn)擊“開始游戲”按鈕就可以直接進(jìn)入游戲狀態(tài);進(jìn)入后玩家就可以通過控制鍵盤操作。整個(gè)經(jīng)典版坦克大戰(zhàn)游戲流程圖如圖3.1所示:</p><p>  圖2.3.1 坦克大戰(zhàn)游戲流程</p><p>  2.3.2 MyTankGame1類基本功能分析</p><p>

37、  MyTankGame1類是整個(gè)系統(tǒng)的核心部分,它承擔(dān)整個(gè)系統(tǒng)的所有可實(shí)現(xiàn)功能的調(diào)度工作。 是整個(gè)游戲運(yùn)行的場(chǎng)所。MyTankGame1類設(shè)計(jì)流程圖如圖3.1所示:</p><p>  MyTankGame1類是主類,通過調(diào)用其他類中封裝的方法來使整個(gè)系統(tǒng)運(yùn)行起來,下面顯示MyTankGame1與各個(gè)類之間的關(guān)系如圖3.2所示:</p><p>  圖2.3.2 游戲系統(tǒng)類關(guān)聯(lián)圖<

38、;/p><p>  2.3.3 MyTankGame1類基本功能分析</p><p>  MyTankGame1類調(diào)用來實(shí)現(xiàn)坦克的一系列動(dòng)作。MyTankGame1類中的主要方法羅列如下:</p><p> ?。?)getRect()方法</p><p>  public Rectangle getRect() {</p><

39、p>  return new Rectangle(x, y, this.WIDTH, this.HEIGHT);</p><p><b>  }</b></p><p>  Rectangle類是碰撞檢測(cè)的輔助類,通過得到子彈的x,y坐標(biāo)和寬高度,檢測(cè)兩個(gè)矩形是否碰撞(相交);</p><p> ?。?)draw()方法:負(fù)責(zé)將所有的活動(dòng)

40、在屏幕上畫出來;</p><p> ?。?)move()方法:主要負(fù)責(zé)控制坦克的移動(dòng),包括8個(gè)方向(左,左上,上,右上,右,右下,下,左下)的控制以及給坦克一個(gè)移動(dòng)的速度;</p><p> ?。?)keyPressed()方法:設(shè)定使用鍵盤的“↑”“↓”“←”“→”鍵控制坦克移動(dòng),空格鍵玩家開火、“Enteer”鍵暫停;</p><p>  (5)mouseCli

41、cked ()方法:當(dāng)鼠標(biāo)點(diǎn)擊主界面的“開始游戲”,“歷史記錄”, “退出游戲”將進(jìn)行對(duì)應(yīng)的操作;</p><p> ?。?)Gongji(Vector<EnemyTank> enemyTank, Hero hero)方法:用來 判斷玩家坦克是否進(jìn)入到電腦坦克的攻擊范圍,是則使電腦坦克攻擊玩家坦克;代碼如下:</p><p>  功能:判斷玩家坦克是否在電腦控制坦克的攻擊范圍,

42、是則攻擊</p><p>  參數(shù):電腦坦克對(duì)象,玩家坦克對(duì)象</p><p>  public void Gongji(Vector<EnemyTank> enemyTank, Hero hero) {</p><p>  int direct;</p><p>  for (int i = 0; i < enemyTan

43、k.size(); i++) {</p><p>  EnemyTank enemy = enemyTank.get(i);</p><p>  if (enemy.getRectFw(enemy.getX() - 100, enemy.getY() - 3, 200,6).intersects(hero.getRect())) {</p><p>  boolea

44、n shotzhuantai = true;</p><p>  if (enemy.getX() > hero.getX()) {</p><p>  direct = 2;</p><p><b>  } else {</b></p><p>  direct = 3;</p><p>

45、<b>  }</b></p><p>  for (int fanweiShot = 0; fanweiShot < enemy.ss.size(); fanweiShot++) {</p><p>  shot fanweishot = enemy.ss.get(fanweiShot);</p><p>  if (fanweisho

46、t.getZhuantai() == 1) {</p><p>  shotzhuantai = false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if (shotzhuantai && enemy.ss.size()

47、< 4) {</p><p>  enemy.setDirect(direct);</p><p>  enemy.setLean(false);</p><p>  shot s1 = new shot(enemy.getX(), enemy.getY(), direct);</p><p>  s1.setZhuantai(1);&

48、lt;/p><p>  enemy.ss.add(s1);</p><p>  Thread r = new Thread(s1);</p><p>  r.start();</p><p><b>  }</b></p><p><b>  } else {</b></p

49、><p>  enemy.setLean(true);</p><p><b>  }</b></p><p>  if (enemy.getRectFw(enemy.getX() - 3, enemy.getY() - 100, 6,</p><p>  200).intersects(hero.getRect())) {

50、</p><p>  boolean shotzhuantai = true;</p><p>  if (enemy.getY() > hero.getY()) {</p><p>  direct = 0;</p><p><b>  } else {</b></p><p>  dir

51、ect = 1;</p><p><b>  }</b></p><p>  for (int fanweiShot = 0; fanweiShot < enemy.ss.size(); fanweiShot++) {</p><p>  shot fanweishot = enemy.ss.get(fanweiShot);</p&

52、gt;<p>  if (fanweishot.getZhuantai() == 1) {</p><p>  shotzhuantai = false;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if (shotzhuanta

53、i && enemy.ss.size() < 4) {</p><p>  enemy.setDirect(direct);</p><p>  enemy.setLean(false);</p><p>  shot s1 = new shot(enemy.getX(), enemy.getY(), direct);</p>&

54、lt;p>  enemy.ss.add(s1);</p><p>  Thread r = new Thread(s1);</p><p>  r.start();</p><p><b>  }</b></p><p><b>  } else {</b></p><p&

55、gt;  enemy.setLean(true);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)fire()方法:處理發(fā)送子彈的方法;</p><p>

56、 ?。?)paint()方法:主要負(fù)責(zé)界面的不斷重繪;</p><p> ?。?)getRect ()方法:主要到負(fù)責(zé)處理坦克和坦克相撞事件;</p><p>  2.3.4 Tank類基本功能分析</p><p>  1、Tank(坦克)對(duì)象中,封裝的變量屬性:包括坦克橫坐標(biāo)(X)、縱坐標(biāo)(Y)、生命值(hipPoints)、生命總值(hipPointsNum)、

57、運(yùn)動(dòng)速度(speed)、方向控制(direct)、生死控制(isLive)等。Tank類中沒有main函數(shù),不是主類,它當(dāng)中只封裝一些變量屬性和靜態(tài)方法。</p><p>  2、Bomb(炸彈)對(duì)象中,封裝的變量屬性:包括炸彈類型(bombType)、橫坐標(biāo)(X)、縱坐標(biāo)(Y)、生死控制(isLive)等。</p><p>  3、EnemyTank(敵人坦克))對(duì)象繼承了Tank類,自

58、己封裝的變量屬性:包括坦克運(yùn)行狀態(tài)(qutilean)、生死控制(isLive)、加子彈間隔時(shí)間(times)等。</p><p>  4、shot(子彈)對(duì)象中,封裝的變量屬性:包括子彈速度(Zidanspeed)、橫坐標(biāo)(X)、縱坐標(biāo)(Y)、生死控制(isLive)、運(yùn)行速度(zhuantai)等。</p><p>  5、Hero(玩家坦克)對(duì)象中,對(duì)象繼承了Tank類。</p

59、><p>  2.3.5 Hh類基本功能分析</p><p>  Hh類主要對(duì)游戲界面的一些畫圖功能,里面包括:玩家坦克、敵人坦克、坦克生命值、子彈、爆炸效果等的繪制方法。</p><p>  Hh類中的主要方法如下:</p><p>  drawTank(int x, int y, Graphics g, int direct, int typ

60、e) {方法:根據(jù)坦克方向、坐標(biāo)等參數(shù)畫出坦克的相應(yīng)效果圖片;</p><p>  draw(Graphics g,int x,int y,int number,int topNumber)方法:根據(jù)生命值、坐標(biāo)等參數(shù)畫出相應(yīng)的生命條效果圖片;</p><p>  drawbomb1(Graphics g,int x,int y,int bomb)方法:根據(jù)類型、坐標(biāo)等參數(shù)畫出小炸彈的相應(yīng)

61、效果圖片;</p><p>  drawbomb2(Graphics g,int x,int y,int bomb)方法:根據(jù)類型、坐標(biāo)等參數(shù)畫出大炸彈的相應(yīng)效果圖片;</p><p>  2.3.6 GameMusics類基本功能分析</p><p>  Explode(音樂播放類)類的主要功能就是播放游戲中的所有WAV格式的背景音樂。</p>&l

62、t;p><b>  實(shí)現(xiàn)代碼如下所示:</b></p><p><b>  //播放聲音類</b></p><p>  public class GameMusics extends Thread {</p><p>  private String filename;</p><p>  p

63、ublic GameMusics(String wavfile) {</p><p>  filename = wavfile;</p><p><b>  }</b></p><p>  public void run() {</p><p>  File soundFile = new File(filename);

64、</p><p>  AudioInputStream audioInputStream = null;</p><p><b>  try {</b></p><p>  audioInputStream = AudioSystem.getAudioInputStream(soundFile);</p><p>  }

65、 catch (Exception e1) {</p><p>  e1.printStackTrace();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  AudioFormat format = audioInputStream.

66、getFormat();</p><p>  SourceDataLine auline = null;</p><p>  DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);</p><p><b>  try {</b></p><p

67、>  auline = (SourceDataLine) AudioSystem.getLine(info);</p><p>  auline.open(format);</p><p>  } catch (Exception e) {</p><p>  e.printStackTrace();</p><p><b>

68、  return;</b></p><p><b>  }</b></p><p>  auline.start();</p><p>  int nBytesRead = 0;</p><p>  byte[] abData = new byte[512];</p><p><

69、b>  try {</b></p><p>  while (nBytesRead != -1) {</p><p>  nBytesRead = audioInputStream.read(abData, 0, abData.length);</p><p>  if (nBytesRead >= 0)</p><p&g

70、t;  auline.write(abData, 0, nBytesRead);</p><p><b>  }</b></p><p>  } catch (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  return;</b&

71、gt;</p><p>  } finally {</p><p>  auline.drain();</p><p>  auline.close();</p><p><b>  }</b></p><p><b>  }</b></p><p>

72、<b>  }</b></p><p><b>  2.4 本章小結(jié)</b></p><p>  本章首先對(duì)整個(gè)游戲設(shè)計(jì)進(jìn)行了可行性分析,其次對(duì)游戲要達(dá)到怎么樣的需求,要實(shí)現(xiàn)哪些功能做以及實(shí)現(xiàn)這些功能設(shè)計(jì)到的類,最后再詳細(xì)的介紹了系統(tǒng)要實(shí)現(xiàn)這些功能所涉及到的各個(gè)類之間的關(guān)系。</p><p>  第3章 不足與展望&l

73、t;/p><p>  3.1 設(shè)計(jì)中的不足之處</p><p>  本系統(tǒng)實(shí)現(xiàn)了坦克游戲所應(yīng)有的基本功能,但是由于時(shí)間和能力有限,還有一部分功能未能實(shí)現(xiàn),例如:外部文件讀取、地圖設(shè)定、升級(jí)、坦克的高級(jí)人工智能控制等,不能和現(xiàn)在Internet上各種坦克大戰(zhàn)游戲相媲美。還有就是對(duì)部分功能在設(shè)計(jì)過程中未能做到更加完善,稍有瑕疵,游戲時(shí)偶爾還會(huì)產(chǎn)生閃爍現(xiàn)象,但是已經(jīng)盡力改善了。</p>

74、<p><b>  3.2 展望</b></p><p>  本系統(tǒng)基本實(shí)現(xiàn)了坦克游戲所應(yīng)有的基本功能,在大學(xué)中最后一次專攻式的學(xué)習(xí)了Java語言,使我對(duì)Java語言有了更深層次的理解,通過該游戲設(shè)計(jì),提高了我的編程能力,也讓我養(yǎng)成了良好的編程習(xí)慣。希望在今后自己能繼續(xù)對(duì)J2SE等技術(shù)進(jìn)行深入的學(xué)習(xí)和研究。</p><p>  第四章 總 結(jié)

75、</p><p>  4.1 本程序的總結(jié)</p><p>  本程序設(shè)計(jì)實(shí)現(xiàn)了手機(jī)上以J2ME為平臺(tái)的坦克大戰(zhàn)游戲的開發(fā),采用從外部文件讀取地圖、自動(dòng)控制敵人坦克運(yùn)行的方式進(jìn)行控制,具有一定的可玩性和復(fù)雜性。經(jīng)過了細(xì)心的調(diào)試和排錯(cuò)解決了絕大部分的問題。</p><p>  但幾乎每一個(gè)計(jì)算機(jī)程序都會(huì)有這樣那樣的不足,尤其是未經(jīng)過精心維護(hù)的非商業(yè)軟件。即使是作為操作

76、系統(tǒng)的各種版本的Windows也時(shí)常會(huì)發(fā)生許多類型的錯(cuò)誤和漏洞。本游戲程序?qū)τ诔跎娲祟I(lǐng)域的畢業(yè)設(shè)計(jì)課題來說,尤其在開始初期,感覺邏輯復(fù)雜,難以控制,因此至今還有一些未能解決的bug。</p><p>  目前發(fā)現(xiàn)的bug和未完善的功能列表如下:</p><p>  1. 與敵人對(duì)子彈的時(shí)候有時(shí)候可能會(huì)出現(xiàn)當(dāng)敵人死后,自己若仍在原地,子彈會(huì)發(fā)不出去。</p><p>

77、;  2. 敵人的人工智能變化較少,不夠理想。</p><p>  3. 子彈和敵人經(jīng)常會(huì)與畫面的刷新的線程不同步,造成畫面閃爍。</p><p>  4. 由于每次子彈發(fā)射和每次坦克的移動(dòng)的一個(gè)象素都會(huì)對(duì)所有坦克和所有子彈進(jìn)行一次循環(huán)檢查,并由于同時(shí)開的線程比較多,使得本來運(yùn)行效率就不高的KVM運(yùn)行異常緩慢。即使刷屏沒有間隔也不會(huì)提高速度。</p><p>

78、  5. 最好有接寶物的設(shè)置,增強(qiáng)可玩性。</p><p>  6. 當(dāng)敵人和自己同時(shí)死亡時(shí),仍會(huì)過關(guān),但Game Over字樣會(huì)出現(xiàn),下一關(guān)坦克不會(huì)出現(xiàn),但可以隱身發(fā)炮。</p><p>  已經(jīng)解決的重要Bug:</p><p>  1. 當(dāng)發(fā)出子彈到達(dá)邊界并同時(shí)還在草叢中時(shí)會(huì)拋出數(shù)組邊界異常。</p><p>  2. 有時(shí)會(huì)莫

79、名其妙的死機(jī)。 </p><p>  3. 當(dāng)坦克在草叢中時(shí),對(duì)方坦克發(fā)出的子彈不能將其擊毀。</p><p>  4.2 經(jīng)驗(yàn)和感想</p><p>  坦克大戰(zhàn)作為課程設(shè)計(jì),是本人目前做過的最大的程序設(shè)計(jì)。雖然大學(xué)期間在TC++下設(shè)計(jì)過一個(gè)俄羅斯方塊的游戲,并且經(jīng)過反復(fù)的調(diào)試修改也達(dá)到了一定的精確性,但接手這個(gè)題目時(shí)仍感覺十分棘手。<

80、/p><p>  在兩年的學(xué)習(xí)中做過很多課程設(shè)計(jì),大多規(guī)模很小。在數(shù)據(jù)庫(kù)、單片機(jī)、各種應(yīng)用軟件和游戲中,我仍覺得對(duì)游戲的設(shè)計(jì)有極大的熱情。因?yàn)槠涓鱾€(gè)模塊間的聯(lián)系十分緊密,代碼重復(fù)執(zhí)行率高,當(dāng)經(jīng)過無數(shù)次的調(diào)試、修改后,能最終看到成品,有無比自豪的心情。大學(xué)期間做過銀行取款機(jī)、圖書館管理程序等簡(jiǎn)單的數(shù)據(jù)庫(kù)管理系統(tǒng)的課程設(shè)計(jì),思想大致相似,變化范圍有限,沒有太多自己可發(fā)揮的余地。大家作品的最終結(jié)果都離不開同一個(gè)模式。相比一

81、些數(shù)據(jù)庫(kù)軟件,游戲的設(shè)計(jì)有很多人情色彩和藝術(shù)思想的發(fā)揮,正式商業(yè)的軟件的人性化界面和各個(gè)游戲間迥異的結(jié)構(gòu)每每會(huì)讓人有去開發(fā)的沖動(dòng)。</p><p>  游戲程序最大限度的利用了硬件條件,因此展現(xiàn)出的畫面往往多彩絢麗、效果驚人。成功的游戲融合了三維運(yùn)算、人工智能、音效處理等計(jì)算機(jī)多媒體的精華部分。本課程設(shè)計(jì)建立在Java平臺(tái)上,是本人以前未曾接觸過的領(lǐng)域。憑著探索新知識(shí)的熱情,我選擇了該題目。</p>

82、<p>  我在一星期內(nèi)寫了15000字,經(jīng)過了幾次的修改,終于完成了現(xiàn)在的程序設(shè)計(jì)。原先認(rèn)為不可能的事,我發(fā)現(xiàn),如果有不畏困難的信心和肯鉆研的勇氣,就一定會(huì)完成,甚至達(dá)到意想不到的效果。</p><p><b>  致 謝</b></p><p>  經(jīng)過三個(gè)多月的忙碌和工作,本次畢業(yè)設(shè)計(jì)業(yè)已完成了,作為一個(gè)??飘厴I(yè)生的畢業(yè)設(shè)計(jì),由于經(jīng)驗(yàn)的匱乏和業(yè)務(wù)邏

83、輯的不熟悉,難免有許多考慮不周全和不完善的地方,但是在指導(dǎo)老師和宿舍同學(xué)的幫助下很多困難都得以解決,所以在此本人要特別感謝他們對(duì)我的幫助。</p><p>  首先我要感謝我的指導(dǎo)老師xx老師,感謝她在整個(gè)畢業(yè)設(shè)計(jì)過程中的指導(dǎo),為我提示游戲設(shè)計(jì)的邏輯思路;為我提供參考書籍;為我提供了技術(shù)方面資料,而且在遇到問題的時(shí)候,總是鼓勵(lì)我去解決;尤其在論文格式的修改方面,讓我明白了要寫出一個(gè)標(biāo)準(zhǔn)的論文,它的格式的重要性,哪

84、怕就算是一個(gè)標(biāo)點(diǎn)符號(hào)都要符合其標(biāo)準(zhǔn)和格式要求。在設(shè)計(jì)的整個(gè)過程中從開題報(bào)告的確定到初稿的修改,以及中期檢查,以及定稿的過程中都給予了我細(xì)心的指導(dǎo)。</p><p>  其次還要特別感謝大學(xué)三年來所有的老師,為我們打下計(jì)算機(jī)專業(yè)知識(shí)的基礎(chǔ)。以前總是覺得學(xué)的課程沒有什么用處,但是當(dāng)真正用計(jì)算機(jī)來解決實(shí)際問題的時(shí)候,才知道每門課程的重要性,甚至覺得所學(xué)習(xí)的那些課程還遠(yuǎn)遠(yuǎn)不夠,所以以后還應(yīng)該不斷的學(xué)習(xí)。也可以這么說要不是

溫馨提示

  • 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. 眾賞文庫(kù)僅提供信息存儲(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)論