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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

7、…7</p><p>  2.2 子彈的運行和控制…………………………………………………………8</p><p>  2.3 系統(tǒng)功能設計...............................................9</p><p>  2.3.1 坦克大戰(zhàn)總體功能設計...........................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 本章小結..................................................15</p&g

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

11、....................16</p><p><b>  第4章 總結</b></p><p>  4.1 本程序的總結……………………………………………………………17</p><p>  4.2 經驗和感想………………………………………………………………17</p><p>  致 謝.....

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

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

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

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

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

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

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

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

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

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

22、編程技術比較</p><p>  Java 語言是一種跨平臺,適合于分布式計算環(huán)境的面向對象編程語言。JAVA現(xiàn)在主要用在WEB開發(fā),手機游戲及一些平臺游戲的開發(fā),因為它具有很好的跨平臺性,在手機等各種電子產品上應用非常廣泛。</p><p>  C語言是一種面向過程編程,這就使得Java具有重用的特性,在開發(fā)速度上比C語言更快,但是在運行速度上卻是C更快,因為C屬于底層語言,它比JAVA

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

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

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

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

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

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

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

30、性,以便對玩家攻擊,使之具有一定的可玩性。敵人可以自動行走,但是應當在以下適當?shù)那闆r下轉向:首先是是否超出界面的邊界,其次是是否與地圖障礙物發(fā)生了碰撞,再次是是否與用戶坦克發(fā)生了碰撞。需要指出的是,當發(fā)生阻礙不能在不變方向的情況下繼續(xù)行走時,并不一定立即需要采取轉向的對策。如果一定發(fā)生轉向,試想,當敵方碰到玩家時,如果它立即轉向,將不會對玩家發(fā)射射向他的子彈,就不構成任何威脅,當然,也不能永遠不轉向。本程序設置為:當碰撞到障礙物或邊界時

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

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

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

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

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

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

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

38、;/p><p>  2.3.3 MyTankGame1類基本功能分析</p><p>  MyTankGame1類調用來實現(xiàn)坦克的一系列動作。MyTankGame1類中的主要方法羅列如下:</p><p>  (1)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類是碰撞檢測的輔助類,通過得到子彈的x,y坐標和寬高度,檢測兩個矩形是否碰撞(相交);</p><p> ?。?)draw()方法:負責將所有的活動

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

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

42、是則攻擊</p><p>  參數(shù):電腦坦克對象,玩家坦克對象</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>  (7)fire()方法:處理發(fā)送子彈的方法;</p><p>

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

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

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

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

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

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

62、t;p><b>  實現(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 本章小結</b></p><p>  本章首先對整個游戲設計進行了可行性分析,其次對游戲要達到怎么樣的需求,要實現(xiàn)哪些功能做以及實現(xiàn)這些功能設計到的類,最后再詳細的介紹了系統(tǒng)要實現(xiàn)這些功能所涉及到的各個類之間的關系。</p><p>  第3章 不足與展望&l

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論