java坦克大戰(zhàn)畢業(yè)設(shè)計(jì)論文_第1頁(yè)
已閱讀1頁(yè),還剩30頁(yè)未讀 繼續(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>  基于J2SE的網(wǎng)絡(luò)版坦克大戰(zhàn)游戲設(shè)計(jì)</p><p><b>  摘要</b></p><p>  [摘要] :J2SE (Java 2 Standard Edition)就是Java2的標(biāo)準(zhǔn)版,主要用于桌面應(yīng)用軟件的編程,是伴隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展而誕生的一項(xiàng)新的開發(fā)技術(shù)。隨著個(gè)人電腦的日益普及、Java功能在個(gè)人電腦上的實(shí)現(xiàn),Java應(yīng)用程

2、序產(chǎn)生的單機(jī)增值服務(wù)逐漸體現(xiàn)出其影響力,對(duì)豐富人們的生活內(nèi)容、愉悅身心、開發(fā)智力等起著不可忽視的作用。該論文通過總結(jié)和分析JAVA游戲的開發(fā)流程和代碼框架的設(shè)計(jì),開發(fā)了一款基于J2SE架構(gòu)的游戲——坦克大戰(zhàn)。本設(shè)計(jì)采用面向?qū)ο蟮脑O(shè)計(jì)模式,對(duì)游戲中的所有物體賦予對(duì)象的概念和屬性。運(yùn)行程序后允許用戶選擇執(zhí)行選項(xiàng)菜單。在開始游戲后,啟動(dòng)服務(wù)器和客戶端,對(duì)背景的所有物體進(jìn)行繪圖。在主程序運(yùn)行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術(shù)對(duì)屏幕重

3、繪,實(shí)時(shí)反映整個(gè)游戲的進(jìn)行狀態(tài)。用戶控制的坦克運(yùn)行在主線程中,隨屏幕刷新的頻率而移動(dòng)。坦克將在游戲開始時(shí)進(jìn)行初始化,然后將坦克繪制在地圖的上層。本設(shè)計(jì)主要實(shí)現(xiàn)的功能是讓坦克能向八個(gè)方向移動(dòng),并且打出炮彈,子彈擊中敵人坦克,子彈和敵人坦克同時(shí)消失,產(chǎn)生爆炸,CPU坦克能智能的移動(dòng)并且打出炮彈。能夠支持網(wǎng)絡(luò)對(duì)戰(zhàn)和單</p><p>  Java良好的跨平臺(tái)特性在軟件的開發(fā)中顯示出了巨大的威力,“一次編寫,隨處運(yùn)行”,

4、java系統(tǒng)可以運(yùn)行在不同的操作系統(tǒng)和硬件上。隨著linux的持續(xù)增長(zhǎng)以及MacOSX完全支持java技術(shù),跨平臺(tái)的特性變得越來越有分量。</p><p>  由于免費(fèi)、跨平臺(tái)、java語(yǔ)言本身技術(shù)先進(jìn),在高校中,java已經(jīng)成為許多學(xué)科研究、課程和計(jì)算的首選語(yǔ)言,用java做上機(jī)作業(yè),一般都是鼓勵(lì)的。據(jù)我所知,北大、清華許多院系的研究生入學(xué)考試都可以用java語(yǔ)言答題。實(shí)際上,用java來完成這些工作,大多數(shù)情

5、況下要比用C或其他語(yǔ)言簡(jiǎn)潔得多,你可以把注意力集中在算法等核心部分,從而獲得更高分?jǐn)?shù)。</p><p>  [關(guān)鍵詞] 面向?qū)ο?坦克大戰(zhàn) 游戲 J2SE Socket</p><p><b>  [目錄]</b></p><p><b>  第1章 前言1</b></p><p>  

6、1.1 游戲設(shè)計(jì)的需求分析1</p><p>  1.1.1 國(guó)內(nèi)外電子網(wǎng)絡(luò)游戲的現(xiàn)狀1</p><p>  1.1.2 本系統(tǒng)的現(xiàn)實(shí)意義1</p><p>  1.1.3 本系統(tǒng)和其他開發(fā)游戲區(qū)別1</p><p>  1.2 開發(fā)技術(shù)概述2</p><p>  1.2.1 Java、C#語(yǔ)言、C

7、/C++主流編程語(yǔ)言比較2</p><p>  1.3 本章小結(jié)3</p><p>  第2章 相關(guān)技術(shù)理論4</p><p>  2.1 系統(tǒng)運(yùn)行環(huán)境4</p><p>  2.1.1 系統(tǒng)運(yùn)行的軟件環(huán)境4</p><p>  2.1.2 系統(tǒng)運(yùn)行的硬件環(huán)境4</p><p>

8、;  2.2 相關(guān)理論4</p><p>  2.2.1 關(guān)于Eclipse的介紹4</p><p>  2.2.2 J2SE框架5</p><p>  2.2.3 聯(lián)機(jī)通信機(jī)制6</p><p>  2.2.4 Java圖形編程6</p><p>  2.3 本章小結(jié)7</p>&

9、lt;p>  第3章 系統(tǒng)設(shè)計(jì)8</p><p>  3.1 系統(tǒng)可行性分析8</p><p>  3.1.1 技術(shù)可行性8</p><p>  3.1.2 經(jīng)濟(jì)可行性8</p><p>  3.1.3 操作可行性8</p><p>  3.2 系統(tǒng)需求分析8</p><p>

10、;  3.2.1 在人機(jī)對(duì)戰(zhàn)模式下實(shí)現(xiàn)的功能8</p><p>  3.2.2 在網(wǎng)絡(luò)對(duì)戰(zhàn)模式下實(shí)現(xiàn)的功能8</p><p>  3.3 系統(tǒng)功能設(shè)計(jì)9</p><p>  3.3.1 坦克大戰(zhàn)總體功能設(shè)計(jì)9</p><p>  3.3.2 GameWindow類基本功能分析10</p><p>  3

11、.3.3 TankClient類基本功能分析11</p><p>  3.3.4 Ball類基本功能分析11</p><p>  3.3.5 Explode類基本功能分析11</p><p>  3.3.6 服務(wù)器類基本功能分析12</p><p>  3.3.7 信息傳送類基本功能分析12</p><p>

12、  3.4 本章小結(jié)12</p><p>  第4章 系統(tǒng)實(shí)現(xiàn)13</p><p>  4.1 游戲主窗體實(shí)現(xiàn)13</p><p>  4.2 單機(jī)游戲的實(shí)現(xiàn)14</p><p>  4.3 聯(lián)機(jī)功能實(shí)現(xiàn)16</p><p>  4.4 本章小結(jié)18</p><p>  

13、第5章 總結(jié)與展望19</p><p>  5.1 總結(jié)19</p><p>  5.2 設(shè)計(jì)中的不足之處19</p><p>  5.3 展望19</p><p><b>  致 謝20</b></p><p><b>  參考文獻(xiàn)21</b></

14、p><p><b>  附錄122</b></p><p><b>  第1章 前言</b></p><p>  1.1 游戲設(shè)計(jì)的需求分析</p><p>  1.1.1 國(guó)內(nèi)外電子網(wǎng)絡(luò)游戲的現(xiàn)狀</p><p>  游戲本身就是一種娛樂方式。自有人類文明的時(shí)候,就有了游

15、戲,可以說游戲就是人們生活?yuàn)蕵返囊徊糠?。在今天,借助于?shù)字、電子、網(wǎng)絡(luò)、創(chuàng)意、編劇、美工、音樂……等等“先進(jìn)”的道具,網(wǎng)絡(luò)游戲?qū)τ谌藗儸F(xiàn)實(shí)生活的虛擬達(dá)到了一個(gè)全新的境界,并且則在這新的境界上還原了游戲的本源--人與人的互動(dòng)。網(wǎng)絡(luò)游戲滿足了現(xiàn)代社會(huì)必須的溝通需求,無疑它應(yīng)該是適合所有人的。</p><p>  國(guó)內(nèi)網(wǎng)絡(luò)游戲市場(chǎng),已經(jīng)坐擁了1000萬用戶且仍不斷增長(zhǎng)的游戲玩家市場(chǎng),百余款游戲也著實(shí)熱鬧,但也體現(xiàn)出國(guó)內(nèi)

16、玩家的相對(duì)固定和游戲種類的相對(duì)單一,雖說運(yùn)營(yíng)商的推廣手法也各具特點(diǎn),可本質(zhì)上的大同小異使得競(jìng)爭(zhēng)空前慘烈,而由此誘發(fā)的種種問題更是招致了社會(huì)與媒體的不滿,阻礙了游戲產(chǎn)業(yè)的發(fā)展。網(wǎng)絡(luò)游戲市場(chǎng)的重新定位是最迫切需要解決的問題。大型游戲機(jī)除了在大眾休閑娛樂方面,還在軍事、國(guó)防、醫(yī)療等方面有良好的發(fā)展前景。廣州大型游戲機(jī)所采用的尖端計(jì)算機(jī)圖形圖像技術(shù)、多樣化的軟件程序設(shè)計(jì)、成熟的機(jī)械和電子技術(shù),被充分運(yùn)用在軍事、國(guó)防及醫(yī)療等方面。例如,在軍事模擬

17、對(duì)抗演習(xí)中,大型游戲機(jī)既可以模擬作戰(zhàn)現(xiàn)場(chǎng)的地形、軍力部署、天氣等情況,還可以進(jìn)行多兵種戰(zhàn)術(shù)技能對(duì)抗訓(xùn)練;在國(guó)防訓(xùn)練方面,大型游戲機(jī)可以模擬坦克操縱、導(dǎo)彈發(fā)射、飛機(jī)駕駛、艦艇巡航等多種訓(xùn)練任務(wù);在醫(yī)療培訓(xùn)方面,大型游戲機(jī)擁有的全息三維立體投影技術(shù),可以逼真地展示人體的各部分構(gòu)造和器官,以上這些方面的應(yīng)用,都顯示出大型游戲機(jī)在降低行業(yè)技能培訓(xùn)成本的優(yōu)勢(shì)。</p><p>  1.1.2 本系統(tǒng)的現(xiàn)實(shí)意義</p

18、><p>  《坦克大戰(zhàn)》(Battle City)是1985年日本南夢(mèng)宮Namco游戲公司在任天堂FC(FamilyComputer)平臺(tái)上,推出的一款多方位平面射擊游戲。游戲以坦克戰(zhàn)斗及保衛(wèi)基地為主題。大部分80后的青年人曾經(jīng)都玩過這款FC平臺(tái)上的經(jīng)典游戲,F(xiàn)C平臺(tái)上的坦克大戰(zhàn)只能兩個(gè)人協(xié)同作戰(zhàn)。本系統(tǒng)運(yùn)用Java這個(gè)跨平臺(tái)的編程語(yǔ)言,在PC上重新實(shí)現(xiàn)這一款經(jīng)典游戲,探究曾經(jīng)這一款經(jīng)典游戲的大概設(shè)計(jì)與實(shí)現(xiàn),并且加

19、入坦克八個(gè)方向的行走,多人的局域網(wǎng)對(duì)戰(zhàn)模式,使游戲的玩法更豐富。</p><p>  1.1.3 本系統(tǒng)和其他開發(fā)游戲區(qū)別</p><p>  本系統(tǒng)的坦克大戰(zhàn)是基于Java語(yǔ)言設(shè)計(jì)開發(fā)的,具有高超的人工智能,精美的圖形處理,支持單機(jī)運(yùn)行和網(wǎng)絡(luò)對(duì)戰(zhàn)的坦克射擊游戲。比之前網(wǎng)絡(luò)上實(shí)現(xiàn)的游戲更加方便,快捷,智能。游戲基本玩法較簡(jiǎn)單,游戲可一人電腦作戰(zhàn),每次電腦方有坦克10輛,游戲以消滅全部敵方

20、坦克過關(guān)為目的。在這過程中,坦克有機(jī)會(huì)得到血塊來添加生命值,從而變得更加強(qiáng)大,也能利用各種有利地形來阻擊敵人。游戲設(shè)置了墻面,電腦方坦克不能穿越墻面射擊玩家坦克,而玩家坦克可隨意穿越墻面打擊電腦方坦克,這一游戲特權(quán)。還有給玩家坦克設(shè)置超級(jí)炮彈,當(dāng)電腦方坦克數(shù)量過多時(shí),玩家坦克可以發(fā)射超級(jí)炮彈打擊敵方。主要新增的功能簡(jiǎn)單羅列如下:</p><p>  1、屏幕左上方顯示游戲狀態(tài),當(dāng)玩家方坦克數(shù)全為零時(shí)則游戲結(jié)束;&

21、lt;/p><p>  2、一般坦克只可在空地中或草叢中行走,不可通過墻面等障礙物;</p><p>  3、游戲中打壞敵方坦克后,可能會(huì)在隨機(jī)位置隨機(jī)出現(xiàn)血塊獎(jiǎng)勵(lì),坦克經(jīng)過該位置可獲得相應(yīng)加生命值獎(jiǎng)勵(lì);</p><p>  4、玩家坦克的游戲資格和電腦坦克不同。</p><p>  1.2 開發(fā)技術(shù)概述</p><p>

22、;  1.2.1 Java、C#語(yǔ)言、C/C++主流編程語(yǔ)言比較</p><p>  簡(jiǎn)單地說,它們不是同一種語(yǔ)言,語(yǔ)法有差別,編程時(shí)具體用到的類庫(kù)或者函數(shù)庫(kù)也不一樣。雖然它們不是同一種語(yǔ)言,不過它們卻也有所聯(lián)系。廣泛地說,C可以看作其他三種語(yǔ)言的源語(yǔ)言,因?yàn)槠渌N語(yǔ)言幾乎都是從C而來的,無論從數(shù)據(jù)類型還是控制語(yǔ)句看,其他三種語(yǔ)言都有從C得來的跡象。</p><p>  其中C+

23、+則一般看作是對(duì)C語(yǔ)言的擴(kuò)展。因?yàn)镃語(yǔ)言沒有面向?qū)ο蟮恼Z(yǔ)法結(jié)構(gòu),而當(dāng)時(shí)業(yè)界又迫切需要面向?qū)ο蟮木幊烫匦?,所以貝爾?shí)驗(yàn)室的開發(fā)者就為C添加了面向?qū)ο蟮慕Y(jié)構(gòu)。現(xiàn)在C++已經(jīng)不只是C的擴(kuò)展了,它已經(jīng)完全可以被看作一種新的編程語(yǔ)言。雖然C的特性以及庫(kù)函數(shù)仍然被C++支持,不過C++擁有自己的獨(dú)立的類庫(kù)體系,功能相當(dāng)強(qiáng)大。Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,是由Sun Microsystems公司于1995年5月推出

24、的Java程序設(shè)計(jì)語(yǔ)言和Java平臺(tái)(即JavaSE, JavaEE, JavaME)的總稱。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。雖然它的底層(運(yùn)行時(shí)庫(kù))是用C語(yǔ)言開發(fā)的,可是并不依賴于C。因?yàn)镴ava的運(yùn)行是在運(yùn)行時(shí)庫(kù)的支持下進(jìn)

25、行的,所以運(yùn)行效率比起可以更接近底層的C/C++來說效率會(huì)有所影響,不過Java的類庫(kù)采用很好的設(shè)計(jì)理念設(shè)計(jì),非</p><p>  Java和C#都比較高級(jí),可以看作高級(jí)語(yǔ)言的高級(jí)語(yǔ)言,優(yōu)點(diǎn)是開發(fā)容易,但運(yùn)行效率不如更為底層的C/C++。具體選擇使用的時(shí)候,可以根據(jù)實(shí)際的項(xiàng)目需要選擇。運(yùn)行效率要求高的,底層控制要求高的用C/C++,否則可以選擇Java或C#;跨平臺(tái)的要求高的可以用Java。關(guān)于跨平臺(tái),

26、C/C++也是很好的語(yǔ)言,因?yàn)樗衅脚_(tái)都支持,不同的是,不同平臺(tái)支持的實(shí)現(xiàn)不同,類庫(kù)不同,要編寫跨平臺(tái)的程序,需要選擇跨平臺(tái)的類庫(kù),如標(biāo)準(zhǔn)類庫(kù),如果標(biāo)準(zhǔn)類庫(kù)的支持不夠也只需要附加編寫一個(gè)跨平臺(tái)的支持類庫(kù)。</p><p><b>  1.3 本章小結(jié)</b></p><p>  本章主要介紹了網(wǎng)絡(luò)游戲在國(guó)內(nèi)外發(fā)展的現(xiàn)狀。本系統(tǒng)主要的現(xiàn)實(shí)意義,與其之前版本的區(qū)別和擴(kuò)展

27、的一些功能。對(duì)Java、C#、C/C++幾種主流編程語(yǔ)言比較,闡述了使用Java語(yǔ)言編程的原因。</p><p>  第2章 相關(guān)技術(shù)理論</p><p>  2.1 系統(tǒng)運(yùn)行環(huán)境</p><p>  2.1.1 系統(tǒng)運(yùn)行的軟件環(huán)境</p><p>  (1)網(wǎng)絡(luò)服務(wù)器操作系統(tǒng):Windows XP;</p><p&g

28、t;  (2)開發(fā)工具:eclipse3.6.2;</p><p> ?。?)運(yùn)行環(huán)境:J2SDK 1.6;</p><p> ?。?)編程語(yǔ)言:Java語(yǔ)言;</p><p>  2.1.2 系統(tǒng)運(yùn)行的硬件環(huán)境</p><p> ?。?)CPU:Intel或者兼容微處理器,奔騰166MHz及其以上;</p><p>

29、 ?。?)內(nèi)存:最低32MB,可以運(yùn)行圖形界面的Java Application;最低48MB,可以運(yùn)行Java Applet;內(nèi)存不足,將會(huì)導(dǎo)致系統(tǒng)(尤其是服務(wù)器)的性能大幅下降;</p><p> ?。?)硬盤:242 MB到80 GB及其以上;</p><p> ?。?)圖形顯示卡:無要求;</p><p>  (5)網(wǎng)卡:普通網(wǎng)卡,3Com OfficeCo

30、nnect 10/100兆位網(wǎng)卡;</p><p><b>  2.2 相關(guān)理論</b></p><p>  2.2.1 關(guān)于Eclipse的介紹</p><p>  Eclipse是著名的跨平臺(tái)的自由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語(yǔ)言開發(fā),目前亦有人通過插件使其作為C++、Python、PHP等其他語(yǔ)言的開發(fā)工具。</

31、p><p>  Eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持,使得Eclipse擁有較佳的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。</p><p>  Eclipse最初是由IBM公司開發(fā)的替代商業(yè)軟件Visual Age for Java的下一代IDE開發(fā)環(huán)境,2001年11月貢獻(xiàn)給開源社區(qū),現(xiàn)在它由非營(yíng)利軟件供應(yīng)商聯(lián)盟Eclipse基金會(huì)(Eclipse

32、Foundation)管理。 2003年,Eclipse 3.0選擇OSGi服務(wù)平臺(tái)規(guī)范為運(yùn)行時(shí)架構(gòu)。 2007年6月,穩(wěn)定版3.3發(fā)布;2008年6月發(fā)布代號(hào)為Ganymede的3.4版;2009年6月發(fā)布代號(hào)為Galileo的3.5版;2010年6月發(fā)布代號(hào)為Helios的3.6版</p><p>  Eclipse的基礎(chǔ)是富客戶機(jī)平臺(tái)(Rich Client Platform,即RCP)

33、。RCP包括下列組件:</p><p>  核心平臺(tái)(啟動(dòng)Eclipse,運(yùn)行插件)</p><p>  OSGi(標(biāo)準(zhǔn)集束框架)</p><p>  SWT(可移植構(gòu)件工具包)</p><p>  JFace(文件緩沖,文本處理,文本編輯器)</p><p>  Eclipse工作臺(tái)(即Workbench,包含視圖(

34、views)、編輯器(editors)、視角(perspectives)、和向?qū)В╳izards))</p><p>  Eclipse采用的技術(shù)是IBM公司開發(fā)的(SWT),這是一種基于Java的窗口組件,類似Java本身提供的AWT和Swing窗口組件;不過IBM聲稱SWT比其他Java窗口組件更有效率。Eclipse的用戶界面還使用了GUI中間層JFace,從而簡(jiǎn)化了基于SWT的應(yīng)用程序的構(gòu)建。</p

35、><p>  Eclipse的插件機(jī)制是輕型軟件組件化架構(gòu)。在富客戶機(jī)平臺(tái)上,Eclipse使用插件來提供所有的附加功能,例如支持Java以外的其他語(yǔ)言。已有的分離的插件已經(jīng)能夠支持C/C++(CDT)、PHP、Perl、Ruby,Python、telnet和數(shù)據(jù)庫(kù)開發(fā)。插件架構(gòu)能夠支持將任意的擴(kuò)展加入到現(xiàn)有環(huán)境中,例如配置管理,而決不僅僅限于支持各種編程語(yǔ)言。</p><p>  Eclip

36、se的設(shè)計(jì)思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本內(nèi)核包括:圖形API(SWT/Jface),Java開發(fā)環(huán)境插件(JDT),插件開發(fā)環(huán)境(PDE)等。</p><p>  2.2.2 J2SE框架</p><p>  Java2平臺(tái)包括:標(biāo)準(zhǔn)版(J2SE)、企業(yè)版(J2EE)和微縮版(J2ME)三個(gè)版本。J2

37、SE,J2ME和J2EE,這也就是SunONE(Open NetEnvironment)體系。J2SE就是Java2的標(biāo)準(zhǔn)版,主要用于桌面應(yīng)用軟件的編程;J2ME主要應(yīng)用于嵌入式系統(tǒng)開發(fā),如手機(jī)和PDA的編程;J2EE是Java2的企業(yè)版,主要用于分布式的網(wǎng)絡(luò)程序的開發(fā),如電子商務(wù)網(wǎng)站和ERP系統(tǒng)。</p><p>  Standard Edition(標(biāo)準(zhǔn)版) J2SE 包含那些構(gòu)成Java語(yǔ)言核心的類。比如:

38、數(shù)據(jù)庫(kù)連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程</p><p>  Enterprise Edition(企業(yè)版) J2EE 包含J2SE 中的類,并且還包含用于開發(fā)企業(yè)級(jí)應(yīng)用的類。比如:EJB、servlet、JSP、XML、事務(wù)控制</p><p>  Micro Edition(微縮版) J2ME 包含J2SE中一部分類,用于消費(fèi)類電子產(chǎn)品的軟件開發(fā)。比如:呼機(jī)、智能卡、手機(jī)、PDA、機(jī)

39、頂盒</p><p><b>  簡(jiǎn)單講就是:</b></p><p>  J2SE: Java 2 Standard edition (Java 2 標(biāo)準(zhǔn)版)</p><p>  J2EE: Java 2 enterprise edition( Java 2 企業(yè)版)</p><p>  J2ME: Java 2 mi

40、cro edition (Java 2 微縮版)</p><p>  他們的范圍是:J2SE包含于J2EE中,J2ME包含了J2SE的核心類,但新添加了一些專有類</p><p>  應(yīng)用場(chǎng)合,API的覆蓋范圍各不相同。</p><p>  籠統(tǒng)的講,可以這樣理解:J2SE是基礎(chǔ);壓縮一點(diǎn),再增加一些CLDC等方面的特性就是J2ME;擴(kuò)充一點(diǎn),再增加一些EJB等企業(yè)

41、應(yīng)用方面的特性就是J2EE。</p><p>  補(bǔ)充一點(diǎn)J2EE更恰當(dāng)?shù)恼f,應(yīng)該是JAVA2企業(yè)開發(fā)的技術(shù)規(guī)范,不僅僅是比標(biāo)準(zhǔn)版多了一些類。J2EE又包括許多組件,如Jsp, Servlet, JavaBean, EJB, JDBC, JavaMail等。</p><p>  J2SE商業(yè)版本,標(biāo)準(zhǔn)版本 (Java2 Standard Edition) 定位

42、在客戶端,主要用于桌面應(yīng)用軟件的編程。</p><p>  J2SE 包含那些構(gòu)成Java語(yǔ)言核心的類。</p><p>  比如:數(shù)據(jù)庫(kù)連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程</p><p>  J2SE 是J2EE的基礎(chǔ),他大量的JDK代碼庫(kù)是每個(gè)要學(xué)習(xí)J2EE的編程人員必須掌握的。</p><p>  從JDK 5.0開始,不再

43、叫J2SE,改名為 Java SE了,因?yàn)槟莻€(gè)2已經(jīng)失去了其應(yīng)該有的意義。</p><p>  2.2.3 聯(lián)機(jī)通信機(jī)制</p><p>  網(wǎng)絡(luò)編程,簡(jiǎn)單地理解就是兩臺(tái)計(jì)算機(jī)相互通信。其基本模型就是客戶機(jī)/服務(wù)器模型,也就是通信雙方中的一方必須提供一個(gè)固定的位置,而另一方只需要知道這個(gè)固定的位置,并且建立兩者之間的聯(lián)系,然后完成數(shù)據(jù)交換。這里提供固定位置的一方通常稱為服務(wù)器,

44、而建立聯(lián)系的一方稱為客戶端。Socket(中文意思為插座),基于客戶機(jī)/服務(wù)器的Socket通信模式如圖2.1所示:</p><p>  圖2.1 基于客戶機(jī)/服務(wù)器的Soctet通信模式圖</p><p>  當(dāng)客戶程序需要與服務(wù)器程序通訊的時(shí)候,客戶程序在客戶機(jī)創(chuàng)建一個(gè)socket對(duì)象,Socket類有幾個(gè)構(gòu)造函數(shù)。兩個(gè)常用的構(gòu)造函數(shù)是 Socket(InetAddress addr,

45、 int port) 和 Socket(String host, int port),兩個(gè)構(gòu)造函數(shù)都創(chuàng)建了一個(gè)基于Socket的連接服務(wù)器端流套接字的流套接字。兩個(gè)函數(shù)都通過參數(shù)port獲得服務(wù)器的端口號(hào)。假設(shè)已經(jīng)建立連接了,網(wǎng)絡(luò)API將在客戶端基于Socket的流套接字中捆綁客戶程序的IP地址和任意一個(gè)端口號(hào),否則兩個(gè)函數(shù)都會(huì)拋出一個(gè)IOException對(duì)象。如果創(chuàng)建了一個(gè)Socket對(duì)象,那么它可能通過調(diào)用Socket的 getI

46、nputStream()方法從服務(wù)程序獲得輸入流讀傳送來的信息,也可能通過調(diào)用Socket的 getOutputStream()方法獲得輸出流來發(fā)送消息。在讀寫活動(dòng)完成之后,客戶程序調(diào)用close()方法關(guān)閉流和流套接字。</p><p>  2.2.4 Java圖形編程</p><p>  Java中的Graphics類是用于繪圖和顯示格式化文本的工具類。在Java程序中繪圖必須在一個(gè)窗

47、口(容器)中進(jìn)行,繪圖窗體經(jīng)常被設(shè)計(jì)為一個(gè)組件容器。一般首先在一個(gè)面板中進(jìn)行繪制,然后再將這個(gè)面板添加到顯示窗口中去。</p><p>  Graphics類是在Java.awt包中申明,顯示格式化文本和繪圖時(shí)通過調(diào)用Graphics類的draw()方法實(shí)現(xiàn)的,例如drawString(String),drawLine()等。繪圖采用的坐標(biāo)系是原點(diǎn)在左上角,縱軸向下以像素為單位的坐標(biāo)系。</p>&

48、lt;p><b>  2.3 本章小結(jié)</b></p><p>  在本章節(jié)中首先介紹了該系統(tǒng)的運(yùn)行環(huán)境,值的注意的是軟件環(huán)境的配置,因?yàn)檎麄€(gè)系統(tǒng)都是在虛擬環(huán)境下運(yùn)行的,所以虛擬環(huán)境對(duì)于整個(gè)設(shè)計(jì)的調(diào)試和運(yùn)行至關(guān)重要;其次對(duì)開發(fā)工具Eclipse3.6.2的簡(jiǎn)單介紹,利用eclipse開發(fā)項(xiàng)目,是可以提高項(xiàng)目的開發(fā)效率。還有是對(duì)一些技術(shù)理論,J2SE框架,Java語(yǔ)言,系統(tǒng)運(yùn)行所支持的

49、操作系統(tǒng),聯(lián)機(jī)通信機(jī)制及Java圖形編程等理論做了簡(jiǎn)單的介紹,為本系統(tǒng)后期實(shí)現(xiàn)圖形化界面和網(wǎng)絡(luò)通信做了理論支持。</p><p><b>  第3章 系統(tǒng)設(shè)計(jì)</b></p><p>  3.1 系統(tǒng)可行性分析</p><p>  3.1.1 技術(shù)可行性</p><p>  Java語(yǔ)言自Sun公司于1995年5月正式

50、發(fā)布以來,經(jīng)歷了出生、成長(zhǎng)、成熟壯大的幾個(gè)階段,逐漸發(fā)展成為IT領(lǐng)域里的主流計(jì)算模式,使用Java開發(fā)工具方便,容易實(shí)現(xiàn)。Java對(duì)開發(fā)網(wǎng)絡(luò)產(chǎn)品有它自己獨(dú)特的優(yōu)勢(shì),網(wǎng)絡(luò)游戲也是其開發(fā)產(chǎn)物之一。本系統(tǒng)開發(fā)過程是利用Java編程語(yǔ)言和eclipse集成開發(fā)環(huán)境配合使用來實(shí)現(xiàn)的,它是基于TCP/UDP協(xié)議和Socket編程技術(shù),建立以C/S為結(jié)構(gòu)模式的娛樂性游戲平臺(tái)。</p><p>  3.1.2 經(jīng)濟(jì)可行性<

51、/p><p>  本設(shè)計(jì)的開發(fā)是基于JDK1.6和eclipse3.6的,因?yàn)樗鼈兌际敲赓M(fèi)而且開源的軟件,所以實(shí)現(xiàn)本設(shè)計(jì)的成本就有所降低。隨著計(jì)算機(jī)、網(wǎng)絡(luò)通訊和信息技術(shù)的迅猛發(fā)展以及人類精神生活品質(zhì)的提高,國(guó)際、國(guó)內(nèi)的各種各樣的大型綜合游戲網(wǎng)站如雨后春筍般的發(fā)展起來。一款好的游戲帶來的經(jīng)濟(jì)效益可以說是不可估量的,比如現(xiàn)在網(wǎng)上最流行的魔獸世界、征途等大型網(wǎng)絡(luò)版游戲。本游戲既可單機(jī)運(yùn)行,也可以是聯(lián)機(jī)版多人同時(shí)在線對(duì)戰(zhàn)。&

52、lt;/p><p>  3.1.3 操作可行性</p><p>  本設(shè)計(jì)是一個(gè)網(wǎng)絡(luò)版的游戲平臺(tái),只是模擬了現(xiàn)在社會(huì)上的一些網(wǎng)絡(luò)游戲的部分功能,所以操作簡(jiǎn)易,玩家不需要了解內(nèi)部流程,只是和一般其他的網(wǎng)絡(luò)游戲一樣的操作即可開始游戲。相對(duì)于開發(fā)者而言,整個(gè)系統(tǒng)形成主要由JDK5.0虛擬環(huán)境和eclipse3.2共同完成,無需更多復(fù)雜的工具和服務(wù)器支持。</p><p>  

53、3.2 系統(tǒng)需求分析</p><p>  3.2.1 在人機(jī)對(duì)戰(zhàn)模式下實(shí)現(xiàn)的功能</p><p>  在單機(jī)模式下實(shí)現(xiàn)以下基本功能:</p><p>  坦克可以8個(gè)方向的行走,Z鍵打出子彈,S鍵超級(jí)炮彈,A鍵添加電腦坦克,F(xiàn)2復(fù)活。</p><p>  智能的敵方坦克,隨機(jī)移動(dòng),隨機(jī)打出子彈。</p><p>  加

54、入四面墻,子彈和敵方坦克不能穿墻。</p><p>  敵方坦克之間不重疊。</p><p>  子彈與坦克的碰撞檢測(cè)。</p><p>  加入主戰(zhàn)坦克的血條顯示,每顆炮彈減10點(diǎn)血,總共100點(diǎn)血,電腦坦克一顆子彈就死亡。</p><p>  使用配置文件可以配置敵方坦克出現(xiàn)的數(shù)量。</p><p>  菜單欄選項(xiàng)

55、,可以選擇單機(jī)模式或網(wǎng)絡(luò)模式,可以查看幫助信息,關(guān)于信息。</p><p>  加入坦克、子彈、墻的圖片,使界面看上去更美觀。</p><p>  3.2.2 在網(wǎng)絡(luò)對(duì)戰(zhàn)模式下實(shí)現(xiàn)的功能</p><p>  在人機(jī)對(duì)戰(zhàn)模式中實(shí)現(xiàn)功能基礎(chǔ)上,增加以下功能實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)戰(zhàn)功能:</p><p>  創(chuàng)建一個(gè)游戲的服務(wù)器端程序,負(fù)責(zé)分配客戶端ID號(hào)和轉(zhuǎn)

56、發(fā)每一個(gè)客戶端的信息到其它客戶端,使用TCP協(xié)議接收客戶端的連接,使用UDP協(xié)議傳送坦克的各類數(shù)據(jù)</p><p>  客戶端需要配置服務(wù)器的IP地址,服務(wù)器TCP端口,服務(wù)器UDP端口,本機(jī)的UDP端口</p><p>  客戶端使用TCP連接服務(wù)器,服務(wù)器分配唯一的ID號(hào)給客戶端</p><p>  使用UDP協(xié)議向服務(wù)器發(fā)送本機(jī)坦克數(shù)據(jù)</p>

57、<p>  啟動(dòng)服務(wù)器之后,客戶端坦克加入到服務(wù)器中,分紅方和藍(lán)方勢(shì)力互相對(duì)戰(zhàn)</p><p>  3.3 系統(tǒng)功能設(shè)計(jì)</p><p>  3.3.1 坦克大戰(zhàn)總體功能設(shè)計(jì)</p><p>  坦克大戰(zhàn)游戲主要實(shí)現(xiàn)玩家參加游戲的整個(gè)流程,用戶登陸游戲客戶端選擇游戲模式,可分為單機(jī)模式和網(wǎng)絡(luò)對(duì)戰(zhàn)模式,選擇單機(jī)模式可以直接進(jìn)入游戲狀態(tài);選擇網(wǎng)絡(luò)對(duì)戰(zhàn)模式,

58、在啟動(dòng)服務(wù)器后,玩家需要設(shè)置網(wǎng)絡(luò)參數(shù),服務(wù)器的IP地址、服務(wù)器TCP端口、服務(wù)器UDP端口、本機(jī)的UDP端口,本機(jī)的UDP端口不能與其它客戶端相同,成功后服務(wù)器會(huì)分配指定的ID號(hào)給客戶端(只有成功連接上服務(wù)器的玩家才能參與網(wǎng)絡(luò)對(duì)戰(zhàn)游戲功能);連接上的玩家就可以通過控制鍵盤操作,加入對(duì)戰(zhàn)游戲。整個(gè)網(wǎng)絡(luò)版坦克大戰(zhàn)游戲流程圖如圖3.1所示:</p><p>  圖3.1 網(wǎng)絡(luò)坦克大戰(zhàn)游戲流程</p>&

59、lt;p>  3.3.2 GameWindow類基本功能分析</p><p>  GameWindow類是整個(gè)系統(tǒng)的核心部分,它承擔(dān)整個(gè)系統(tǒng)的所有可實(shí)現(xiàn)功能的調(diào)度工作。 是整個(gè)游戲運(yùn)行的場(chǎng)所。GameWindow類設(shè)計(jì)流程圖如圖3.2所示:</p><p>  圖3.2 GameWindow類設(shè)計(jì)流程</p><p>  GameWindow類是主類,通過

60、調(diào)用其他類中封裝的方法來使整個(gè)系統(tǒng)運(yùn)行起來,下面顯示GameWindow與其它各類之間的關(guān)系如圖3.3所示:</p><p>  圖3.3 游戲系統(tǒng)類關(guān)聯(lián)圖</p><p>  3.3.3 TankClient類基本功能分析</p><p>  TankClient(坦克)類中,封裝了一些變量屬性,包括坦克自己的大?。╓IDTH,HRIGHT),運(yùn)動(dòng)速度(SPRR

61、D_X:在x軸方向的速度;SPEED_Y:在Y軸方向的速度)、生命值控制(life)、坦克編號(hào)(ID)、坦克名(name)、方向控制(dir)、生死控制(live)、好壞控制(good)的變量等。TankClient類中沒有main函數(shù),不是主類,它當(dāng)中只封裝一些變量屬性和靜態(tài)方法,被TankClient類調(diào)用來實(shí)現(xiàn)坦克的一系列動(dòng)作。TankClient類中的主要方法羅列如下:</p><p> ?。?)publ

62、ic Rectangle getRectange() {</p><p>  return new Rectangle(TankClientX, TankClientY,</p><p>  images[0].getWIDth(null), images[0].getWIDth(null));</p><p><b>  } </b><

63、/p><p>  Rectangle類是碰撞檢測(cè)的輔助類,通過得到坦克和子彈的矩形,檢測(cè)兩個(gè)矩形是否碰撞(相交);</p><p> ?。?)draw()方法:負(fù)責(zé)將自己坦克所有的活動(dòng)在屏幕上畫出來;</p><p>  (3)move()方法:主要負(fù)責(zé)控制坦克的移動(dòng),包括8個(gè)方向(左,左上,上,右上,右,右下,下,左下)的控制及坦克對(duì)于邊界的處理</p>

64、<p>  (4)keyPreesed()方法:設(shè)定使用鍵盤的“↑”“↓”“←”“→”“A”“S”F2”鍵控制坦克移動(dòng)及發(fā)炮,并且網(wǎng)絡(luò)對(duì)戰(zhàn)中向服務(wù)器發(fā)送消息等操作;</p><p> ?。?)keyReleased ()方法:處理按鍵抬起事件,抬起“Z”鍵時(shí),發(fā)射炮彈并加入新炮彈,能夠逐一發(fā)射每一發(fā)炮彈、抬起“S”鍵可以發(fā)射超級(jí)炮彈等功能,并向服務(wù)器發(fā)送消息;</p><p>

65、  (6)locateDireaction()方法:判斷坦克及炮筒方向,并且換方向時(shí)候向服務(wù)器發(fā)送一條消息</p><p> ?。?)fire() 方法:處理發(fā)送子彈的方法,并向服務(wù)器發(fā)送添加一顆子彈的消息;</p><p>  (8)collIDesWithWall()方法:主要負(fù)責(zé)處理坦克撞墻事件;</p><p>  3.3.4 Ball類基本功能分析<

66、/p><p>  Ball(子彈)類和Tank類一樣,只封裝一些變量屬性和靜態(tài)方法,主要變量包括:子彈自己的大?。╓IDTH,HRIGHT),運(yùn)動(dòng)速度(SPRRD_X:在x軸方向的速度;SPEED_Y:在Y軸方向的速度)、子彈標(biāo)示(ID)、所屬坦克的ID號(hào)(TankID用于網(wǎng)絡(luò)版)等。Misslie類持有一個(gè)TankClient類(大管家)的引用tc,TankClient類要執(zhí)行發(fā)射炮彈操作時(shí)調(diào)用Missile類中的

67、方法。Misslie類中的主要方法如下:</p><p>  draw()方法:負(fù)責(zé)畫出子彈的所有活動(dòng);</p><p>  move()方法:先判斷方向再移動(dòng),并給它一定的移動(dòng)速度;</p><p>  getRect()方法:負(fù)責(zé)取得子彈的外切方形,為碰撞檢測(cè)做準(zhǔn)備;</p><p>  hitTan()方法:檢測(cè)子彈是否撞到坦克,若撞到

68、返回true,否則返回false;</p><p>  hitTanks()方法:檢測(cè)是否撞到一系列坦克中的一個(gè);</p><p>  hitWall()方法:檢測(cè)子彈和墻是否相撞。</p><p>  3.3.5 Explode類基本功能分析</p><p>  Explode(爆炸)類也是一個(gè)只封裝自己的變量和方法的外部包裝類,沒有mai

69、n方法,供TankClient主類需要時(shí)調(diào)用它的draw()方法,當(dāng)子彈擊中坦克時(shí)需要產(chǎn)生爆炸。使用11張圖片重疊現(xiàn)實(shí)爆炸效果如3.4圖所示:</p><p><b>  圖3.4 爆炸圖</b></p><p>  3.3.6 服務(wù)器類基本功能分析</p><p>  TankServer(服務(wù)器)類主要負(fù)責(zé)在網(wǎng)絡(luò)對(duì)戰(zhàn)游戲時(shí)維護(hù)各個(gè)在線玩家

70、的基本信息,并動(dòng)態(tài)的維護(hù)玩家列表。聯(lián)機(jī)模式下類關(guān)系圖如圖3.5所示:</p><p>  3.5 聯(lián)機(jī)模式類關(guān)聯(lián)圖</p><p>  3.3.7 信息傳送類基本功能分析</p><p>  信息傳送類就是用來封裝客戶端和服務(wù)器端的交互信息。將網(wǎng)絡(luò)中傳遞的眾多信息封裝成可序列化的類,將會(huì)使程序有很好的可擴(kuò)展性。</p><p><b&

71、gt;  3.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><b>  第4章 系統(tǒng)實(shí)現(xiàn)</b></p><p>  4.1 游戲主窗體

72、實(shí)現(xiàn)</p><p>  GameWindow類負(fù)責(zé)畫出游戲主窗體,它是整個(gè)游戲運(yùn)行和所有活動(dòng)的場(chǎng)所。登陸主窗口后,主界面上包括兩個(gè)下拉菜單條,“游戲”和“幫助”,玩家點(diǎn)擊“游戲”菜單條下可以選擇游戲模式;“幫助”下拉菜單條中有游戲說明和游戲操作,方便用戶了解游戲規(guī)則。為了游戲不至于太單調(diào),還配置了背景音樂。除此之外,本設(shè)計(jì)優(yōu)點(diǎn)是GameWindow類還封裝了一個(gè)update()方法,使用雙緩沖消除閃爍現(xiàn)象。因?yàn)?/p>

73、刷新重畫頻率太快,paint()方法還沒有完成,會(huì)造成逐條顯示,影響系統(tǒng)的運(yùn)行,所以解決辦法是創(chuàng)建一個(gè)虛擬屏幕,在屏幕的后面,在要畫的將所有的東西畫在虛擬屏幕上,也就是內(nèi)存上,畫完之后一次性將虛擬屏幕上的內(nèi)容貼到屏幕上,這樣就消除了閃爍現(xiàn)象,用戶的眼睛便感覺不到閃爍了。GameWindow類是整個(gè)系統(tǒng)的“大管家”,當(dāng)要執(zhí)行某動(dòng)作時(shí),“大管家”只需要調(diào)用各個(gè)類中封裝好的方法,讓被調(diào)用的類自己去執(zhí)行它自己的方法,這更體現(xiàn)了面向?qū)ο蟮乃枷搿S?/p>

74、戲主窗體界面如圖4.1所示:</p><p>  圖4.1 游戲主窗口預(yù)覽效果圖</p><p>  實(shí)現(xiàn)虛擬屏幕消除閃爍的關(guān)鍵代碼如下:</p><p>  public voID update(Graphics g) {</p><p>  if(null==img){</p><p>  img = this

75、.createImage(gameWIDth,gameHeight);</p><p><b>  }</b></p><p>  Graphics imgGraphics = img.getGraphics();</p><p>  Color c=g.getColor();</p><p>  imgGraphics

76、.setColor(Color.black);</p><p>  imgGraphics.fillRect(0, menuHeight, gameWIDth, gameHeight);</p><p>  g.setColor(c);</p><p>  paint(imgGraphics);</p><p>  g.drawImage(i

77、mg,0,0,null);}</p><p>  4.2 單機(jī)游戲的實(shí)現(xiàn)</p><p>  游戲運(yùn)行主界面,在下拉菜單中選擇單機(jī)游戲進(jìn)入單機(jī)模式,通過鍵盤控制坦克運(yùn)動(dòng),相互對(duì)戰(zhàn),當(dāng)被打中時(shí)產(chǎn)生一個(gè)爆炸,屏幕左上方顯示游戲信息:子彈數(shù)目(出界就死亡)、爆炸數(shù)目、CPU坦克數(shù)目(網(wǎng)絡(luò)模式下不顯示)、玩家坦克生命值、您擊毀的坦克數(shù)量、當(dāng)前ID(單機(jī)模式下不顯示)。其效果圖如圖4.2所示:&l

78、t;/p><p>  圖4.2 單機(jī)游戲模式主界面圖</p><p>  CPU敵人坦克智能移動(dòng)、開炮的關(guān)鍵代碼如下:</p><p>  public static Random random = new Random();//隨機(jī)數(shù)</p><p>  static private int step = random.nextInt(12)

79、+3;;//坦克移動(dòng)的步數(shù)</p><p>  //設(shè)定移動(dòng)的方向,移動(dòng)步數(shù),開炮概率</p><p>  private voID locateDirection(){</p><p>  if(step==0){</p><p>  int randomNumber = random.nextInt(directions.length);

80、</p><p>  direction = directions[randomNumber];</p><p>  gunbarrelLocateDirection();</p><p>  step= random.nextInt(12)+3;//隨機(jī)產(chǎn)生移動(dòng)的步數(shù),最少為3</p><p>  if(step==3){//隨機(jī)開炮<

81、;/p><p>  GameWindow.getBalls().add(fire());</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  step--;</b></p><p><b> 

82、 }</b></p><p>  當(dāng)玩家在單機(jī)模式下按A鍵可以使用超級(jí)炮彈,可同時(shí)向八個(gè)方向發(fā)射炮彈,效果如圖4.3所示:</p><p>  圖4.3 發(fā)射超級(jí)炮彈</p><p>  超級(jí)炮彈的關(guān)鍵代碼如下:</p><p>  private Direction[] directions = Direction.values

83、();// 得到方向數(shù)組</p><p><b>  // 八個(gè)方向開炮</b></p><p>  private voID superFire() {</p><p>  if (!isLive()) {//如果坦克是死亡的</p><p><b>  return;</b></p>

84、<p><b>  }</b></p><p>  if (GameWindow.getNc() != null) {//如果網(wǎng)絡(luò)模式已經(jīng)打開</p><p><b>  return;</b></p><p><b>  }</b></p><p>  int

85、x = this.TankClientX + this.CLIENTTANKWIDTH / 2;// 子彈出現(xiàn)的X坐標(biāo)</p><p>  int y = this.TankClientY + this.CLIENTTANKHEIGHT / 2;// 子彈出現(xiàn)的y坐標(biāo)</p><p>  for (int i = 0; i < 8; i++) {//從方向類的數(shù)組里依次取8個(gè)方向&l

86、t;/p><p>  GameWindow.getBalls().add(</p><p>  new Ball(this.ID, directions[i], good, x, y, GameWindow));</p><p><b>  }</b></p><p><b>  }</b></p

87、><p>  當(dāng)玩家被擊中一次扣10點(diǎn)血,當(dāng)100點(diǎn)血全部扣完,提示游戲結(jié)束,并顯示死亡的次數(shù),按F2可以滿血原地復(fù)活,繼續(xù)戰(zhàn)斗,效果如圖4.4 所示:</p><p>  圖4.4 玩家死亡時(shí)游戲界面</p><p>  4.3 聯(lián)機(jī)功能實(shí)現(xiàn)</p><p>  在本系統(tǒng)的實(shí)現(xiàn)過程中,在支持網(wǎng)絡(luò)對(duì)戰(zhàn)的服務(wù)器類的定義中需要使用ServerSo

88、cket類來響應(yīng)多個(gè)客戶端連接請(qǐng)求,server服務(wù)器上需要兩大協(xié)議,一個(gè)是TCP,用來接收客戶端;另一個(gè)是UDP,用來轉(zhuǎn)發(fā)游戲的數(shù)據(jù)。Server類系統(tǒng)模型圖如圖4.5所示:</p><p>  圖4.5 Server類系統(tǒng)簡(jiǎn)單模型圖</p><p>  網(wǎng)絡(luò)游戲模式下,游戲主要在客戶端運(yùn)行,啟動(dòng)客戶端時(shí)玩家首先要填寫信息之后才能加入到游戲中去,先啟動(dòng)服務(wù)器,紅色小方塊表示確定服務(wù)器已

89、連接。如圖4.6所示:</p><p>  圖4.6 啟動(dòng)服務(wù)器</p><p>  進(jìn)入網(wǎng)絡(luò)模式,輸入網(wǎng)絡(luò)配置信息:服務(wù)器IP、服務(wù)器TCP端口、服務(wù)器UDP端口、自己本機(jī)的UDP端口,端口不能與其它客戶端的相同。網(wǎng)絡(luò)配置界面如圖4.7所示:</p><p>  圖4.7 網(wǎng)絡(luò)版游戲玩家信息欄</p><p>  填寫好網(wǎng)絡(luò)配置信息,單

90、機(jī)YES,連接上服務(wù)器后,進(jìn)入游戲主界面,服務(wù)器為玩家指定勢(shì)力和ID號(hào),進(jìn)入游戲后,通過坦克顏色來區(qū)分?jǐn)硨?duì)勢(shì)力和同盟坦克。游戲界面左上角顯示游戲的基本信息,包括玩家ID號(hào),玩家的血量,所擊毀的敵方坦克等,如圖4.8所示:</p><p>  圖4.8 登陸網(wǎng)絡(luò)模式主界面</p><p>  多個(gè)玩家加入后,開始對(duì)戰(zhàn),在此模式中沒有超級(jí)炮彈功能,但是被擊毀之后允許按F2滿血原地復(fù)活,但是會(huì)被

91、記錄死亡的次數(shù),各個(gè)玩家游戲界面上都能顯示實(shí)時(shí)動(dòng)態(tài),效果如圖4.9和5.0所示:</p><p>  圖4.9 網(wǎng)絡(luò)版游戲?qū)?zhàn)實(shí)時(shí)顯示圖</p><p>  圖5.0網(wǎng)絡(luò)版死亡之后復(fù)活顯示圖</p><p>  網(wǎng)絡(luò)模式設(shè)計(jì)主要代碼如下:</p><p><b>  請(qǐng)參見附錄1</b></p><p

92、><b>  4.4 本章小結(jié)</b></p><p>  本章主要介紹了該系統(tǒng)的實(shí)現(xiàn)和運(yùn)行,分別敘述了在單機(jī)模式和網(wǎng)絡(luò)對(duì)戰(zhàn)模式下游戲的運(yùn)行和調(diào)試過程。在單機(jī)模式下,玩家的游戲發(fā)射火力要比電腦隨機(jī)產(chǎn)生的坦克能力稍強(qiáng)一些。網(wǎng)絡(luò)模式下,注意一定要先啟動(dòng)服務(wù)器,只有啟動(dòng)服務(wù)器后,各個(gè)玩家才能加入游戲。到此為止,本設(shè)計(jì)基本完成預(yù)期效果。</p><p>  第5章

93、總結(jié)與展望</p><p><b>  5.1 總結(jié)</b></p><p>  本次設(shè)計(jì)已是大學(xué)最后一次對(duì)專業(yè)知識(shí)的綜合實(shí)踐活動(dòng),同時(shí)也是我所做的工作量最大的一次作業(yè),因此從一開始我對(duì)本次畢業(yè)設(shè)計(jì)就給予了高度重視。從選題、收集資料、學(xué)習(xí)相關(guān)技術(shù)到實(shí)際編程,我都一絲不茍的對(duì)待了。當(dāng)然其間我也走了不少?gòu)澛?,有時(shí)甚至需要推倒重來,但同時(shí)我也多次體會(huì)過克服困難后的成就感。

94、</p><p>  通過這次畢業(yè)設(shè)計(jì)以及撰寫本畢業(yè)論文,我學(xué)會(huì)了一些編程技巧,而且對(duì)調(diào)試的錯(cuò)誤有進(jìn)一步的認(rèn)識(shí),有時(shí)候就一個(gè)小小的語(yǔ)法錯(cuò)誤就會(huì)導(dǎo)致程序調(diào)試不通過。所以每個(gè)字符,每句程序都要認(rèn)真對(duì)待。使用不同的編程環(huán)境,其效率完全不一樣,所以我選擇了Eclipse,它自動(dòng)找錯(cuò)/糾錯(cuò)功能、Debug調(diào)試和代碼自動(dòng)生成等一些重要的功能大大提高了我的設(shè)計(jì)效率。對(duì)于設(shè)計(jì)論文,一定要注意格式,認(rèn)識(shí)事情都有它的規(guī)則、規(guī)范,不能

95、按個(gè)人喜好隨意改變。</p><p>  5.2 設(shè)計(jì)中的不足之處</p><p>  本系統(tǒng)實(shí)現(xiàn)了坦克游戲所應(yīng)有的基本功能,但是由于時(shí)間和能力有限,還有一部分功能未能實(shí)現(xiàn),例如:服務(wù)器處理不夠高效、協(xié)議不夠精細(xì)、線程需要同步(確定本機(jī)坦克在其它客戶端顯示的位置準(zhǔn)確)、客戶端退出時(shí)候服務(wù)端的處理、服務(wù)器一段時(shí)間內(nèi)沒有接收到數(shù)據(jù)的處理、地圖設(shè)定、升級(jí)、坦克的高級(jí)人工智能控制等,不能和現(xiàn)在I

96、nternet上各種坦克大戰(zhàn)游戲相媲美。還有就是對(duì)部分功能在設(shè)計(jì)過程中未能做到更加完善,稍有瑕疵,但是已經(jīng)盡力改善了。還有就是當(dāng)運(yùn)行網(wǎng)絡(luò)模式時(shí),必須專門啟動(dòng)服務(wù)器,而不是一鍵啟動(dòng)。對(duì)于玩家里來說有點(diǎn)麻煩。</p><p><b>  5.3 展望</b></p><p>  本系統(tǒng)基本實(shí)現(xiàn)了坦克游戲所應(yīng)有的基本功能,在大學(xué)中最后一次專攻式的學(xué)習(xí)了Java語(yǔ)言,使我對(duì)

97、Java語(yǔ)言有了更深層次的理解,通過該游戲設(shè)計(jì),提高了我的編程能力,也讓我養(yǎng)成了良好的編程習(xí)慣。希望在今后自己能繼續(xù)對(duì)J2SE等技術(shù)進(jìn)行深入的學(xué)習(xí)和研究。</p><p><b>  致 謝</b></p><p>  首先我要感謝我的指導(dǎo)老師張曉獻(xiàn)老師,感謝她在整個(gè)畢業(yè)設(shè)計(jì)過程中的指導(dǎo),為我提示游戲設(shè)計(jì)的邏輯思路;為我提供參考書籍;為我提供了技術(shù)方面資料,而且在遇到

98、問題的時(shí)候,總是鼓勵(lì)我去解決;尤其在論文格式的修改方面,讓我明白了要寫出一個(gè)標(biāo)準(zhǔn)的論文,它的格式的重要性,哪怕就算是一個(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í)

99、候,才知道每門課程的重要性,甚至覺得所學(xué)習(xí)的那些課程還遠(yuǎn)遠(yuǎn)不夠,所以以后還應(yīng)該不斷的學(xué)習(xí)。</p><p>  感謝學(xué)校對(duì)我的培育,讓我從思想上素質(zhì)上知識(shí)上得到很大的提高。學(xué)習(xí)中的各科老師的悉心教導(dǎo)讓我掌握了基本知識(shí).</p><p>  感謝我的同學(xué)在設(shè)計(jì)完成前后對(duì)我的得力幫助,沒有同學(xué)的共同學(xué)習(xí)進(jìn)步也許就沒法完成設(shè)計(jì),沒有同學(xué)對(duì)程序的測(cè)試,也許就難以發(fā)現(xiàn)一些潛在的錯(cuò)誤,在此一并表示感謝

100、。</p><p>  在此一并祝愿學(xué)校領(lǐng)導(dǎo)、老師、同學(xué)工作順利,事業(yè)更上一層樓;同時(shí)也祝愿學(xué)校更加輝煌。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 姜志強(qiáng). Java語(yǔ)言程序設(shè)計(jì)[M]. 北京:電子工業(yè)出版社,2007</p><p>  [2] Bruce Eckel. Java編程思

101、想[M]. 北京:機(jī)械工業(yè)出版社,2007</p><p>  [3] Sierra,Bates. Head First Java[M]. 北京: 中國(guó)電力出版社,2007</p><p>  [4] 葉核亞. Java程序設(shè)計(jì)實(shí)用教程[M]. 北京:電子工業(yè)出版,2010</p><p>  [5] 卡爾弗特,多納霍. Java TCP/IP Socket編程[M

102、]. 北京:機(jī)械工業(yè)出版社,2009</p><p>  [6] 哈諾德. java網(wǎng)路編程[M]. 北京:中國(guó)電力出版社,2005</p><p>  [7] 杜佳榮,馬建紅,騰振宇. Java網(wǎng)絡(luò)編程技術(shù)與實(shí)踐[M]. 北京:清華大學(xué)出版社,2008</p><p>  [8] 閻宏. Java與模式[M]. 北京:電子工業(yè)出版社,2002</p>

103、<p><b>  附錄1</b></p><p>  import Java.io.DataInputStream;</p><p>  import Java.io.DataOutputStream;</p><p>  import Java.io.IOException;</p><p>  impo

104、rt Java.net.DatagramPacket;</p><p>  import Java.net.DatagramSocket;</p><p>  import Java.net.InetSocketAddress;</p><p>  import Java.net.ServerSocket;</p><p>  import

105、Java.net.Socket;</p><p>  import Java.net.SocketException;</p><p>  import Java.util.ArrayList;</p><p>  import Java.util.List;</p><p><b>  //服務(wù)器類</b></p

106、><p>  public class TankServer {</p><p>  public static int ID = 100;// 分配給客戶端的ID號(hào)(用UUID或GUID實(shí)現(xiàn))</p><p>  public static final int TCP_PORT = 4444;// TCP端口號(hào)</p><p>  public

107、 static final int UDP_PORT = 5555;// UDP占用的端口號(hào)</p><p>  List<Client> clients = new ArrayList<Client>();// 保存客戶端連接信息的列表</p><p>  public voID start() {</p><p>  new Thread

108、(new UDPThread()).start();// 啟一個(gè)線程監(jiān)聽接收到的UDP數(shù)據(jù)</p><p>  ServerSocket ss = null;// 服務(wù)器TCPsocket類</p><p><b>  try {</b></p><p>  ss = new ServerSocket(TCP_PORT);// 服務(wù)器占用的端口

109、號(hào)</p><p>  } catch (Exception e) {</p><p><b>  }</b></p><p>  while (true) {</p><p>  Socket s = null;</p><p><b>  try {</b></p&

110、gt;<p>  s = ss.accept();// 接受一個(gè)socket連接</p><p>  DataInputStream dis = new DataInputStream(s.getInputStream());// 創(chuàng)建數(shù)據(jù)輸入流</p><p>  String IP = s.getInetAddress().getHostAddress();// 根據(jù)so

111、cket拿到IP地址</p><p>  int UDPPort = dis.readInt();// 讀出客戶端發(fā)送過來的UDP的端口號(hào)</p><p>  Client c = new Client(IP, UDPPort);// 創(chuàng)建客戶端信息類</p><p>  clients.add(c);// 儲(chǔ)存進(jìn)列表</p><p>  D

112、ataOutputStream dos = new DataOutputStream(s.getOutputStream());// 創(chuàng)建數(shù)據(jù)輸出流</p><p>  dos.writeInt(ID++);// 向客戶端發(fā)送一個(gè)ID號(hào)</p><p>  // 打印出客戶端的IP地址,客戶端的TCP端口號(hào),客戶端的UDP端口號(hào)</p><p>  System.o

113、ut.println("A Client Connect! Addr- "</p><p>  + s.getInetAddress() + ":" + s.getPort()</p><p>  + "---UDPPort:" + UDPPort);</p><p>  } catch (Exceptio

114、n e) {</p><p>  } finally {</p><p>  if (null != s) {</p><p><b>  try {</b></p><p>  s.close();// 關(guān)閉</p><p>  } catch (IOException e) {</p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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)論