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

下載本文檔

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

文檔簡介

1、石家莊科技信息職業(yè)學(xué)院石家莊科技信息職業(yè)學(xué)院畢畢 業(yè)業(yè) 論論 文文題目:題目: 基于基于 J2SEJ2SE 的坦克大戰(zhàn)的坦克大戰(zhàn) 學(xué)學(xué) 號:號: 090124017 姓姓 名:名: 李世陽李世陽 專業(yè)班級:專業(yè)班級:軟件技術(shù)(游戲方向)軟件技術(shù)(游戲方向)09-24 班班指導(dǎo)教師:指導(dǎo)教師: 劉永偉劉永偉 完成日期:完成日期: 2011-12-18 基于基于 JavaJava 的網(wǎng)絡(luò)版坦克大戰(zhàn)游戲設(shè)計的網(wǎng)絡(luò)版坦克大戰(zhàn)游戲設(shè)計摘摘 要要:本設(shè)計采用面向?qū)ο蟮脑O(shè)計模式,對游戲中的所有物體賦予對象的概念和屬性。運行程序后允許用戶選擇執(zhí)行選項菜單。在開始游戲后,啟動服務(wù)器和客戶端,對背景的所有物體進行

2、繪圖。在主程序運行的線程中,畫面刷新將以一定的頻率采用雙緩沖技術(shù)對屏幕重繪,實時反映整個游戲的進行狀態(tài)。用戶控制的坦克運行在主線程中,隨屏幕刷新的頻率而移動。坦克將在游戲開始時進行初始化,然后將坦克繪制在地圖的上層。本設(shè)計主要實現(xiàn)的功能是讓坦克移動并能夠智能的打出炮彈,躲避子彈,炸毀對方坦克。能夠支持網(wǎng)絡(luò)對戰(zhàn)和單機對戰(zhàn)兩種模式。關(guān)關(guān)鍵鍵詞詞:面向?qū)ο?;坦克大?zhàn);網(wǎng)絡(luò)游戲;Java;Socket 類Java-based Web version of Battle City Game Design【A Ab bs st tr ra ac ct t】The design of object-orie

3、nted design patterns, all the objects on in the game to give the concept of objects and attributes. After running the program allows the user to select the implementation of the Options menu. At the beginning of the game, start the server and client, all objects on the background graphics. Thread ru

4、nning in the main program, the screen refresh frequency will be some double buffer technology to redraw the screen in real time to reflect the state of the game. User-controlled tanks to run in the main thread, with the screen refresh frequency of the movement. Tank will start to initialize the game

5、, and then draw the map of the upper tank. Designed to achieve the main function is to allow tanks to move and be able to play smart bombs, dodge bullets, to blow up other tanks. To support online play and single play against two modes.K Ke ey y w wo or rd ds s: : Object-oriented; Battle City; onlin

6、e games; Java; Socket class摘要.1第 1 章 前言.41.1 游戲設(shè)計的需求分析.41.1.1 本系統(tǒng)的現(xiàn)實意義.41.1.2 本系統(tǒng)和其他開發(fā)游戲區(qū)別 .41.2 開發(fā)技術(shù)概述.51.2.1 JAVA、C 語言、C+三種主流編程技術(shù)比較.51.3 本章小結(jié).5第 2 章 相關(guān)技術(shù)理論.52.1 系統(tǒng)運行環(huán)境.52.1.1 系統(tǒng)運行的軟件環(huán)境 .52.1.2 系統(tǒng)運行的硬件環(huán)境 .62.2 相關(guān)理論.62.2.1 關(guān)于 ECLIPSE的介紹 .62.2.2 J2SE 框架 .62.2.3 聯(lián)機通信機制.72.2.4 JAVA圖形編程.82.3 本章小結(jié).9第 3 章

7、 系統(tǒng)設(shè)計.93.1 系統(tǒng)功能設(shè)計.93.1.1 坦克大戰(zhàn)總體功能設(shè)計.933.1.2 TANKCLIENT類基本功能分析 .103.1.3 TANK類基本功能分析.113.1.4 MISSILE類基本功能分析 .123.1.5 EXPLODE類基本功能分析 .133.1.6 服務(wù)器類基本功能分析 .133.1.7 信息傳送類基本功能分析 .143.2 本章小結(jié).14第 4 章 系統(tǒng)實現(xiàn).144.1 游戲主窗體實現(xiàn).144.2 單機游戲的實現(xiàn).164.3 聯(lián)機功能實現(xiàn).174.4 本章小結(jié).22第 5 章 總結(jié)與展望.225.1 總結(jié).225.2 設(shè)計中的不足之處.235.3 展望.23致 謝

8、.244第第 1 1 章章 前言前言人類進入 21 世紀(jì),全球一體化,互聯(lián)網(wǎng)就起到重要的作用,而且隨著互聯(lián)網(wǎng)的不斷發(fā)展,信息技術(shù)逐漸發(fā)展壯大,將成為網(wǎng)絡(luò)經(jīng)濟的核心。其中計算機、網(wǎng)絡(luò)通信的發(fā)展最為迅速。在現(xiàn)今電子信息高速發(fā)展的時代,網(wǎng)絡(luò)游戲已經(jīng)深入到人們的日常生活中,成為老少皆宜的娛樂方式。1.11.1 游戲設(shè)計的需求分析游戲設(shè)計的需求分析1.1.11.1.1 本系統(tǒng)的現(xiàn)實意義本系統(tǒng)的現(xiàn)實意義游戲本身是一種娛樂方式,能帶給人們無盡的樂趣,而且游戲行業(yè)的發(fā)展還將會帶動眾多周邊產(chǎn)業(yè),如五金、塑料、機械、電子、 顯像管,高端機型甚至使用了 40 英寸以上的大屏幕背投、液晶顯示器等,這些顯像設(shè)備不但要依

9、賴國內(nèi)眾多顯像管生產(chǎn)企業(yè)提供支持,更要針對游戲的內(nèi)容進行深入開發(fā)和優(yōu)化,以適應(yīng)游戲內(nèi)容的飛速發(fā)展和變化,大大突破了傳統(tǒng)家電類顯像設(shè)備的限制,對國內(nèi)顯像管制造企業(yè)的發(fā)展、創(chuàng)新具有極大的推動作用,大型游戲機的外部框體制造涉及工業(yè)設(shè)計、模具加工、五金加工、塑料成形、特殊印刷等工藝流程,由此帶動了一大批相關(guān)的零部件生產(chǎn)制造企業(yè),而這些企業(yè)均為生產(chǎn)密集型企業(yè),大幅度增加了勞動就業(yè)的需求。1.1.21.1.2 本系統(tǒng)和其他開發(fā)游戲區(qū)別本系統(tǒng)和其他開發(fā)游戲區(qū)別本系統(tǒng)的坦克大戰(zhàn)是基于 Java 語言設(shè)計開發(fā)的,具有高超的人工智能,精美的圖形處理,支持單機運行和網(wǎng)絡(luò)對戰(zhàn)的坦克射擊游戲。比之前網(wǎng)絡(luò)上實現(xiàn)的游戲更加

10、方便,快捷,智能。游戲基本玩法較簡單,游戲可一人電腦作戰(zhàn),每次電腦方有坦克 10 輛,游戲以消滅全部敵方坦克過關(guān)為目的。在這過程中,坦克有機會得到血塊來添加生命值,從而變得更加強大,也能利用各種有利地形來阻擊敵人。游戲設(shè)置了墻面,電腦方坦克不能穿越墻面射擊玩家坦克,而玩家坦克可隨意穿越墻面打擊電腦方坦克,這一游戲特權(quán)。還有給玩家坦克設(shè)置超級炮彈,當(dāng)電腦方坦克數(shù)量過多時,玩家坦克可以發(fā)射超級炮彈打擊敵方。主要新增的功能簡單羅列如下:1、屏幕左上方顯示游戲狀態(tài),當(dāng)玩家方坦克數(shù)全為零時則游戲結(jié)束;2、一般坦克只可在空地中或草叢中行走,不可通過墻面等障礙物;53、游戲中打壞敵方坦克后,可能會在隨機位置

11、隨機出現(xiàn)血塊獎勵,坦克經(jīng)過該位置可獲得相應(yīng)加生命值獎勵;4、玩家坦克的游戲資格和電腦坦克不同。1.21.2 開發(fā)技術(shù)概述開發(fā)技術(shù)概述1.2.11.2.1 JavaJava、C C 語言、語言、C+C+三種主流編程技術(shù)比較三種主流編程技術(shù)比較Java 語言是一種跨平臺,適合于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言。JAVA 現(xiàn)在主要用在 WEB 開發(fā),手機游戲及一些平臺游戲的開發(fā),因為它具有很好的跨平臺性,在手機等各種電子產(chǎn)品上應(yīng)用非常廣泛。C 語言是一種面向過程編程,這就使得 Java 具有重用的特性,在開發(fā)速度上比 C 語言更快,但是在運行速度上卻是 C 更快,因為 C 屬于底層語言,它比 JAV

12、A更加親近機器,所以在許多系統(tǒng)開發(fā)上一般是用 C 語言,比如我們常用的 XP 系統(tǒng)、LINUX 系統(tǒng),都是 C 語言開發(fā)的??缙脚_的服務(wù)器端的嵌入式腳本語言。C+多用于游戲引擎、反病毒、硬件驅(qū)動以及一些對運行效率要求比較高的應(yīng)用程序,比如數(shù)據(jù)庫管理系統(tǒng)。 C+語言在提供強大的功能的同時也提高了程序含 BUG 的可能性。 C+為了照顧大量的 C 語言使用者,而兼容了 C,使得自身僅僅成為了帶類的 C 語言,多多少少影響了其面向?qū)ο蟮膹氐仔浴?.31.3 本章小結(jié)本章小結(jié)本章主要介紹了網(wǎng)絡(luò)游戲在國內(nèi)外發(fā)展的現(xiàn)狀,現(xiàn)如今,網(wǎng)絡(luò)游戲市場的重新定位是最迫切需要解決的問題。本系統(tǒng)主要的現(xiàn)實意義,與其他游戲

13、的區(qū)別和完善的一些功能。本文用 Java 語言、C 語言、C+三種主流編程技術(shù)比較,闡述了使用 Java 語言編程的原因。第第 2 2 章章 相關(guān)技術(shù)理論相關(guān)技術(shù)理論2.12.1 系統(tǒng)運行環(huán)境系統(tǒng)運行環(huán)境2.1.12.1.1 系統(tǒng)運行的軟件環(huán)境系統(tǒng)運行的軟件環(huán)境(1)網(wǎng)絡(luò)服務(wù)器操作系統(tǒng):Windows XP;(2)開發(fā)工具:eclipse3.2;6(3)運行環(huán)境:J2SDK 1.5;(4)編程語言:Java 語言;2.1.22.1.2 系統(tǒng)運行的硬件環(huán)境系統(tǒng)運行的硬件環(huán)境(1)CPU:Intel 或者兼容微處理器,奔騰 166MHz 及其以上;(2)內(nèi)存:最低 32MB,可以運行圖形界面的 J

14、ava Application;最低48MB,可以運行 Java Applet;內(nèi)存不足,將會導(dǎo)致系統(tǒng)(尤其是服務(wù)器)的性能大幅下降;(3)硬盤:242 MB 到 80 GB 及其以上;(4)圖形顯示卡:無要求;(5)網(wǎng)卡:普通網(wǎng)卡,3Com OfficeConnect 10/100 兆位網(wǎng)卡;2.22.2 相關(guān)理論相關(guān)理論2.2.12.2.1 關(guān)于關(guān)于 EclipseEclipse 的介紹的介紹Eclipse 是一個主要針對 Java 項目開發(fā)所設(shè)計的【綜合性集成開發(fā)環(huán)境-Integrated Development Emironment,IDE】 ,最早是由 Object Technolo

15、gics International 這家公司開發(fā),該公司于 1996 年被 IBM 并購后,將 Eclipse 改為 Open Source software。它最大的特點是:采用了插件的結(jié)構(gòu),通過下載安裝不同的插件,就可以實現(xiàn)不同類型的程序開發(fā)。利用 eclipse 開發(fā)項目,是可以提高項目的開發(fā)效率,因為它不但可以像傳統(tǒng)的一些編輯器一樣編寫代碼,而且還有自動找錯/糾錯功能、Debug 調(diào)試和代碼自動生成等一些重要的功能,這使項目開發(fā)的效率得到了提升。Eclipse 可以作為其他開發(fā)工具的平臺。工作區(qū)被存儲在磁盤上,并且對其他人是可見的。Eclipse3.2 的大多數(shù)新特性都是 Eclip

16、se 用戶需求的直接結(jié)果。2.2.22.2.2 J2SEJ2SE 框架框架J2SE 軟件是快速開發(fā)、部署關(guān)鍵任務(wù)和企業(yè)應(yīng)用程序的首選解決方案。J2SE 是基于 Java 跨平臺技術(shù)和強有力的安全模塊而開發(fā)的,其最新的特征和功能極大地提高了 Java 語言的伸縮性、靈活性、適用性,以及可靠性。J2SE 特點:良好的計算性能和縮放能力。J2SE 提升了 Java 計算的性能與縮放能力,代表了 Java 技術(shù)的大跨步進展。通過 J2SE 框架更簡易的步驟、花費更少的時間,采7用 Java 技術(shù)開發(fā)與配置要求更高的應(yīng)用了。J2SE 在 Java 客戶機應(yīng)用方面得到了重大性能提升?;?Swing 的

17、Java 小程序和應(yīng)用程序在圖形用戶界面(GUI)的響應(yīng)速度上也大有提高。跨平臺:J2SE 是一個具有綜合性能的平臺,能使一個完整的、可縮放的高性能應(yīng)用配置在任何種類的平臺上。支持 Web 服務(wù): J2SE 對 SSL、LDAP 等業(yè)界標(biāo)準(zhǔn)技術(shù)也給予支持,因此保證了在不同平臺、系統(tǒng)和環(huán)境間的互操作能力。J2SE 支持 XML 技術(shù)和一整套安全服務(wù),因此為基于各類標(biāo)準(zhǔn)的可互操作應(yīng)用與服務(wù)的創(chuàng)建奠定了重要基礎(chǔ)。有了 J2SE 與 Java Web Services Developer Pack 的結(jié)合,開發(fā)商就能創(chuàng)建、測試和配置 Web 服務(wù)了。完整性:J2SE 還是一個完整的開發(fā)環(huán)境。開發(fā)商可基

18、于這一環(huán)境創(chuàng)建功能豐富的交互式應(yīng)用。這些應(yīng)用可以配置在任何平臺上。J2SE 具有新的 GUI 控制功能、快速的 Java 2DT 圖形功能、支持國際化與本地化擴展和新的配置選項,并對Windows XP 提供擴展支持。總之,J2SE 是多種不同風(fēng)格軟件的開發(fā)基礎(chǔ),包括客戶端 Java 小程序和應(yīng)用程序,以及獨立的服務(wù)器應(yīng)用程序等。J2SE 版還是J2ME 的基礎(chǔ),是 J2EE 執(zhí)行程序的推動力。Java 之所以能夠發(fā)展得很快,是因為互聯(lián)網(wǎng)的發(fā)展非??臁挠嬎愕慕Y(jié)構(gòu)來看,Java 主要分三大類:第一是服務(wù)器端,這里就有了 J2EE 企業(yè)版;第二是桌面 PC,這一類用的是 J2SE 標(biāo)準(zhǔn)版;第三就

19、是掌上電腦、移動設(shè)備,用的都是J2ME。但是,大部分非企業(yè)級軟件還是在 J2SE 上開發(fā)的比較多。首先,這是因為很多的應(yīng)用軟件都是在 J2SE 上開發(fā)的;其次,J2SE 是和 J2EE 兼容的,企業(yè)版是在標(biāo)準(zhǔn)版上的擴充,在 J2SE 的版本上開發(fā)的軟件,拿到企業(yè)的平臺上是一樣可以運行的;再次,一般開發(fā)還是在 J2SE 的環(huán)境上,只是說 J2ME 提供微型版的一個環(huán)境。在 J2SE 上虛擬出一個環(huán)境,開發(fā)出來的應(yīng)用軟件是可以拿到微型版上運行的。2.2.32.2.3 聯(lián)機通信機制聯(lián)機通信機制網(wǎng)絡(luò)編程,簡單地理解就是兩臺計算機相互通信。其基本模型就是客戶機/服務(wù)器模型,也就是通信雙方中的一方必須提供

20、一個固定的位置,而另一方只需要知道這個固定的位置,并且建立兩者之間的聯(lián)系,然后完成數(shù)據(jù)交換。這里提供固定位置的一方通常稱為服務(wù)器,而建立聯(lián)系的一方稱為客戶端。Socket(中文意思為插座) ,基于客戶機/服務(wù)器的 Soctet 通信模式如圖 2.1 所示:8創(chuàng)建 Socket 類的對象指定服務(wù)器端公認(rèn)的 Socket 地址和端口在 Socket 上監(jiān)聽客戶端的鏈接請求接收客戶端的請求信息解釋并處理請求信息向服務(wù)器發(fā)出請求向服務(wù)器端發(fā)送鏈接請求創(chuàng)建 Socket 類對象客戶端將處理結(jié)果返回給客戶端接收服務(wù)結(jié)果服務(wù)請求服務(wù)響應(yīng)服務(wù)器端圖 2.1 基于客戶機/服務(wù)器的 Soctet 通信模式圖當(dāng)客戶

21、程序需要與服務(wù)器程序通訊的時候,客戶程序在客戶機創(chuàng)建一個socket 對象,Socket 類有幾個構(gòu)造函數(shù)。兩個常用的構(gòu)造函數(shù)是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),兩個構(gòu)造函數(shù)都創(chuàng)建了一個基于 Socket 的連接服務(wù)器端流套接字的流套接字。兩個函數(shù)都通過參數(shù) port 獲得服務(wù)器的端口號。假設(shè)已經(jīng)建立連接了,網(wǎng)絡(luò)API 將在客戶端基于 Socket 的流套接字中捆綁客戶程序的 IP 地址和任意一個端口號,否則兩個函數(shù)都會拋出一個 IOException 對象。如果創(chuàng)建了一個 Socket對象,

22、那么它可能通過調(diào)用 Socket 的 getInputStream()方法從服務(wù)程序獲得輸入流讀傳送來的信息,也可能通過調(diào)用 Socket 的 getOutputStream()方法獲得輸出流來發(fā)送消息。在讀寫活動完成之后,客戶程序調(diào)用 close()方法關(guān)閉流和流套接字。2.2.42.2.4 JavaJava 圖形編程圖形編程Java 中的 Graphics 類是用于繪圖和顯示格式化文本的工具類。在 Java 程序中繪圖必須在一個窗口(容器)中進行,繪圖窗體經(jīng)常被設(shè)計為一個組件容器。一般首先在一個面板中進行繪制,然后再將這個面板添加到顯示窗口中去。Graphics 類是在 Java.awt

23、包中申明,顯示格式化文本和繪圖時通過調(diào)用Graphics 類的 draw()方法實現(xiàn)的,例如 drawString(String),drawLine()等。繪圖采用的坐標(biāo)系是原點在左上角,縱軸向下以像素為單位的坐標(biāo)系。92.32.3 本章小結(jié)本章小結(jié)在本章節(jié)中首先介紹了該系統(tǒng)的運行環(huán)境,值的注意的是軟件環(huán)境的配置,因為整個系統(tǒng)都是在虛擬環(huán)境下運行的,所以虛擬環(huán)境對于整個設(shè)計的調(diào)試和運行至關(guān)重要;其次對開發(fā)工具 Eclipse3.2 的簡單介紹,利用 eclipse 開發(fā)項目,是可以提高項目的開發(fā)效率。還有是對一些技術(shù)理論,J2SE 框架,Java 語言,系統(tǒng)運行所支持的操作系統(tǒng),聯(lián)機通信機制及

24、 Java 圖形編程等理論做了簡單的介紹,為本系統(tǒng)后期實現(xiàn)圖形化界面和網(wǎng)絡(luò)通信做了理論支持。第第 3 3 章章 系統(tǒng)設(shè)計系統(tǒng)設(shè)計3.13.1 系統(tǒng)功能系統(tǒng)功能設(shè)計設(shè)計3.1.13.1.1 坦克大戰(zhàn)總體功能設(shè)計坦克大戰(zhàn)總體功能設(shè)計坦克大戰(zhàn)游戲主要實現(xiàn)玩家參加游戲的整個流程,用戶登陸游戲客戶端選擇游戲模式,可分為單機模式和網(wǎng)絡(luò)對戰(zhàn)模式,選擇單機模式可以直接進入游戲狀態(tài);選擇網(wǎng)絡(luò)對戰(zhàn)模式,在啟動服務(wù)器后,玩家需要選擇自己的角色,用戶名和ID等玩家相關(guān)資料,成功后使用其賬號進行登錄游戲(只有成功登錄的玩家才能參與網(wǎng)絡(luò)對戰(zhàn)游戲功能) ;登陸玩家就可以通過控制鍵盤操作,加入對戰(zhàn)游戲。整個網(wǎng)絡(luò)版坦克大戰(zhàn)游戲

25、流程圖如圖3.1所示:10初 始 化游戲模式對 戰(zhàn)對 戰(zhàn)隨機產(chǎn)生敵方坦克玩家坦克判斷勝負(fù)玩家一玩家二玩家一玩家二敵方坦克我方坦克判斷勝負(fù)結(jié) 束選擇角色,填寫信息圖 3.1 網(wǎng)絡(luò)坦克大戰(zhàn)游戲流程3.1.23.1.2 TankClientTankClient 類基本功能分析類基本功能分析TankClient 類是整個系統(tǒng)的核心部分,它承擔(dān)整個系統(tǒng)的所有可實現(xiàn)功能的調(diào)度工作。 是整個游戲運行的場所。TankClient 類設(shè)計流程圖如圖 3.2 所示:11開始初始化坦克對戰(zhàn)雙方玩家坦克由鍵盤控制移動發(fā)射炮彈碰撞檢測(坦克和子彈)不處理同角色坦克產(chǎn)生爆炸不同角 色坦克判斷勝負(fù)結(jié)束圖 3.2 TankC

26、lient 類設(shè)計流程TankClient 類是主類,通過調(diào)用其他類中封裝的方法來使整個系統(tǒng)運行起來,下面顯示 TankClient 與各個類之間的關(guān)系如圖 3.3 所示:TankClient 類(主類)Tank 類(我方)Tank 類(敵方)New 參數(shù) 1New 參數(shù) 2調(diào)用 Missile 類打中調(diào)用 Explode 類產(chǎn)程爆炸判斷勝負(fù)鍵盤控制移動鍵盤控制移動打擊圖 3.3 游戲系統(tǒng)類關(guān)聯(lián)圖3.1.33.1.3 TankTank 類基本功能分析類基本功能分析Tank(坦克)類中,封裝了一些變量屬性,包括坦克自己的大小12(WIDTH,HRIGHT) ,運動速度(SPRRD_X:在 x 軸

27、方向的速度;SPEED_Y:在 Y 軸方向的速度)、生命值控制(life) 、坦克編號(id) 、坦克名(name)、方向控制(dir)、生死控制(live)、好壞控制(good)的變量等。Tank 類中沒有 main 函數(shù),不是主類,它當(dāng)中只封裝一些變量屬性和靜態(tài)方法,被 TankClient 類調(diào)用來實現(xiàn)坦克的一系列動作。Tank 類中的主要方法羅列如下:(1)getRect()方法public Rectangle getRect() return new Rectangle(x, y, this.WIDTH, this.HEIGHT);Rectangle 類是碰撞檢測的輔助類,通過得到子

28、彈的 x,y 坐標(biāo)和寬高度,檢測兩個矩形是否碰撞(相交) ;(2)draw()方法:負(fù)責(zé)將所有的活動在屏幕上畫出來;(3)move()方法:主要負(fù)責(zé)控制坦克的移動,包括 8 個方向(左,左上,上,右上,右,右下,下,左下)的控制以及給坦克一個移動的速度;(4)keyPressed()方法:設(shè)定使用鍵盤的“” “” “” “”鍵控制坦克移動;(5)keyReleased()方法:處理按鍵抬起事件,抬起“CTRL”鍵時,發(fā)射炮彈并加入新炮彈,能夠逐一發(fā)射每一發(fā)炮彈、抬起“A”鍵可以發(fā)射超級炮彈等功能;(6)locationDirection()方法:定義了炮筒方向,可以向八個方向發(fā)射炮彈;(7)f

29、ire()方法:處理發(fā)送子彈的方法;(8)bumpWithWall()方法:主要負(fù)責(zé)處理坦克撞墻事件;(9)bumpWithTank()方法:主要到負(fù)責(zé)處理坦克和坦克相撞事件;3.1.43.1.4 MissileMissile 類基本功能分析類基本功能分析Misslile(子彈)類和 Tank 類一樣,只封裝一些變量屬性和靜態(tài)方法,主要變量包括:子彈自己的大?。╓IDTH,HRIGHT) ,運動速度(SPRRD_X:在 x 軸方向的速度;SPEED_Y:在 Y 軸方向的速度)、子彈標(biāo)示(ID) 、所屬坦克的 id 號(TankId 用于網(wǎng)絡(luò)版)等。Misslie 類持有一個 TankClien

30、t 類(大管家)的引用tc,TankClient 類要執(zhí)行發(fā)射炮彈操作時調(diào)用 Missile 類中的方法。Misslie13類中的主要方法如下:(1) draw()方法:負(fù)責(zé)畫出子彈的所有活動;(2) move()方法:先判斷方向再移動,并給它一定的移動速度;(3) getRect()方法:負(fù)責(zé)取得子彈的外切方形,為碰撞檢測做準(zhǔn)備;(4) hitTan()方法:檢測子彈是否撞到坦克,若撞到返回 true,否則返回 false;(5) hitTanks()方法:檢測是否撞到一系列坦克中的一個;(6) hitWall()方法:檢測子彈和墻是否相撞。3.1.53.1.5 ExplodeExplode

31、 類基本功能分析類基本功能分析Explode(爆炸)類也是一個只封裝自己的變量和方法的外部包裝類,沒有main 方法,供 TankClient 主類需要時調(diào)用它的 draw()方法,當(dāng)子彈擊中坦克時需要產(chǎn)生爆炸。使用 11 張圖片重疊現(xiàn)實爆炸效果如 3.4 圖所示:圖 3.4 爆炸圖3.1.63.1.6 服務(wù)器類基本功能分析服務(wù)器類基本功能分析TankServer(服務(wù)器)類主要負(fù)責(zé)在網(wǎng)絡(luò)對戰(zhàn)游戲時維護各個在線玩家的基本信息,并動態(tài)的維護玩家列表。聯(lián)機模式下類關(guān)系圖如圖 3.5 所示:TankServer 類TankClient 1 類類TankClient 2 類類New 參數(shù) 1New 參

32、數(shù) 2調(diào)用 Missile 類調(diào)用 Explode 類產(chǎn)程爆炸判斷勝負(fù)Tank 類(我方)Tank 類(敵方)打中打擊3.5 聯(lián)機模式類關(guān)聯(lián)圖143.1.73.1.7 信息傳送類基本功能分析信息傳送類基本功能分析信息傳送類就是用來封裝客戶端和服務(wù)器端的交互信息。將網(wǎng)絡(luò)中傳遞的眾多信息封裝成可序列化的類,將會使程序有很好的可擴展性。3.23.2 本章小結(jié)本章小結(jié)本章首先對整個游戲設(shè)計進行了可行性分析,其次對游戲要達到怎么樣的需求,要實現(xiàn)哪些功能做以及實現(xiàn)這些功能設(shè)計到的類,最后再詳細的介紹了系統(tǒng)要實現(xiàn)這些功能所涉及到的各個類之間的關(guān)系。第第 4 4 章章 系統(tǒng)實現(xiàn)系統(tǒng)實現(xiàn)4.14.1 游戲主窗體

33、實現(xiàn)游戲主窗體實現(xiàn)TankClient 類負(fù)責(zé)畫出游戲主窗體,它是整個游戲運行和所有活動的場所。登陸主窗口后,主界面上包括兩個下拉菜單條, “游戲”和“幫助” ,玩家點擊“游戲”菜單條下可以選擇游戲模式;“幫助”下拉菜單條中有游戲說明和游戲操作,方便用戶了解游戲規(guī)則。為了游戲不至于太單調(diào),還配置了背景音樂。除此之外,本設(shè)計優(yōu)點是 TankClient 類還封裝了一個 update()方法,使用雙緩沖消除閃爍現(xiàn)象。因為刷新重畫頻率太快,paint()方法還沒有完成,會造成逐條顯示,影響系統(tǒng)的運行,所以解決辦法是創(chuàng)建一個虛擬屏幕,在屏幕的后面,在要畫的將所有的東西畫在虛擬屏幕上,也就是內(nèi)存上,畫完

34、之后一次性將虛擬屏幕上的內(nèi)容貼到屏幕上,這樣就消除了閃爍現(xiàn)象,用戶的眼睛便感覺不到閃爍了。TankClient 類是整個系統(tǒng)的“大管家” ,當(dāng)要執(zhí)行某動作時,“大管家”只需要調(diào)用各個類中封裝好的方法,讓被調(diào)用的類自己去執(zhí)行它自己的方法,這更體現(xiàn)了面向?qū)ο蟮乃枷?。游戲主窗體界面如圖 4.1 所示:15圖 4.1 游戲主窗口預(yù)覽效果圖實現(xiàn)虛擬屏幕消除閃爍的關(guān)鍵代碼如下:public void update(Graphics g) /利用雙緩沖消除閃爍的效果if(offScreenImage = null) offScreenImage = this.createImage(GAME_WIDTH,

35、GAME_HEIGHT);Graphics gOffScreen = offScreenImage.getGraphics();Color c = gOffScreen.getColor();gOffScreen.setColor(Color.BLACK);gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);gOffScreen.setColor(c);paint(gOffScreen);g.drawImage(offScreenImage,0,0,null);164.24.2 單機游戲的實現(xiàn)單機游戲的實現(xiàn)游戲運行主界面,在下拉菜單中選擇單機游

36、戲進入單人模式,通過鍵盤控制坦克運動,相互對戰(zhàn),當(dāng)被打中時產(chǎn)生一個爆炸,屏幕左上方顯示游戲信息:子彈數(shù)目(出界就死亡) 、爆炸數(shù)目、敵方坦克數(shù)目、玩家坦克生命值(當(dāng)玩家坦克被擊中 4 次時,游戲結(jié)束) 、玩家得分。其效果圖如圖 4.2 所示:圖 4.2 單機游戲模式主界面圖當(dāng)玩家分?jǐn)?shù)達到 60 分時可以使用超級炮彈,可同時向八個方向發(fā)射炮彈,效果如圖 4.3 所示:玩家坦克,上方紅色小方框為生命值,當(dāng)被擊中一次時生命值減 20血塊:用于添加生命值墻17圖 4.3 發(fā)射超級炮彈當(dāng)玩家被炮彈擊中達到 4 次,而又沒有及時吃到增長生命的血塊時,提示游戲結(jié)束,可以選擇重新開始或退出該模式,效果如圖 4

37、.4 所示:圖 4.4 玩家死亡時游戲界面4.34.3 聯(lián)機功能實現(xiàn)聯(lián)機功能實現(xiàn)18在本系統(tǒng)的實現(xiàn)過程中,在支持網(wǎng)絡(luò)對戰(zhàn)的服務(wù)器類的定義中需要使用ServerSocket 類來響應(yīng)多個客戶端連接請求,server 服務(wù)器上需要兩大協(xié)議,一個是 TCP,用來接收客戶端;另一個是 UDP,用來轉(zhuǎn)發(fā)游戲的數(shù)據(jù)。Server類系統(tǒng)模型圖如圖 4.5 所示:serverTCPListenerUDPListener接收客戶端連接轉(zhuǎn)發(fā)游戲數(shù)據(jù)圖 4.5 Server 類系統(tǒng)簡單模型圖網(wǎng)絡(luò)游戲模式下,游戲主要在客戶端運行,啟動客戶端時玩家首先要填寫信息之后才能加入到游戲中去,先啟動服務(wù)器,紅色小方塊表示確定服

38、務(wù)器已連接。如圖 4.6 所示:圖 4.6 啟動服務(wù)器進入網(wǎng)絡(luò)模式,輸入信息:IP、Port、選擇自己的角色【P(警)B(匪) 】 ,是玩家加入游戲的必填欄。游戲主界面圖如圖 4.7 所示:圖 4.7 網(wǎng)絡(luò)版游戲玩家信息欄填寫好玩家信息,登陸后游戲主界面,進入游戲后,通過玩家坦克上方的19ID 號(單雙數(shù))和顏色(藍紅)來區(qū)分?jǐn)秤?。游戲界面左上角顯示游戲的基本信息,包括玩家姓名,對戰(zhàn)坦克數(shù)等,如圖 4.8 所示:圖 4.8 登陸網(wǎng)絡(luò)模式主界面多個玩家加入后,開始對戰(zhàn),在此模式中沒有吃血塊,添加生命值這一功能,所以一旦中彈就死亡被淘汰出局,各個玩家游戲界面上都能顯示實時動態(tài),效果如圖 4.9 所

39、示:20圖 4.9 網(wǎng)絡(luò)版游戲?qū)?zhàn)實時顯示圖網(wǎng)絡(luò)模式設(shè)計主要代碼如下:TankServer(服務(wù)器)類代碼片段如下:public class TankServer public static final int TCP_PORT = 8888; /TCP 的監(jiān)聽端口public static final int UDP_PORT = 6666; /UDP 的監(jiān)聽端口public static int ID = 100;List clients = new ArrayList();public void strat() /啟動服務(wù)器new Thread(new UDPThread().start

40、();ServerSocket ss = null;Socket s = null;try ss = new ServerSocket(TCP_PORT); catch (IOException e) e.printStackTrace();21while(true) /鏈接 TCPtry s = ss.accept();DataInputStream dis = new DataInputStream(s.getInputStream();int udpPort = dis.readInt();String IP = s.getInetAddress().getHostAddress();C

41、lient c = new Client(IP,udpPort);DataOutputStream dos = new DataOutputStream(s.getOutputStream();dos.writeInt(ID+);clients.add(c);System.out.println(A Client Connected!Addr_+IP+:+s.getPort()+_UDPPort:+udpPort);catch(IOException e) e.printStackTrace();private class UDPThread implements Runnable /建立一個

42、 UDP 的接受和轉(zhuǎn)發(fā)線程byte buf = new byte1024;public void run() DatagramSocket ds = null;try ds = new DatagramSocket(UDP_PORT);System.out.println(UDPThread started at PORT:+UDP_PORT);while(ds != null) DatagramPacket dp = new DatagramPacket(buf,buf.length);ds.receive(dp); /接受數(shù)據(jù)包for(int i=0;iclients.size();i+)

43、 /分別轉(zhuǎn)發(fā)給其22他客戶端Client c = clients.get(i);dp.setSocketAddress(new InetSocketAddress(c.IP, c.udpPort);/得到將要轉(zhuǎn)發(fā)的客戶端的 IP 地址和端口ds.send(dp);System.out.println(A Packet Sent to PORT:+c.udpPort); catch (SocketException e) e.printStackTrace(); 4.44.4 本章小結(jié)本章小結(jié)本章主要介紹了該系統(tǒng)的實現(xiàn)和運行,分別敘述了在單機模式和網(wǎng)絡(luò)對戰(zhàn)模式下游戲的運行和調(diào)試過程。在單機模式下

44、,玩家的游戲發(fā)射火力要比電腦隨機產(chǎn)生的坦克能力稍強一些,當(dāng)分?jǐn)?shù)值達到一定時,玩家可以發(fā)射超級炮彈。網(wǎng)絡(luò)模式下,注意一定要先啟動服務(wù)器,只有啟動服務(wù)器后,各個玩家才能加入游戲。到此為止,本設(shè)計基本完成預(yù)期效果。第第 5 5 章章 總結(jié)與展望總結(jié)與展望5.15.1 總結(jié)總結(jié)本次設(shè)計已是大學(xué)最后一次對專業(yè)知識的綜合實踐活動,同時也是我所做的工作量最大的一次作業(yè),因此從一開始我對本次畢業(yè)設(shè)計就給予了高度重視。從選題、收集資料、學(xué)習(xí)相關(guān)技術(shù)到實際編程,我都一絲不茍的對待了。當(dāng)然其間我也走了不少彎路,有時甚至需要推倒重來,但同時我也多次體會過克服困難后的成就感。通過這次畢業(yè)設(shè)計以及撰寫本畢業(yè)論文,我學(xué)會了一些編程技巧,而且對調(diào)試的錯誤有進一步的認(rèn)識,有時候就一個小小的語法錯誤就會導(dǎo)致程序調(diào)試不通過。所以每個字符,每句程序都要認(rèn)真對待。使用不同的編程環(huán)境,其效23率完全不一樣,所以我選擇了 Eclipse,它自動找錯/糾錯功能、Debug 調(diào)試和代碼自動生成等一些重要的功能大大提高了我的設(shè)計效率。對于設(shè)計論文,一定要注意格式,認(rèn)識事情都有它的規(guī)則、規(guī)范,不能按個人

溫馨提示

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

評論

0/150

提交評論