




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、JAVA課程設(shè)計之坦克大戰(zhàn) 課程設(shè)計任務(wù)書攀枝花學院 學生課程設(shè)計(論文)題 目: 基于JAVA的坦克大戰(zhàn) 學 生 姓 名: 楊 興 貴 學 號: 200910801085 所在院 (系): 計算機學院 專 業(yè): 計算機科學與技術(shù) 班 級: 2009級計本(2)班 指 導 教 師: 羅 學 剛 職稱: 2011年 5 月 26 日攀枝花學院教務(wù)攀枝花學院本科學生課程設(shè)計任務(wù)書題目基于Java的坦克大戰(zhàn)1、課程設(shè)計的目的通過本課程設(shè)計使學生能夠較全面的掌握面向?qū)ο蟪绦蛟O(shè)計的有關(guān)概念和開發(fā)方法,以便能較全面地理解、掌握和綜合運用所學的知識,提高自身的編程能力。2、課程設(shè)計的內(nèi)容和要求(包括原始數(shù)據(jù)
2、、技術(shù)要求、工作要求等)利用java socket實現(xiàn)局域網(wǎng)內(nèi)的UDP信息傳輸,實現(xiàn)簡單的Java坦克大戰(zhàn)項目。3、主要參考文獻1蔡昭權(quán). 利用Socket實現(xiàn)多線程通信程序J. 2004,(06)2仲宇, 顧國昌 , 張汝波. 應用TCP/IP網(wǎng)關(guān)實現(xiàn)數(shù)據(jù)遠程傳輸J. 3 姜志強編著. Java語言程序設(shè)計 M.北京:電子工業(yè)出版社,20074 侯俊杰編著. Java語言應用開發(fā)基礎(chǔ) M.5 孫更新編著. Java畢業(yè)設(shè)計指南與項目實踐 M. 北京:科技出版社,2007.4、課程設(shè)計工作進度計劃序號時間(天)內(nèi)容安排備注11分析設(shè)計準備周一22編程調(diào)試階段周二至周三31編寫課程設(shè)計報告周四4
3、1考核周五總計5(天)指導教師(簽字)日期年 月 日教研室意見:年 月 日學生(簽字): 接受任務(wù)時間: 年 月 日注:任務(wù)書由指導教師填課程設(shè)計(論文)指導教師成績評定表題目名稱基于Java的坦克大戰(zhàn)評分項目分值得分評價內(nèi)涵工作表現(xiàn)20%01學習態(tài)度6遵守各項紀律,工作刻苦努力,具有良好的科學工作態(tài)度。02科學實踐、調(diào)研7通過實驗、試驗、查閱文獻、深入生產(chǎn)實踐等渠道獲取與課程設(shè)計有關(guān)的材料。03課題工作量7按期圓滿完成規(guī)定的任務(wù),工作量飽滿。能力水平35%04綜合運用知識的能力10能運用所學知識和技能去發(fā)現(xiàn)與解決實際問題,能正確處理實驗數(shù)據(jù),能對課題進行理論分析,得出有價值的結(jié)論。05應用文
4、獻的能力5能獨立查閱相關(guān)文獻和從事其他調(diào)研;能提出并較好地論述課題的實施方案;有收集、加工各種信息及獲取新知識的能力。06設(shè)計(實驗)能力,方案的設(shè)計能力5能正確設(shè)計實驗方案,獨立進行裝置安裝、調(diào)試、操作等實驗工作,數(shù)據(jù)正確、可靠;研究思路清晰、完整。07計算及計算機應用能力5具有較強的數(shù)據(jù)運算與處理能力;能運用計算機進行資料搜集、加工、處理和輔助設(shè)計等。08對計算或?qū)嶒灲Y(jié)果的分析能力(綜合分析能力、技術(shù)經(jīng)濟分析能力)10具有較強的數(shù)據(jù)收集、分析、處理、綜合的能力。成果質(zhì)量45%09插圖(或圖紙)質(zhì)量、篇幅、設(shè)計(論文)規(guī)范化程度5符合本專業(yè)相關(guān)規(guī)范或規(guī)定要求;規(guī)范化符合本文件第五條要求。10
5、設(shè)計說明書(論文)質(zhì)量30綜述簡練完整,有見解;立論正確,論述充分,結(jié)論嚴謹合理;實驗正確,分析處理科學。11創(chuàng)新10對前人工作有改進或突破,或有獨特見解。成績指導教師評語指導教師簽名: 年月日摘 要系統(tǒng)擁有可視化的登錄界面,配有游戲幫助文檔,程序的編寫涵蓋J2SE基礎(chǔ)知識,包括典型的封裝、繼承、多態(tài)的實現(xiàn),同時結(jié)合了socket網(wǎng)絡(luò)編程、GUI圖形用戶界面的相關(guān)知識。項目集成了單機個人、網(wǎng)絡(luò)對戰(zhàn)兩個版本。單機版實現(xiàn)精彩的人機對戰(zhàn),電腦間隔性產(chǎn)生敵方坦克,玩家通過血塊持續(xù)攻擊。游戲進行了后門設(shè)計,玩家可以輕松穿越墻體攻擊敵方坦克。網(wǎng)絡(luò)版游戲中作為服務(wù)器的主機需提前啟動坦克服務(wù)器,服務(wù)器主線程將
6、接收的客戶端的數(shù)據(jù)包轉(zhuǎn)發(fā)到其他客戶端,實現(xiàn)客戶端游戲界面的實時更新。開始游戲后,主線程調(diào)用窗體對象的Paint方法進行繪圖,畫面采用雙緩沖技術(shù)進行刷新。坦克將在游戲開始時進行初始化,并隨屏幕刷新的頻率而移動。關(guān)鍵字 坦克大戰(zhàn),C/S網(wǎng)絡(luò)體系,JAVA,Socket編程,GUIJAVA課程設(shè)計之坦克大戰(zhàn) 目 錄目 錄摘 要1 可行性研究11.1 可行性分析11.1.1 系統(tǒng)可行性11.1.2 技術(shù)可行性11.1.3 經(jīng)濟可行性11.1.4 操作可行性11.2 網(wǎng)絡(luò)游戲的發(fā)展11.3 系統(tǒng)的現(xiàn)實意義11.4 系統(tǒng)特點11.5 Java、C語言、C+主流技術(shù)比較11.6 本章小結(jié)12 系統(tǒng)需求分析1
7、2.1 系統(tǒng)運行環(huán)境12.1.1 系統(tǒng)運行的軟件環(huán)境12.1.2 系統(tǒng)運行的硬件環(huán)境12.2 相關(guān)理論12.2.1 關(guān)于Eclipse的介紹12.2.2 J2SE框架12.3 系統(tǒng)功能需求12.3.1 主界面人性化功能12.3.2 人機對戰(zhàn)模式功能12.3.3 網(wǎng)絡(luò)對戰(zhàn)模式功能12.3.4 聯(lián)機通信機制12.3.5 Java圖形編程12.4 本章小結(jié)13 系統(tǒng)概要設(shè)計13.1系統(tǒng)功能設(shè)計13.1.1 坦克大戰(zhàn)總體功能設(shè)計13.1.2 TankClient類基本功能分析13.1.3 Tank類基本功能分析13.1.4 Missile類基本功能分析13.1.5 Explode類基本功能分析13.1
8、.6 服務(wù)器類基本功能分析13.1.7 信息傳送類基本功能分析13.2 本章小結(jié)14 系統(tǒng)詳細設(shè)計14.1 游戲主窗體實現(xiàn)14.2 單機游戲的實現(xiàn)14.3 聯(lián)機功能實現(xiàn)14.4 網(wǎng)絡(luò)模式主要代碼14.5 本章小結(jié)15 結(jié)論15.1 課程設(shè)計總結(jié)15.2 本程序需解決的有關(guān)技術(shù)問題15.3 展望1參 考 文 獻1JAVA課程設(shè)計之坦克大戰(zhàn) 可行性研究1 可行性研究1.1 可行性分析1.1.1 系統(tǒng)可行性人類進入21世紀,全球一體化,互聯(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ò)游
9、戲已經(jīng)深入到人們的日常生活中,成為老少皆宜的娛樂方式。1.1.2 技術(shù)可行性Java語言自Sun公司于1995年5月正式發(fā)布以來,經(jīng)歷了出生、成長、成熟壯大的幾個階段,逐漸發(fā)展成為IT領(lǐng)域里的主流計算模式,使用Java開發(fā)工具方便,容易實現(xiàn)。Java對開發(fā)網(wǎng)絡(luò)產(chǎn)品有它自己獨特的優(yōu)勢,網(wǎng)絡(luò)游戲也是其開發(fā)產(chǎn)物之一。本系統(tǒng)開發(fā)過程是利用Java編程語言和eclipse集成開發(fā)環(huán)境配合使用來實現(xiàn)的,它是基于TCP/UDP協(xié)議和Socket編程技術(shù),建立以C/S為結(jié)構(gòu)模式的娛樂性游戲平臺。1.1.3 經(jīng)濟可行性本設(shè)計的開發(fā)是基于JDK5.0和eclipse3.2的,因為它們都是免費而且開源的軟件,所以實
10、現(xiàn)本設(shè)計的成本就有所降低。隨著計算機、網(wǎng)絡(luò)通訊和信息技術(shù)的迅猛發(fā)展以及人類精神生活品質(zhì)的提高,國際、國內(nèi)的各種各樣的大型綜合游戲網(wǎng)站如雨后春筍般的發(fā)展起來。一款好的游戲帶來的經(jīng)濟效益可以說是不可估量的,比如現(xiàn)在網(wǎng)上最流行的魔獸世界、征途等大型網(wǎng)絡(luò)版游戲。本游戲既可單機運行,也可以是聯(lián)機版多人同時在線對戰(zhàn)。1.1.4 操作可行性本設(shè)計是一個網(wǎng)絡(luò)版的游戲平臺,只是模擬了現(xiàn)在社會上的一些網(wǎng)絡(luò)游戲的部分功能,所以操作簡易,玩家不需要了解內(nèi)部流程,只是和一般其他的網(wǎng)絡(luò)游戲一樣的操作即可開始游戲。相對于開發(fā)者而言,整個系統(tǒng)形成主要由JDK5.0虛擬環(huán)境和eclipse3.2共同完成,無需更多復雜的工具和服
11、務(wù)器支持。1.2 網(wǎng)絡(luò)游戲的發(fā)展在今天,借助于數(shù)字、電子、網(wǎng)絡(luò)、創(chuàng)意、編劇、美工、音樂等等“先進”的道具,網(wǎng)絡(luò)游戲?qū)τ谌藗儸F(xiàn)實生活的虛擬達到了一個全新的境界,并且則在這新的境界上還原了游戲的本源-人與人的互動。網(wǎng)絡(luò)游戲滿足了現(xiàn)代社會必須的溝通需求,無疑它應該是適合所有人的。在軍事模擬對抗演習中,大型游戲機既可以模擬作戰(zhàn)現(xiàn)場的地形、軍力部署、天氣等情況,還可以進行多兵種戰(zhàn)術(shù)技能對抗訓練;在國防訓練方面,大型游戲機可以模擬坦克操縱、導彈發(fā)射、飛機駕駛、艦艇巡航等多種訓練任務(wù);在醫(yī)療培訓方面,大型游戲機擁有的全息三維立體投影技術(shù),可以逼真地展示人體的各部分構(gòu)造和器官等。1.3 系統(tǒng)的現(xiàn)實意義游戲本身
12、是一種娛樂方式,能帶給人們無盡的樂趣,而且游戲行業(yè)的發(fā)展還將會帶動眾多周邊產(chǎn)業(yè),如五金、塑料、機械、電子、 顯像管,高端機型甚至使用了40英寸以上的大屏幕背投、液晶顯示器等,這些顯像設(shè)備不但要依賴國內(nèi)眾多顯像管生產(chǎn)企業(yè)提供支持,更要針對游戲的內(nèi)容進行深入開發(fā)和優(yōu)化,以適應游戲內(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.4 系統(tǒng)特點本系統(tǒng)的坦
13、克大戰(zhàn)是基于Java語言設(shè)計開發(fā)的,具有高超的人工智能,精美的圖形處理,支持單機運行和網(wǎng)絡(luò)對戰(zhàn)的坦克射擊游戲。比之前網(wǎng)絡(luò)上實現(xiàn)的游戲更加方便,快捷,智能。游戲基本玩法較簡單,游戲可一人電腦作戰(zhàn),每次電腦方有坦克10輛,游戲以消滅全部敵方坦克過關(guān)為目的。在這過程中,坦克有機會得到血塊來添加生命值,從而變得更加強大,也能利用各種有利地形來阻擊敵人。游戲進行了后門程序設(shè)計可以輕松穿越墻體攻擊敵方坦克。還有給玩家坦克設(shè)置超級炮彈,當電腦方坦克數(shù)量過多時,玩家坦克可以發(fā)射超級炮彈打擊敵方。主要新增的功能簡單羅列如下:(1)屏幕左上方顯示游戲狀態(tài),當玩家方坦克數(shù)全為零時則游戲結(jié)束;(2)一般坦克只可在空地
14、中或草叢中行走,不可通過墻面等障礙物;(3)游戲中打壞敵方坦克后,可能會在隨機位置隨機出現(xiàn)血塊獎勵,坦克經(jīng)過該位置可獲得相應加生命值獎勵;(4)玩家坦克的游戲資格和電腦坦克不同。1.5 Java、C語言、C+主流技術(shù)比較Java 語言是一種跨平臺,適合于分布式計算環(huán)境的面向?qū)ο缶幊陶Z言。JAVA現(xiàn)在主要用在WEB開發(fā),手機游戲及一些平臺游戲的開發(fā),因為它具有很好的跨平臺性,在手機等各種電子產(chǎn)品上應用非常廣泛。C語言是一種面向過程編程,這就使得Java具有重用的特性,在開發(fā)速度上比C語言更快,但是在運行速度上卻是C更快,因為C屬于底層語言,它比JAVA更加親近機器,所以在許多系統(tǒng)開發(fā)上一般是用C
15、語言。 C+多用于游戲引擎、反病毒、硬件驅(qū)動以及一些對運行效率要求比較高的應用程序,比如數(shù)據(jù)庫管理系統(tǒng)。 C+語言在提供強大的功能的同時也提高了程序含BUG的可能性。 C+為了照顧大量的C語言使用者,而兼容了C,使得自身僅僅成為了帶類的C語言,多多少少影響了其面向?qū)ο蟮膹氐仔浴?.6 本章小結(jié)本章主要介紹了網(wǎng)絡(luò)游戲在國內(nèi)外發(fā)展的現(xiàn)狀,現(xiàn)如今,網(wǎng)絡(luò)游戲市場的重新定位是最迫切需要解決的問題。本系統(tǒng)主要的現(xiàn)實意義,與其他游戲的區(qū)別和完善的一些功能。本文用Java語言、C語言、C+三種主流編程技術(shù)比較,闡述了使用Java語言編程的原因。32JAVA課程設(shè)計之坦克大戰(zhàn) 系統(tǒng)需求分析2 系統(tǒng)需求分析2.1
16、 系統(tǒng)運行環(huán)境2.1.1 系統(tǒng)運行的軟件環(huán)境(1)網(wǎng)絡(luò)服務(wù)器操作系統(tǒng):Windows XP或以上系統(tǒng);(2)開發(fā)工具:eclipse3.2或以上;(3)運行環(huán)境:J2SDK 1.6以上;(4)編程語言:Java語言;2.1.2 系統(tǒng)運行的硬件環(huán)境(1)CPU:Intel或者兼容微處理器,奔騰166MHz及其以上;(2)內(nèi)存:最低32MB,可以運行圖形界面的Java Application;最低48MB,可以運行Java Applet;內(nèi)存不足,將會導致系統(tǒng)(尤其是服務(wù)器)的性能大幅下降;(3)硬盤:242 MB到80 GB及其以上;(4)圖形顯示卡:無要求;(5)網(wǎng)卡:普通網(wǎng)卡,3Com Of
17、ficeConnect 10/100兆位網(wǎng)卡;2.2 相關(guān)理論2.2.1 關(guān)于Eclipse的介紹Eclipse是一個主要針對Java項目開發(fā)所設(shè)計的(綜合性集成開發(fā)環(huán)境-Integrated Development Emironment,IDE),最早是由Object Technologics International這家公司開發(fā),該公司于1996年被IBM并購后,將Eclipse改為Open Source software。它最大的特點是:采用了插件的結(jié)構(gòu),通過下載安裝不同的插件,就可以實現(xiàn)不同類型的程序開發(fā)。利用eclipse開發(fā)項目,是可以提高項目的開發(fā)效率,因為它不但可以像傳統(tǒng)的一
18、些編輯器一樣編寫代碼,而且還有自動找錯/糾錯功能、Debug調(diào)試和代碼自動生成等一些重要的功能,這使項目開發(fā)的效率得到了提升。Eclipse可以作為其他開發(fā)工具的平臺。工作區(qū)被存儲在磁盤上,并且對其他人是可見的。Eclipse3.2的大多數(shù)新特性都是Eclipse用戶需求的直接結(jié)果。2.2.2 J2SE框架Java主要分三大類:第一是服務(wù)器端,這里就有了J2EE企業(yè)版;第二是桌面PC,這一類用的是J2SE標準版;第三就是掌上電腦、移動設(shè)備,用的都是J2ME。但是,大部分非企業(yè)級軟件還是在J2SE上開發(fā)的比較多。首先,這是因為很多的應用軟件都是在J2SE上開發(fā)的;其次,J2SE是和J2EE兼容的
19、,企業(yè)版是在標準版上的擴充,在J2SE的版本上開發(fā)的軟件,拿到企業(yè)的平臺上是一樣可以運行的;再次,一般開發(fā)還是在J2SE的環(huán)境上,只是說J2ME提供微型版的一個環(huán)境。在J2SE上虛擬出一個環(huán)境,開發(fā)出來的應用軟件是可以拿到微型版上運行的??缙脚_:J2SE是一個具有綜合性能的平臺,能使一個完整的、可縮放的高性能應用配置在任何種類的平臺上。J2SE特點:支持Web服務(wù): J2SE對SSL、LDAP等業(yè)界標準技術(shù)也給予支持,因此保證了在不同平臺、系統(tǒng)和環(huán)境間的互操作能力。J2SE支持XML技術(shù)和一整套安全服務(wù),因此為基于各類標準的可互操作應用與服務(wù)的創(chuàng)建奠定了重要基礎(chǔ)。有了J2SE與Java Web
20、 Services Developer Pack的結(jié)合,開發(fā)商就能創(chuàng)建、測試和配置Web服務(wù)了。完整性:J2SE還是一個完整的開發(fā)環(huán)境。開發(fā)商可基于這一環(huán)境創(chuàng)建功能豐富的交互式應用。這些應用可以配置在任何平臺上。J2SE具有新的GUI控制功能、快速的Java 2DT圖形功能、支持國際化與本地化擴展和新的配置選項,并對Windows XP提供擴展支持??傊?,J2SE是多種不同風格軟件的開發(fā)基礎(chǔ),包括客戶端Java小程序和應用程序,以及獨立的服務(wù)器應用程序等。J2SE版還是J2ME的基礎(chǔ),是J2EE執(zhí)行程序的推動力。2.3 系統(tǒng)功能需求2.3.1 主界面人性化功能(1)具有游戲歡迎界面(2)游戲幫
21、助文檔(3)實現(xiàn)游戲單機/網(wǎng)絡(luò)的便捷選擇(4)具有服務(wù)器設(shè)置選項2.3.2 人機對戰(zhàn)模式功能(1)能夠發(fā)射子彈打擊敵人(2)敵人能夠移動(3)能夠模擬爆炸(4)能夠產(chǎn)生障礙(5)能夠增長生命(6)能夠使用超級子彈2.3.3 網(wǎng)絡(luò)對戰(zhàn)模式功能(1)添加網(wǎng)絡(luò)功能(2)能夠自主分組并選擇角色(3)能夠?qū)崿F(xiàn)本機服務(wù)器設(shè)置2.3.4 聯(lián)機通信機制網(wǎng)絡(luò)編程,簡單地理解就是兩臺計算機相互通信。其基本模型就是C/S模型,也就是通信雙方中的一方必須提供一個固定的位置,而另一方只需要知道這個固定的位置,并且建立兩者之間的聯(lián)系,然后完成數(shù)據(jù)交換。這里提供固定位置的一方通常稱為服務(wù)器,而建立聯(lián)系的一方稱為客戶端。So
22、cket(中文意思為插座),基于客戶機/服務(wù)器的Soctet通信模式如圖2.1所示:創(chuàng)建Socket類的對象指定服務(wù)器端公認的Socket地址和端口在Socket上監(jiān)聽客戶端的鏈接請求接收客戶端的請求信息解釋并處理請求信息向服務(wù)器發(fā)出請求向服務(wù)器端發(fā)送鏈接請求創(chuàng)建Socket類對象客戶端將處理結(jié)果返回給客戶端接收服務(wù)結(jié)果服務(wù)請求服務(wù)響應服務(wù)器端圖2.1 基于客戶機/服務(wù)器的Soctet通信模式圖當客戶程序需要與服務(wù)器程序通訊的時候,客戶程序在客戶機創(chuàng)建一個Socket對象,Socket類有幾個構(gòu)造函數(shù)。兩個常用的構(gòu)造函數(shù)是 Socket(InetAddress addr, int port)
23、和 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對象,那么它可能通過調(diào)用Socket的 getInputStream()方法從服務(wù)程序獲得輸入流讀傳送來的信息,也可能通過調(diào)用Socket的 getOutputStream()方法獲得輸出流來發(fā)送消息。在讀寫活動完成之后,客戶程序
24、調(diào)用close()方法關(guān)閉流和流套接字。2.3.5 Java圖形編程Java中的Graphics類是用于繪圖和顯示格式化文本的工具類。在Java程序中繪圖必須在一個窗口(容器)中進行,繪圖窗體經(jīng)常被設(shè)計為一個組件容器。一般首先在一個面板中進行繪制,然后再將這個面板添加到顯示窗口中去。Graphics類是在Java.awt包中申明,顯示格式化文本和繪圖時通過調(diào)用Graphics類的draw()方法實現(xiàn)的,例如drawString(String),drawLine()等。繪圖采用的坐標系是原點在左上角,縱軸向下以像素為單位的坐標系。2.4 本章小結(jié)在本章節(jié)中首先介紹了該系統(tǒng)的運行環(huán)境,值的注意的是
25、軟件環(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)機通信機制及Java圖形編程等理論做了簡單的介紹,為本系統(tǒng)后期實現(xiàn)圖形化界面和網(wǎng)絡(luò)通信做了理論支持。JAVA課程設(shè)計之坦克大戰(zhàn) 系統(tǒng)概要設(shè)計3 系統(tǒng)概要設(shè)計3.1系統(tǒng)功能設(shè)計3.1.1 坦克大戰(zhàn)總體功能設(shè)計初 始 化游戲模式對 戰(zhàn)對 戰(zhàn)隨機產(chǎn)生敵方坦克玩家坦克判斷勝負玩家一玩家二玩家一玩家二敵方坦克我方坦克判斷勝負結(jié) 束選
26、擇角色,填寫信息坦克大戰(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)游戲流程圖如圖3.1所示:圖3.1 網(wǎng)絡(luò)坦克大戰(zhàn)游戲流程3.1.2 TankClient類基本功能分析TankClient類是整個系統(tǒng)的核心部分,它承擔整個系統(tǒng)的所有可實現(xiàn)功能的調(diào)度工作。 是整個游戲運行的場所。Tan
27、kClient類設(shè)計流程圖如圖3.2所示:開始初始化坦克對戰(zhàn)雙方玩家坦克由鍵盤控制移動發(fā)射炮彈碰撞檢測(坦克和子彈)不處理同角色坦克產(chǎn)生爆炸不同角 色坦克判斷勝負結(jié)束圖3.2 TankClient類設(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)程爆炸判斷勝負鍵盤控制移動鍵盤控制移動打擊圖3.3 游戲系統(tǒng)類關(guān)聯(lián)圖3.1.3 Tank類基本功能分析Tank(坦克)
28、類中,封裝了一些變量屬性,包括坦克自己的大小(WIDTH,HRIGHT),運動速度(SPRRD_X:在x軸方向的速度;SPEED_Y:在Y軸方向的速度)、生命值控制(life)、坦克編號(id)、坦克名(name)、方向控制(dir)、生死控制(live)、好壞控制(good)的變量等。Tank類中沒有main函數(shù),不是主類,它當中只封裝一些變量屬性和靜態(tài)方法,被TankClient類調(diào)用來實現(xiàn)坦克的一系列動作。Tank類中的主要方法羅列如下:(1)getRect()方法public Rectangle getRect() return new Rectangle(x, y, this.WID
29、TH, this.HEIGHT);Rectangle類是碰撞檢測的輔助類,通過得到子彈的x,y坐標和寬高度,檢測兩個矩形是否碰撞(相交);(2)draw()方法:負責將所有的活動在屏幕上畫出來;(3)move()方法:主要負責控制坦克的移動,包括8個方向(左,左上,上,右上,右,右下,下,左下)的控制以及給坦克一個移動的速度;(4)keyPressed()方法:設(shè)定使用鍵盤的“”“”“”“”鍵控制坦克移動;(5)keyReleased()方法:處理按鍵抬起事件,抬起“CTRL”鍵時,發(fā)射炮彈并加入新炮彈,能夠逐一發(fā)射每一發(fā)炮彈、抬起“A”鍵可以發(fā)射超級炮彈等功能;(6)locationDire
30、ction()方法:定義了炮筒方向,可以向八個方向發(fā)射炮彈;(7)fire()方法:處理發(fā)送子彈的方法;(8)bumpWithWall()方法:主要負責處理坦克撞墻事件;(9)bumpWithTank()方法:主要到負責處理坦克和坦克相撞事件;3.1.4 Missile類基本功能分析Misslile(子彈)類和Tank類一樣,只封裝一些變量屬性和靜態(tài)方法,主要變量包括:子彈自己的大?。╓IDTH,HRIGHT),運動速度(SPRRD_X:在x軸方向的速度;SPEED_Y:在Y軸方向的速度)、子彈標示(ID)、所屬坦克的id號(TankId用于網(wǎng)絡(luò)版)等。Misslie類持有一個TankClie
31、nt類(大管家)的引用tc,TankClient類要執(zhí)行發(fā)射炮彈操作時調(diào)用Missile類中的方法。Misslie類中的主要方法如下:draw()方法:負責畫出子彈的所有活動;move()方法:先判斷方向再移動,并給它一定的移動速度;getRect()方法:負責取得子彈的外切方形,為碰撞檢測做準備;hitTan()方法:檢測子彈是否撞到坦克,若撞到返回true,否則返回false;hitTanks()方法:檢測是否撞到一系列坦克中的一個;hitWall()方法:檢測子彈和墻是否相撞。3.1.5 Explode類基本功能分析Explode(爆炸)類也是一個只封裝自己的變量和方法的外部包裝類,沒有
32、main方法,供TankClient主類需要時調(diào)用它的draw()方法,當子彈擊中坦克時需要產(chǎn)生爆炸。使用11張圖片重疊現(xiàn)實爆炸效果如3.4圖所示:圖3.4 爆炸圖3.1.6 服務(wù)器類基本功能分析TankServer類TankClient 1類類TankClient 2類類New參數(shù)1New參數(shù)2調(diào)用Missile類調(diào)用Explode類產(chǎn)程爆炸判斷勝負Tank類(我方)Tank類(敵方)打中打擊TankServer(服務(wù)器)類主要負責在網(wǎng)絡(luò)對戰(zhàn)游戲時維護各個在線玩家的基本信息,并動態(tài)的維護玩家列表。聯(lián)機模式下類關(guān)系圖如圖3.5所示:3.5 聯(lián)機模式類關(guān)聯(lián)圖3.1.7 信息傳送類基本功能分析信息
33、傳送類就是用來封裝客戶端和服務(wù)器端的交互信息。將網(wǎng)絡(luò)中傳遞的眾多信息封裝成可序列化的類,將會使程序有很好的可擴展性。3.2 本章小結(jié)本章首先對整個游戲設(shè)計進行了可行性分析,其次對游戲要達到怎么樣的需求,要實現(xiàn)哪些功能做以及實現(xiàn)這些功能設(shè)計到的類,最后再詳細的介紹了系統(tǒng)要實現(xiàn)這些功能所涉及到的各個類之間的關(guān)系JAVA課程設(shè)計之坦克大戰(zhàn) 系統(tǒng)詳細設(shè)計4 系統(tǒng)詳細設(shè)計4.1 游戲主窗體實現(xiàn)TankClient類負責畫出游戲主窗體,它是整個游戲運行和所有活動的場所。登陸主窗口后,主界面上包括單機個人、網(wǎng)絡(luò)對戰(zhàn)、小小幫助、啟動服務(wù)器選項 ,根據(jù)用戶意愿選擇游戲類型,“幫助”下拉菜單條中有游戲說明和游戲操
34、作,方便用戶了解游戲規(guī)則。除此之外,本設(shè)計優(yōu)點是TankClient類還封裝了一個update()方法,使用雙緩沖消除閃爍現(xiàn)象。因為刷新重畫頻率太快,paint()方法還沒有完成,會造成逐條顯示,影響系統(tǒng)的運行,所以解決辦法是創(chuàng)建一個虛擬屏幕,在屏幕的后面,在要畫的將所有的東西畫在虛擬屏幕上,也就是內(nèi)存上,畫完之后一次性將虛擬屏幕上的內(nèi)容貼到屏幕上,這樣就消除了閃爍現(xiàn)象,用戶的眼睛便感覺不到閃爍了。 TankClient類是整個系統(tǒng)的“大管家”,當要執(zhí)行某動作時,“大管家”只需要調(diào)用各個類中封裝好的方法,讓被調(diào)用的類自己去執(zhí)行它自己的方法,這更體現(xiàn)了面向?qū)ο蟮乃枷?。游戲主窗體界面如圖4.1所示
35、:圖4.1 游戲主窗口預覽效果圖游戲幫助文檔設(shè)計:圖4.2 游戲幫助文檔4.2 單機游戲的實現(xiàn)游戲運行主界面,在下拉菜單中選擇單機游戲進入單人模式,通過鍵盤控制坦克運動,相互對戰(zhàn),當被打中時產(chǎn)生一個爆炸,屏幕左上方顯示游戲信息:子彈數(shù)目(出界就死亡)、爆炸數(shù)目、敵方坦克數(shù)目、玩家坦克生命值。其效果圖如圖4.2所示:玩家坦克,上方紅色小方框為生命值,當被擊中一次時生命值減20墻血塊:用于添加生命值圖4.3 單機游戲模式主界面圖實現(xiàn)虛擬屏幕消除閃爍的關(guān)鍵代碼如下:public void update(Graphics g) /利用雙緩沖消除閃爍的效果if(offScreenImage = null
36、) offScreenImage = this.createImage(GAME_WIDTH, 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,
37、null);坦克圖片技術(shù):private static Toolkit tk = Toolkit.getDefaultToolkit();private static Image tankImages = null;private static Map<String, Image> imgs = new HashMap<String, Image>();/定義HashMap,又來盛裝坦克的游戲用圖,8個方向static tankImages = new Image tk.getImage(Tank.class.getClassLoader().getResource(&
38、quot;images/tankL.gif"),/指定坦克游戲用圖的文件目錄tk.getImage(Tank.class.getClassLoader().getResource("images/tankLU.gif"),/本項目中坦克圖片存放于項目文件之下的images包中tk.getImage(Tank.class.getClassLoader().getResource("images/tankU.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/
39、tankRU.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankR.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankRD.gif"),tk.getImage(Tank.class.getClassLoader().getResource("images/tankD.gif"),tk.getImage(Tank.class.getClassLoad
40、er().getResource("images/tankLD.gif");imgs.put("L", tankImages0);imgs.put("LU", tankImages1);imgs.put("U", tankImages2);imgs.put("RU", tankImages3);imgs.put("R", tankImages4);imgs.put("RD", tankImages5);imgs.put("D", tan
41、kImages6);imgs.put("LD", tankImages7);玩家可以使用超級炮彈,可同時向八個方向發(fā)射炮彈,效果如圖4.3所示:超級子彈,A控制,8個方向圖4.4 發(fā)射超級炮彈坦克圖片調(diào)用:switch(ptDir) /游戲進行時,根據(jù)方向調(diào)用相應的坦克圖片case L:g.drawImage(imgs.get("L"), x, y, null);break;case LU:g.drawImage(imgs.get("LU"), x, y, null);break;case U:g.drawImage(imgs.get
42、("U"), x, y, null);break;case RU:g.drawImage(imgs.get("RU"), x, y, null);break;case R:g.drawImage(imgs.get("R"), x, y, null);break;case RD:g.drawImage(imgs.get("RD"), x, y, null);break;case D:g.drawImage(imgs.get("D"), x, y, null);break;case LD:g.dra
43、wImage(imgs.get("LD"), x, y, null);break;move();4.3 聯(lián)機功能實現(xiàn)在本系統(tǒng)的實現(xiàn)過程中,在支持網(wǎng)絡(luò)對戰(zhàn)的服務(wù)器類的定義中需要使用ServerSocket類來響應多個客戶端連接請求,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ò)游戲模式下,游戲主要在客戶端運行,啟動客戶端時玩家首先要填寫信息之后才能加入到游戲中去
44、,先啟動服務(wù)器,紅色小方塊表示確定服務(wù)器已連接。如圖4.6所示:圖4.6 服務(wù)器主機想啟動服務(wù)圖4.7 服務(wù)器啟動成功進入網(wǎng)絡(luò)模式,輸入信息:IP、Port,若是客戶端玩家,需要填入主機IP,和Port;主機服務(wù)器只需填寫UDP Port。游戲主界面圖如圖4.7所示:圖4.8 網(wǎng)絡(luò)版游戲玩家信息欄圖4.9 多個玩家連入填寫好玩家信息,登陸后游戲主界面,進入游戲后,通過玩家坦克上方的ID號(單雙數(shù))和顏色(藍紅)來區(qū)分敵友。游戲界面左上角顯示游戲的基本信息,戰(zhàn)坦克數(shù)等,如圖4.8所示:圖4.10 登陸網(wǎng)絡(luò)模式主界面圖中模擬多個客戶端進行游戲時各客戶端的實時運行情況,如圖4.9所示:圖4.11 網(wǎng)
45、絡(luò)版游戲?qū)?zhàn)實時顯示圖由于由一臺電腦模擬多個客戶端,所以只能操作當前窗口新建的坦克!網(wǎng)絡(luò)版運行時,若是實驗室電腦,會出現(xiàn)下面情況:由于部分電腦的端口已經(jīng)被使用,所用可用地址會很少,造成程序不能編譯運行,如圖:圖4.12 端口地址資源過少4.4 網(wǎng)絡(luò)模式主要代碼網(wǎng)絡(luò)模式設(shè)計主要代碼如下:TankServer(服務(wù)器)類代碼片段如下:import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .DatagramPacket;import .DatagramSocke
46、t;import .InetSocketAddress;import .ServerSocket;import .Socket;import .SocketException;import java.util.ArrayList;import java.util.List;/* * 坦克游戲的服務(wù)器 * author mashibing * */public class TankServer private static int ID = 100;/* * TCP的監(jiān)聽端口 */public static final int TCP_PORT = 8888; /TCP的監(jiān)聽端口/* * UDP
47、的監(jiān)聽端口 */public static final int UDP_PORT = 6666; /UDP的監(jiān)聽端口List<Client> clients = new ArrayList<Client>();/* * 啟動服務(wù)器 * */public void start() new Thread(new UDPThread().start();ServerSocket ss = null;try ss = new ServerSocket(TCP_PORT); catch (IOException e) e.printStackTrace();while (true
48、) /鏈接TCPSocket s = null;try s = ss.accept();DataInputStream dis= new DataInputStream(s.getInputStream();String IP = s.getInetAddress().getHostAddress();int udpPort = dis.readInt();Client c = new Client(IP, udpPort);clients.add(c);DataOutputStream dos=new DataOutputStream(s.getOutputStream();dos.writ
49、eInt(ID+);/ s.close();System.out.println("A Client Connect! Addr- "+ s.getInetAddress() + ":" + s.getPort()+ "-UDP Port:" + udpPort); catch (IOException e) e.printStackTrace(); finally if (s != null) try s.close();s = null; catch (IOException e) e.printStackTrace();publ
50、ic static void main(String args) new TankServer().start();private class Client String IP;int udpPort;public Client(String IP, int udpPort) this.IP = IP;this.udpPort = udpPort;private class UDPThread implements Runnable /建立一個UDP的接受和轉(zhuǎn)發(fā)線程byte buf = new byte1024;public void run() DatagramSocket ds = nul
51、l;try ds = new DatagramSocket(UDP_PORT); catch (SocketException e) e.printStackTrace();System.out.println("UDP thread started at port :" + UDP_PORT);while (ds != null) DatagramPacket dp = new DatagramPacket(buf, buf.length);try ds.receive(dp); /接受數(shù)據(jù)包for (int i = 0; i < clients.size(); i
52、+) /分別轉(zhuǎn)發(fā)給其他客戶端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 received!"); catch (IOException e) e.printStackTrace();4.5 本章小結(jié)本章主要介紹了該系統(tǒng)的實現(xiàn)和運行,分別敘述了在單機模式和網(wǎng)絡(luò)對戰(zhàn)模式下游戲的運行和調(diào)試過程。在單機模式下,玩家的游戲發(fā)射火力要比電腦隨機產(chǎn)生的坦克能力稍強一些,當分數(shù)值達到一定時,玩家可以發(fā)射超級炮彈。網(wǎng)絡(luò)模式下,注意一定要先啟動服務(wù)器,只有啟動服務(wù)器后,各個玩家才能加入游戲。到此為止,本設(shè)計基本完成預期效果。JAVA課程設(shè)計之坦克大戰(zhàn) 結(jié) 論5 結(jié)論5.1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 管理學崗位設(shè)置
- 法醫(yī)臨床檢驗規(guī)范
- 電商退換貨快遞服務(wù)協(xié)議
- 鐘表店翻新拆舊協(xié)議
- 物聯(lián)網(wǎng)在智能交通管理中的創(chuàng)新方案
- 家政安保居間服務(wù)協(xié)議
- 股東向公司借款合同范本
- 2024浙江信息工程學校工作人員招聘考試及答案
- 2024湖南三一工業(yè)職業(yè)技術(shù)學院工作人員招聘考試及答案
- 鋼材采購合同協(xié)議
- DB42-T 2275-2024 消防給水設(shè)施物聯(lián)網(wǎng)系統(tǒng)技術(shù)標準
- 七律長征讀書分享 課件
- 2024年新物業(yè)管理技能及理論知識考試題與答案
- 《工程經(jīng)濟學》題集
- 《直播運營實務(wù)》 課件 5.3直播間場景搭建
- 2024汽車行業(yè)社媒營銷趨勢【微播易CAA中國廣告協(xié)會】-2024-數(shù)字化
- NB/T 11440-2023生產(chǎn)煤礦儲量估算規(guī)范
- 華為產(chǎn)品戰(zhàn)略規(guī)劃全景訓戰(zhàn)兩份資料
- 二手車交易定金合同范本5篇
- 2024年福建省中考化學試卷附答案
- 經(jīng)營異常授權(quán)委托書范本
評論
0/150
提交評論