炸彈人游戲的設計與實現(xiàn)-畢業(yè)論文_第1頁
炸彈人游戲的設計與實現(xiàn)-畢業(yè)論文_第2頁
炸彈人游戲的設計與實現(xiàn)-畢業(yè)論文_第3頁
炸彈人游戲的設計與實現(xiàn)-畢業(yè)論文_第4頁
炸彈人游戲的設計與實現(xiàn)-畢業(yè)論文_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

畢業(yè)設計(論文)-I-畢業(yè)設計炸彈人游戲的設計和實現(xiàn)學生: 指導教師:專業(yè):計算機科學與技術所在單位:計算機科學與工程學院答辯日期:摘要J2SE稱為Java標準版或Java標準平臺。J2SE提供了標準的SDK開發(fā)平臺。利用該平臺可以開發(fā)Java桌面應用程序和低端的服務器應用程序,也可以開發(fā)JavaApplet程序。它實際上是一系列規(guī)范的集合,由JCP組織制定相關的JavaSpecificationRequest(JSR)并發(fā)布。本游戲中通過總結和分析JAVA游戲的開發(fā)流程和代碼功能的設計,開發(fā)了一款炸彈人游戲,該游戲主要分為場景類、子彈類、炸彈人類、敵方炸彈人類、我方炸彈人類等幾個類,玩家通過輸入IP獲得連接,能夠實現(xiàn)敵方炸彈人和子彈的智能化運行,添加了草坪,河流,普通墻和鋼墻,并給其賦予了自己特有的功能,同時游戲中還包含了記分系統(tǒng),特殊武器的加入,以及一些幫助說明信息,另外,此游戲中不同的是在游戲中添加了通話功能,在游戲中使用了套接字Socket來完成客戶端與服務器端的連接,采用了接口技術,是一個類可以實現(xiàn)多個接口,克服了Java單繼承缺點。采用了線程的使用,充分利用和發(fā)揮了處理機與外圍設備并行工作的能力。本軟件接受了網(wǎng)絡游戲的軟硬件特性,J2SE的相關技術及本程序的分析和功能的具體實現(xiàn),游戲界面美觀,操作簡單,功能齊全,是廣大游戲愛好者都喜歡的一款網(wǎng)絡游戲,具有一定的復雜性和可玩性。關鍵字:J2SE;C/S;炸彈人游戲畢業(yè)設計(論文)-II-ABSTRACTJ2SEJavacalledJavastandardversionorJavastandardplatform.TheSDKprovidesstandardJ2SEJavadevelopmentplatform.UsingthisplatformcancardhairJavadesktopapplicationsandlow-endserverapplication,alsocandevelopaJavaAppletprogram.ItisactuallyaseriesofstandardsetbytheJCPorganization,andmaketherelevantSpecificationthat(JSR)Javaandrelease.ThisgamethroughthesummaryandanalysisofthegamedevelopmentprocessandJAVAcodefunctiondesign,developanewtankwargame,thisgamemainlydividedintothesceneofclasses,bullets,tanktype,theenemytanksclass,ourtanksseveralkindofplayersenterIPgetconnectedbyenemytanks,canrealizetheintellectualizedoperationandbullets,addedthelawn,rivers,commonwallandsteelwall,andgiveitsendowedwithitsownpeculiarfunction,butthegamealsocontainsthescoringsystem,specialweaponstojoin,andsomehelpexplaininformation,inaddition,thegameisdifferentinthegameaddscallsinthegameusefunction,theSocketSockettocompletetheclientandtheserverconnection,adoptedinterfacetechnology,isaclasscanimplementmultipleinterfaces,toovercometheshortcomings.JAVAsingleinheritanceBytheuseofthethread,fullyusedandplayedaprocessorandperipheralsparallelworkability.Thissoftwareacceptedthenetworkgame'ssoftwareandhardwarecharacteristics,therelevanttechnologyandtheJ2SEJavaprogramanalysisandfunctionofthespecificimplementation,gameinterfaceaesthetics,simpleoperation,completefunction,isbroadgamerslikeoneofnetworkgame,hassomeofthecomplexityandcanplaysex.Keywords:J2SEJava;C/S;Boommangames目錄摘要 IABSTRACT II緒論 1第1章開發(fā)工具介紹 21.1網(wǎng)絡游戲介紹 21.1.1網(wǎng)絡游戲特征 21.1.2網(wǎng)絡游戲的類型 31.1.3Java語言的特點 41.1.4中國網(wǎng)絡游戲市場現(xiàn)狀 51.2J2SE簡介 51.2.1什么是J2SE 51.2.2J2SE平臺體系結構 61.2.3J2SE體系結構優(yōu)勢 61.2.4J2SE編譯運行的過程 71.2.5發(fā)環(huán)境及相關技術的介紹 71.2.6網(wǎng)絡游戲開發(fā)概述 81.3繪圖與混淆器 91.3.1提供低級繪制的Canvas類 91.3.2Graphics類 91.3.3JPG格式 91.3.4有關繪圖的一些技術 101.3.5混淆器(Obfuscator)的使用 10第2章炸彈人大戰(zhàn)游戲的需求分析 112.1炸彈人大戰(zhàn)游戲的任務概述 112.2本程序需解決的有關程序問題 112.3使用對象 122.4游戲功能 122.5建議軟硬件配置 12第3章總體設計 133.1炸彈人大戰(zhàn)游戲的總體功能 13第4章算法設計和主要技術 144.1炸彈人大戰(zhàn)生成算法 144.1.1子彈產生的算法 144.1.2敵人炸彈人產生的算法 154.1.3爆炸效果產生算法 154.1.4大本營產生算法 164.1.5面板產生算法 174.1.6草坪產生算法 184.1.7河流產生算法 194.1.8普通墻的產生算法 194.1.9鋼墻的產生算法 194.1.10主機服務器建立連接算法 204.2功能實現(xiàn)算法 204.2.1子彈功能算法 204.2.2炸彈人功能算法 204.2.3面板功能算法 20第5章炸彈人大戰(zhàn)游戲的詳細設計 225.1服務器的類 225.1.1主類ServerView類 225.1.2服務器模型ServerModel類 235.1.3子彈屬性bullet類的實現(xiàn) 235.1.4轟炸類bomb類的實現(xiàn) 245.1.5面板類drawingPanel類的實現(xiàn) 245.1.6敵人炸彈人enemy類的實現(xiàn) 255.1.7游戲關數(shù)level類 255.1.8游戲者player類的實現(xiàn) 255.2客戶端的類 255.2.1子彈屬性bullet類的實現(xiàn) 255.2.2客戶端模型ClientModel類的實現(xiàn) 265.2.3面板類drawingPanel類的實現(xiàn) 285.2.4說明控制類instructionHandler類的實現(xiàn) 285.3服務器類結構圖 315.4客戶端類結構圖 31第6章游戲測試 336.1測試方法 336.2部分測試用例 336.2.1系統(tǒng)啟動測試 336.2.2子彈發(fā)射測試 336.2.3玩家移動測試 346.2.4信息發(fā)送測試 346.2.5游戲暫停和繼續(xù)的測試 346.2.6游戲勝利與失敗的測試 356.3測試分析和小結 35第7章用戶手冊 367.1炸彈人大戰(zhàn)運行環(huán)境配置 367.1.1軟件配置 367.1.2硬件配置 367.2“炸彈人大戰(zhàn)”游戲規(guī)則 367.3“炸彈人大戰(zhàn)”游戲操作 36總結 37參考文獻 38致謝 39-緒論自從Java問世以來,Sun公司已經成功的將Java平臺技術推廣到臺式計算機與服務器。Java是一門很優(yōu)秀的編程語言,具有面向對象,與平臺無關,安全,穩(wěn)定和多線程等特點,是目前軟件設計中極為健壯的編程語言。Java不僅可以用來開發(fā)大型的應用程序,而且特別適合于Tnternet的應用開發(fā)。Java確實具備了“一次寫成,處處運行”的特點,Java已成為網(wǎng)絡時代最重要的編程語言之一。Java語言的迅猛發(fā)展使得Java實現(xiàn)的應用產品遍及商務應用,短信獲取,英漢互譯,游戲娛樂等多媒體領域,Java語言原先的開發(fā)目的與市場的需求不某而和,在不久的將來,Java將會成為最熱門的語言。將Java語言引入,作為一種通用的開發(fā)標準,并且也已經成為應用程序開發(fā)的標準,國際大公司如Nokia,Motorola及Siemens等所設計的手機內都加入Java程序的支持,可見在不久的將來,Java將成為移動設備上最熱門的語言。本課題的研究目標:實現(xiàn)在C/S模式下,進行的一場炸彈人大戰(zhàn)游戲。本課題的研究內容:該游戲的研究內容涉及到服務器端主機的建立,客戶端客戶機的連接,進入游戲后地圖是如何載入的,子彈發(fā)射時是如和運作的,即子彈打中了不同的物體會給出不同的效果,還有炸彈人吃到特殊圖標,即所謂的超級武器時,游戲中會產生相應的反應,另外,還包括玩家在游戲中是如何互相通信的,我方炸彈人獲得勝利后是如何顯示的,我方大本營被敵人攻破或是游戲玩家的生命值為0時,系統(tǒng)又會做出怎樣的處理,當玩家成功的攻破當前關時,下一關的地圖又會如何顯示出來,還有就是當炸彈人行駛到地圖邊沿時,如何改變行駛方向的,敵人的炸彈人又是如何實現(xiàn)子彈的發(fā)射與自能化的。本課題的方法和手段:本游戲采用的是基于J2SE標準平臺的java編程技術,涉及到接口,套接字Socket,線程的使用,以及繪圖方法Graphics()方法的使用。隨著網(wǎng)絡的日益普及、Java功能在網(wǎng)絡中的實現(xiàn),Java應用程序產生的網(wǎng)絡增值服務逐漸體現(xiàn)出其影響力,對豐富人們的生活內容、提供快捷的資訊起著不可忽視的作用。游戲開發(fā)者和玩家常常是前沿計算機技術的最早的采用者。由于他們的創(chuàng)新天性,游戲不再是由大型采購公司控制的技術產品,游戲領域總是有充足的空間給那些在這方面有天分的單個創(chuàng)新者。隨著技術對游戲經驗的促進,游戲市場持續(xù)增長。商業(yè)IT革命為我們節(jié)省了時間力之一。計算機游戲和金錢,從而提高了我們的工作水平,我們因此花費更多的時間和金錢在游戲上,來改善生活的整體質量。甚至在當今困難的經濟時代,游戲仍保持快速增長,他仍然是盈利行業(yè)的組成部分。Java開發(fā)者應該注意到這里蘊藏著的巨大的商機。第1章開發(fā)工具介紹1.1網(wǎng)絡游戲介紹1.1.1網(wǎng)絡游戲特征網(wǎng)絡游戲是利用TCP/IP協(xié)議,以互聯(lián)網(wǎng)為依托,可以多人同時參與的游戲項目,它是通過網(wǎng)絡實現(xiàn)的一種新的人機和人際互動形式。網(wǎng)絡游戲包括單機游戲,模擬器支持的視頻等。網(wǎng)絡游戲秉承了傳統(tǒng)文化豐富的文化元素,有著極大的文化內涵,它是信息的情趣化表征與傳遞。網(wǎng)絡游戲中凸顯出的藝術性極大地折射出其豐富的文化底蘊。網(wǎng)絡游戲可以向學生展示不同的文化背景,把學生置于繽紛的文化氛圍中,去體驗和汲取文化精髓。游戲中所勾畫出的虛擬世界也有其特定的世界觀和價值觀,好的網(wǎng)絡游戲同樣可以向學生傳遞積極的世界觀和價值觀。第一代網(wǎng)絡游戲游戲特征:1、非持續(xù)性,機器重啟后游戲的相關信息即會丟失,因此無法模擬一個持續(xù)發(fā)展的世界;2、游戲只能在同一服務器/終端機系統(tǒng)內部執(zhí)行,無法跨系統(tǒng)運行。第二代網(wǎng)絡游戲游戲特征:1、網(wǎng)絡游戲出現(xiàn)了“可持續(xù)性”的概念,玩家所扮演的角色可以成年累月地在同一世界內不斷發(fā)展,而不像PLATO上的游戲那樣,只能在其中扮演一個匆匆過客。2、游戲可以跨系統(tǒng)運行,只要玩家擁有電腦和調制解調器,且硬件兼容,就能連入當時的任何一款網(wǎng)絡游戲。第三代網(wǎng)絡游戲游戲特征:“大型網(wǎng)絡游戲”(MMOG)的概念浮出水面,網(wǎng)絡游戲不再依托于單一的服務商和服務平臺而存在,而是直接接入互聯(lián)網(wǎng),在全球范圍內形成了一個大一統(tǒng)的市場。第四代網(wǎng)絡游戲游戲特征:在第四代網(wǎng)絡游戲代表作中,大型網(wǎng)絡游戲也占有絕大多數(shù)的比重。素有“中國版奇跡”之稱的醉逍遙的崛起為第四代網(wǎng)游帶來了又一片春天。醉逍遙是原網(wǎng)禪團隊與中國某研發(fā)團隊聯(lián)合創(chuàng)制,在安全防護和玩法創(chuàng)新上做了卓著的成績,一直都深受玩家青睞,這也是第四代網(wǎng)游之所以被成為新生代網(wǎng)游的原因。在網(wǎng)絡游戲中有一系列的規(guī)范或規(guī)則,為玩家設定了參與游戲的基本結構,作為玩家必須遵守這些規(guī)則,才能在游戲中保持自己的位置。網(wǎng)絡游戲具有強烈的挑戰(zhàn)性,而且這種挑戰(zhàn)性對學生具有很大的吸引力。在虛擬的網(wǎng)絡游戲中,學生會遇到許多困難,必須想方設法去克服困難,出奇制勝,發(fā)揮最大的聰明才智,才能控制復雜的局面,并最終到達光明的彼岸。1.1.2網(wǎng)絡游戲的類型從種類方面分類1、棋牌類休閑網(wǎng)絡游戲:即登陸網(wǎng)絡服務商提供的游戲平臺后,進行雙人或多人對弈,如紙牌、象棋等,提供此類游戲的公司主要有騰訊、聯(lián)眾、新浪等。2、網(wǎng)絡對戰(zhàn)類游戲:即玩家通過安裝市場上銷售的支持局域網(wǎng)對戰(zhàn)功能游戲,通過網(wǎng)絡中間服務器,實現(xiàn)對戰(zhàn),如CS、星際爭霸、魔獸爭霸等,主要的網(wǎng)絡平臺有盛大、騰訊、浩方等。3、角色扮演類大型網(wǎng)上游戲:即RPG類,通過扮演某一角色,通過任務的執(zhí)行,使其提升等級,等到寶物等,如大話西游、傳奇等,提供此類平臺的主要有盛大等。從游戲模式方面分類1、ACT=動作游戲;2、AVG=冒險游戲;3、PUZ=益智游戲;PUZ原來指用于培養(yǎng)和開發(fā)兒童智力的拼圖游戲,之后概念得到擴展,引申為各類益智休閑游戲。《俄羅斯方塊》是其中最為經典的作品,《寶石方塊》、《旋轉泡泡球》、《LUMINES》等也是大家喜聞樂見的益智游戲。本次分類會將益智游戲的范圍進一步擴充,《腦白金》、《找碴博物館》等原本歸于ETC類型的健腦類游戲,也一并歸為益智游戲類型。其他歸為益智類的還有少量以智力問答為核心內容的游戲;4、CAG=卡片游戲;5、FTG=格斗游戲;格斗又成“對戰(zhàn)格斗”,盡管也有2D和3D格斗之分,但其概念與特征一直沒有太多的變化,正統(tǒng)的FTG有體力槽、操作和出招方式、角色處于同一軸線以及講究對抗與平衡相對統(tǒng)一的特點,因此不再拆分?!督诸^霸王》、《格斗之王》、《VR戰(zhàn)士》、《鐵拳》等都是玩家十分熟悉的格斗游戲。注意,像《任天堂全明星大亂斗》和一些動漫改編的亂斗游戲不具備格斗游戲的傳統(tǒng)特征,因此均歸為動作類游戲;6、LVG=戀愛游戲;7、TCG=養(yǎng)成類游戲;8、TAB=桌面游戲;9、MSC=音樂游戲;10、SPG=體育游戲;11、SLG=戰(zhàn)略游戲;12、STG=射擊游戲;13、RPG=角色扮演;14、RCG=賽車游戲;競速游戲俗稱“賽車游戲”,因為其中大部分游戲需要駕駛車輛進行比賽,或對速度進行挑戰(zhàn)。著名的賽車游戲系列有《GT賽車》、《頭文字D》、《火爆狂飆》等。但并不是所有的競速游戲駕駛的都是車輛,也有摩托艇、飛行器或是一些科幻色彩濃重的未來交通工具,比如《F-ZERO》、《反重力賽車》等。1.1.3Java語言的特點1.平臺無關性平臺無關性是指Java能運行于不同的平臺。Java引進虛擬機原理,并運行于虛擬機,實現(xiàn)不同平臺的Java接口之間。使用Java編寫的程序能在世界范圍內共享。Java的數(shù)據(jù)類型與機器無關,Java虛擬機(JavaVirtualMachine)是建立在硬件和操作系統(tǒng)之上,實現(xiàn)Java二進制代碼的解釋執(zhí)行功能,提供于不同平臺的接口的。2.安全性Java的編程類似C++,學習過C++的讀者將很快掌握Java的精髓。Java舍棄了C++的指針對存儲器地址的直接操作,程序運行時,內存由操作系統(tǒng)分配,這樣可以避免病毒通過指針侵入系統(tǒng)。Java對程序提供了安全管理器,防止程序的非法訪問。3.面向對象Java吸取了C++面向對象的概念,將數(shù)據(jù)封裝于類中,利用類的優(yōu)點,實現(xiàn)了程序的簡潔性和便于維護性。類的封裝性、繼承性等有關對象的特性,使程序代碼只需一次編譯,然后通過上述特性反復利用。程序員只需把主要精力用在類和接口的設計和應用上。Java提供了眾多的一般對象的類,通過繼承即可使用父類的方法。在Java中,類的繼承關系是單一的非多重的,一個子類只有一個父類,子類的父類又有一個父類。Java提供的Object類及其子類的繼承關系如同一棵倒立的樹形,根類為Object類,Object類功能強大,經常會使用到它及其它派生的子類。4.分布式Java建立在擴展TCP/IP網(wǎng)絡平臺上。庫函數(shù)提供了用HTTP和FTP協(xié)議傳送和接受信息的方法。這使得程序員使用網(wǎng)絡上的文件和使用本機文件一樣容易。5.鍵壯性Java致力于檢查程序在編譯和運行時的錯誤。類型檢查幫助檢查出許多開發(fā)早期出現(xiàn)的錯誤。Java自己操縱內存減少了內存出錯的可能性。Java還實現(xiàn)了真數(shù)組,避免了覆蓋數(shù)據(jù)的可能。這些功能特征大大提高了開發(fā)Java應用程序的周期。Java提供:Null指針檢測、數(shù)組邊界檢測、異常出口、Bytecode校驗。1.1.4中國網(wǎng)絡游戲市場現(xiàn)狀中國網(wǎng)絡游戲市場規(guī)模及預測:于中國網(wǎng)絡游戲市場規(guī)模部分的描述,其中有大量的數(shù)據(jù)及圖表,均摘自一份調查報告[8],閱讀之后,我認為該調查報告符合統(tǒng)計學的理論,客觀嚴謹具有較高的可行度。該報告主要采用了計算機網(wǎng)上聯(lián)機的調查方法進行,通過在中國多家主要網(wǎng)站的主要頻道投放網(wǎng)幅廣告和文字鏈接廣告,于2004年12月1日——12月31日期間,由用戶主動參與填寫問卷的方式,共收到調查問卷103341份,經處理排除無效問卷,并根據(jù)網(wǎng)民的男女性別比例[根據(jù)CNNIC于2004年7月公布的網(wǎng)民性別比例(男:女=6:4)]進行配額,對最終的樣本問卷進行隨機抽樣,獲得54975份樣本。經過統(tǒng)計分析之后,該報告得出以下結論:根據(jù)CNNIC的統(tǒng)計,2001年,中國上網(wǎng)人口僅為3370萬。到2003年,上網(wǎng)人口已經接近了8000萬,相比2002年增長了35%。報告認為至2004年末中國上網(wǎng)人口達到1.04億。到2007年,中國上網(wǎng)人口將達到2.05億。龐大的網(wǎng)民基數(shù),以及巨大的增長潛力,將是中國網(wǎng)絡游戲用戶增長的根本基礎。報告認為至2004中國網(wǎng)絡游戲用戶達到1976萬,即有19%的中國網(wǎng)民為網(wǎng)絡游戲用戶,同時報告預測到2007年中國網(wǎng)絡游戲用戶將達3731萬,在網(wǎng)民中所占比例為18%。同時,報告預計隨著網(wǎng)絡游戲產業(yè)的快速發(fā)展,網(wǎng)絡游戲用戶中付費用戶的比例和數(shù)量將有所增長。根據(jù)我們的研究,2002年,國內收費網(wǎng)絡游戲用戶數(shù)為350萬,到了2003年,收費用戶數(shù)增長了一倍,達到710萬。2004年,收費網(wǎng)絡游戲用戶為1130萬,占網(wǎng)絡游戲用戶的57%。預計到2007年,中國收費網(wǎng)絡游戲用戶將達到2255萬,占網(wǎng)絡游戲用戶60%。1.2J2SE簡介1.2.1什么是J2SEJ2SE是SUN公司針對桌面應用軟件的編程推出的開發(fā)平臺,與J2ME和J2EE共同組成Java技術的三個重要的分支。J2SE實際上是一系列規(guī)范的集合,由JCP組織制定相關的JavaSpecificationRequest(JSR)并發(fā)布,J2SE商業(yè)版本,標準版本(Java2StandardEdition)定位在客戶端,主要用于桌面應用軟件的編程。J2SE包含那些構成Java語言核心的類。比如:接口定義、輸入/輸出、網(wǎng)絡編程。1.2.2J2SE平臺體系結構要精通J2SE,必須對J2SE的四大重要技術有深入的了解。具體分為:(1)Java應用程序接口(JavaAPI);(2)Java虛擬機;(3)JavaClass文件格式;(4)Java程序設計語言。J2SE的體系結構使得Java更適應于網(wǎng)絡。其最大的兩個優(yōu)勢就是:平臺無關性和網(wǎng)絡移動性。這一點在其體系結構的各個技術上都有體現(xiàn)。1.2.3J2SE體系結構優(yōu)勢J2SE的體系結構使得Java更適應于網(wǎng)絡。其最大的兩個優(yōu)勢就是:平臺無關性和網(wǎng)絡移動性。這一點在其體系結構的各個技術上都有體現(xiàn)。1.JavaAPI的優(yōu)勢體現(xiàn)JavaAPI是運行庫的集合,它提供了一套訪問主機系統(tǒng)資源的標準方法。運行Java程序時,虛擬機裝在.class文件所使用的JavaAPIclass文件,并和所有已近轉載的動態(tài)庫(本地方法)共同組成Java虛擬機運行的整個程序。JavaAPI天生就和平臺相關的。不同平臺的JavaAPI和本地方法進行交互的方式可能不同,但是對Java應用程序的顯示接口是完全一樣的。這才保證了Java應用程序的平臺無關性。2.Java虛擬機的優(yōu)勢體現(xiàn)和JavaAPI一樣,JVM是平臺相關的。如果Java程序需要訪問本地資源的話,Java虛擬機是一定要調用本地方法的。也正是應為JVM的存在,才導致了Java平臺無關性的優(yōu)勢。3.Javaclass文件的優(yōu)勢體現(xiàn)Java編譯器并不能將Java編譯成底層的二進制指令,而是編譯成一種與底層平臺無關的中間格式文件(.class)。通常情況下不同硬件平臺或操作系統(tǒng)的二進制指令時不能通用的。而.class文件是可以運行在任何支持Java虛擬機的硬件和操作系統(tǒng)上的。另外,class文件設計緊湊,可以快速的在網(wǎng)絡上傳輸。4.Java程序設計語言的優(yōu)勢體現(xiàn)Java在語言也體現(xiàn)出一定的平臺無關性。比如所有的基本數(shù)據(jù)類型所占用的字節(jié)大小都是固定的。另外Java語言也是一種非常通用、安全的語言。與C++不同,Java對內存的自動管理要強的多,也更加安全。比如放棄指針,而使用對象引用。使用垃圾回收機制而不是讓程序員自己手動回收。1.2.4J2SE編譯運行的過程先編譯后運行首先編譯:虛擬機會根據(jù)java預言的規(guī)則進行語法分析,詞法分析,語義分析等等,以及類變量常量的提取等等,然后依據(jù)class文件的格式把程序轉化為字節(jié)碼文件。這就是你用javac命令的結果。運行:要經過初始化的步驟,進入內存,然后在用到的時間就從main方法入口區(qū)執(zhí)行程序!1.2.5發(fā)環(huán)境及相關技術的介紹開發(fā)環(huán)境圖1-1Java開發(fā)環(huán)境圖操作系統(tǒng):MicrosoftWindowsXP程序語言:Java2JDK下載、安裝及配置:JDK是整個Java的核心,包括了Java運行環(huán)境(JavaRuntimeEnvirnment),一堆Java工具和Java基礎的類庫(rt.jar)。第一步:下載JDK的一個常用版本J2SE(Java2SDKStandardEdition)可以從Sun的Java網(wǎng)站上下載到:/j2se/downloads.html,我們建議下載最新版本的。當前最新版本為:J2SE5.0JDK。第二步:安裝下載好的JDK是一個可執(zhí)行安裝程序,執(zhí)行安裝即可。安裝完成在安裝目錄下會有jdk1.5.0和jre1.5.0兩個文件夾。第三步:設置環(huán)境變量打開“我的電腦->屬性->高級->環(huán)境變量->系統(tǒng)變量”,設置以下三個變量:JAVA_HOME=<JDK安裝目錄>如:我的為:E:\ProgramFiles\Java\jdk1.5.0CLASSPATH=.Path=<原Path>;<bin安裝目錄>如:我的為:\ProgramFiles\Java\jdk1.5.0\bin請注意:CLASSPATH變量的值是“.”(不包括引號).Java虛擬機的ClassLoader會按照CLASSPATH設定的路徑搜索class文件。請注意,ClassLoader不會在當前目錄下搜索,習慣了Windows的用戶可能會感到意外,Linux用戶就非常清楚。為方便起見,我們將CLASSPATH設置為“.”就包括了當前目錄。1.2.6網(wǎng)絡游戲開發(fā)概述很多人看來,網(wǎng)絡游戲還是一種很新鮮時尚的玩意兒,所以談起網(wǎng)絡游戲時難免有種高深摸測的感覺。其實,網(wǎng)絡游戲的整個制作過程十分簡單。從某種角度而言,是一種傳統(tǒng)的回歸,同時也是新舊技術的相互融合。合適的開發(fā)工具或者好的引擎將會大大提高開發(fā)速度。最常用的開發(fā)工具有Eclipse,在設計工具上則更是和普通的C/S游戲制作軟件沒有大的區(qū)別。當然所有這些方法都要根據(jù)游戲的最終設定來決定。在制作網(wǎng)絡游戲時,常常結合使用二維繪制來建立模型以及場景渲染。在設計過程中常常使用了MAYA、3DMAX、PHOTOSHOP、PAINRER等工具。大多數(shù)網(wǎng)絡游戲提供多難度級別,使游戲者玩上幾天甚至幾個星期。每級游戲都可以建立在不同的迷宮中。當一個游戲者以自己的方式成功玩到某一級終點時,游戲繼續(xù)進行到更高的一級,在那里游戲者要接受新的挑戰(zhàn)。多級別非常重要,它可以讓新的布景和迷宮出現(xiàn)并且使游戲看起來不讓人厭煩。它們讓玩家在游戲中以不同的速度完成游戲時得到不同的獎勵,比如:特殊的能力,武器。此外還可以設置加強難度,讓游戲者不得不消滅光所有的怪物才可以得到過關許可。也許展現(xiàn)一個三維場景并不難,但令人驚嘆的效果和良好的娛樂性也許才是游戲的精髓所在。1.3繪圖與混淆器1.3.1提供低級繪制的Canvas類為了能有程序開發(fā)人員控制接口的外觀和行為,需要使用大量的初級用戶接口類,尤其在游戲程序中,幾乎完全依賴的就是Canvas抽象類進行繪圖。從程序開發(fā)的觀點看,Canvas類可與高級Screen類交互,程序可在需要時在Canvas中摻入高級類的組件。Canvas提供了鍵盤事件、指點桿事件(如果設備支持),并定義了允許將鍵盤按鍵映射為游戲控制鍵的函數(shù)。鍵盤事件由鍵代碼指定,但這樣控制游戲會導致缺乏通用性,并不是每個設備的鍵盤布局都適合游戲的操作。應當將鍵代碼轉換為游戲鍵的代碼,以便硬件開發(fā)商能定義他們自己的游戲鍵布局。本程序中,操縱用戶炸彈人運行的按鍵都定義為游戲控制鍵,這樣便能適應所有的機器。1.3.2Graphics類Graphics類提供了簡單的2D繪圖功能。它具有24位深度色彩的繪制能力,以三原色分別各占一個字節(jié)表示其顏色。Component類中有一個方法publicvoidpaint(Graphicsg),我們可以在其子類中重寫這個方法。當重寫這個方法時,相應的Java運行環(huán)境將參數(shù)g實例化,對象g就可以在該組件的坐標內繪制圖形,圖像等。1.3.3JPG格式JPG是靜態(tài)圖片,顯示的顏色多,文件相對大。GIF是動態(tài)的動畫,顯示的顏色少,文件相對小。

JPEG=JPG是JointPhotographicExpertsGroup(聯(lián)合圖像專家組)的縮寫,文件后輟名為".jpg"或".jpeg",是最常用的圖像文件格式,由一個軟件開發(fā)聯(lián)合會組織制定,是一種有損壓縮格式,能夠將圖像壓縮在很小的儲存空間,圖像中重復或不重要的資料會被丟失,因此容易造成圖像數(shù)據(jù)的損傷。

JPG格式的照片是壓縮的照片,它的壓縮率是可以調整的,數(shù)碼相機照出來的壓縮率小,因此文件體積比較大,你“另存為”的時候,畫圖軟件使用了另外一種壓縮率,因此壓得文件小了一點。這就是圖片文件變小的原理,奧秘就在壓縮率。

壓縮率與品質是相對應的,壓縮得厲害,品質就下降。因此你另存為以后,圖像質量必然改變。

圖片的質量,在打印出來的時候有比較大的區(qū)別,在計算機顯示器上顯示,變化很不明顯。因此高品質的大文件圖片,比如你原來的1M多,只對打印有意義,用來上網(wǎng)或者自己在計算機上觀賞,高品質就沒有意義。1.3.4有關繪圖的一些技術在以往進行游戲繪圖一般需要手動編程使用雙緩沖。需要在paint()方法內所想要畫的圖形畫在一張預先準備好的背景,等所有繪圖操作都完成后再將背景的數(shù)據(jù)拷貝到實際的屏幕上。Image類提供了一個建立背景的靜態(tài)方法createImage(intwidth,intheight),再利用getGraphics()方法取得屬于這個背景的Graphics對象,所進行的繪圖操作都會作用在背景上,等到全部的繪圖操作完成后,再調用drawImage()方法將背景的數(shù)據(jù)復制到實際顯示的屏幕上。這樣的技術在繪制動畫時特別有用。繪制動畫時經常需要不斷地更新畫面,而更新畫面的操作就是先將屏幕以fillRect()的方式清除,再將下一張圖片畫在屏幕上,然而反復的清除及重繪會造成屏幕的閃爍現(xiàn)象(flicker),因此使用雙重緩沖的好處就是在背景進行這個清除及重繪的操作,再將完成的繪圖拷貝到屏幕上,由于用戶看不到清除的操作,因此就不會出現(xiàn)閃爍的現(xiàn)象了。1.3.5混淆器(Obfuscator)的使用Java語言并沒有完全編譯成二進制可執(zhí)行文件,編譯出的.class文件是一種介于源程序和二進制之間的一中基于半解釋的字節(jié)碼,需要虛擬機來執(zhí)行。它包括了所有的信息。然而這樣會導致.class很容易被反編譯為源代碼,從而不能保護作者的知識成果。目前流行的如decode,JAD等反編譯工具可以以很快的速度生成源文件。如果不加以施行有效的措施,將造成嚴重的后果。由此引入混淆器的概念。混淆器將代碼中的所有變量、函數(shù)、類的名稱變?yōu)楹喍痰挠⑽淖帜复?,如果缺乏相應的函?shù)名指示和程序注釋,即使被反編譯,也將難以閱讀?;煜鞯淖饔貌粌H僅是保護代碼,它也有精簡編譯后程序大小的作用。由于以上介紹的減少變量、函數(shù)的命名長度的關系,編譯后也會從.class文件中減少這些冗余的信息。混淆后,體積大約能減少25%,這對當前費用較貴的無線網(wǎng)絡傳輸是有一定意義的。為了能與各種IDE集成,就像Java2SDK一樣,混淆器采用命令行參數(shù)的形式,以便可被其調用。目前流行的Obfuscator有RetroGuard等。第2章炸彈人大戰(zhàn)游戲的需求分析2.1炸彈人大戰(zhàn)游戲的任務概述這個炸彈人大戰(zhàn)游戲的策劃比較簡單,游戲中玩家采用傳統(tǒng)的游戲規(guī)則。服務器建立主機,然后客戶機請求申請進入,當客戶機輸入主機的IP之后便可開始游戲,雙方在中途能夠暫停,能夠互通信息,雙方炸彈人加入超級武器后都會有多種不同功能,如加入INT圖標時,敵方炸彈人全部死亡;加入五角星時,可以加快子彈的速度,并能將鋼墻打破;加入炸彈人圖標,則可以增加一條生命等等。如果成功過關,會顯示你過關了,在游戲中還會出現(xiàn)敵人的炸彈人數(shù)量及我方坎坷的戰(zhàn)績,若游戲失敗了,系統(tǒng)會問是否要繼續(xù)游戲,若雙方都同意繼續(xù)游戲,則游戲重新開始,否則游戲結束。2.2本程序需解決的有關程序問題1.本程序是一項精度要求很高網(wǎng)絡游戲,因為其代碼利用率很高。一個實時運行的最終作品,因此,其邏輯設計應當相當嚴謹,需將所有可能發(fā)生的事件及意外情況考慮在設計中。2.己方炸彈人的運行可以通過鍵盤響應事件控制,但敵方則因為是自動運行,就需要有一定的自能性,同時,出現(xiàn)在屏幕上的敵人可能會有較多的數(shù)量,就需要每個敵人開辟一個線程以便能讓其獨立運行。Java的多線程能力為實現(xiàn)這樣的游戲提供了可能。敵人炸彈人的運行算法也需要進行適當?shù)脑O置,以免游戲過于簡單,單調。3.對于雙方炸彈人發(fā)出的子彈的控制也需要對其跟蹤控制,子彈也需要處在獨立的線程中。敵方子彈僅需要掃描用戶炸彈人,而用戶炸彈人需要在每一步掃描所有敵人炸彈人,這需要對所有的對象有一個較好的控制。另外子彈在運行過程中也需要實時掃描是否碰撞到了相關障礙物或屏幕邊界,如此過多的線程同時在本來效率就不高的Jvm虛擬機上運行,也許會導致程序的緩慢。4.雙方的炸彈人在前進時也需要考慮是否碰到相關物體或對方炸彈人,以免重疊運行,造成許多物理上不可能的情況,缺乏真實感,每一次刷新頁面,每前進一步都需要將所有的周圍環(huán)境都進行掃描。5.游戲的結束,開始,動態(tài)信息畫面作為構成一個完美程序都是必不可少的重要部分,良好的用戶界面更是吸引用戶的硬指標,相關的美術構圖也需要有一定的考慮。6.游戲的地圖不可能全都通過繪圖來解決,否則,不僅難于控制和處理過多的元素,也會因過多的大型圖片而不能限制程序的大小,失去程序的原則和Java優(yōu)勢,同時,地圖關卡不宜保存在有限的內存中,而最好采取外部文件的讀入讀出方法。7.用戶運行游戲時需要有分數(shù)記錄的可能。如果采用合理的記分標準,需要進行適當?shù)脑O計。記分記錄的存儲方式也需要有較好的解決方案。8.Java是基于虛擬機的半解釋型編譯系統(tǒng),其執(zhí)行效率較C++等完全編譯后的程序會低很多,程序如果不進行精簡和優(yōu)化,將可能導致運行的不流暢。除開發(fā)過程中對結構上的控制,變量的使用,算法的優(yōu)化等優(yōu)化外,還可以使用混淆器進行程序打包后的優(yōu)化。2.3使用對象本游戲適用于任何游戲愛好者,考驗玩家的思維能力和敏捷力。2.4游戲功能1.開始新游戲功能2.存儲游戲功能3.讀取游戲功能4.演示游戲功能2.5建議軟硬件配置1.該軟件是利用Java語言編程,所以運行該游戲必須安裝JVM(Java虛擬機)。2.運行該游戲的最低硬件配置,如要求系統(tǒng)最低為64M內存,40G硬盤以上等。3.操作平臺Windows95,WindowsMe,Windows98,Windows2000,WindowsXP均可。第3章總體設計3.1炸彈人大戰(zhàn)游戲的總體功能游戲由服務器和客戶機2部分組成,在服務器中,base類負責創(chuàng)建大本營,bomb類負責創(chuàng)建子彈打出后的效果,bullet類負責創(chuàng)建子彈,enemy類負責創(chuàng)建敵方炸彈人,drawingPanel類負責創(chuàng)建主機窗口視圖,grass類負責創(chuàng)建草坪,level類負責創(chuàng)建各個不同的關,player類負責我方炸彈人的得分,位置等信息,powerUp類負責將子彈的能量加高,速度加快,river類負責創(chuàng)建河流,ServerControler創(chuàng)建對話,幫助,使用之類的信息,ServerModel類負責創(chuàng)建主機,ServerView類負責創(chuàng)建圖標信息,Steelwall類負責創(chuàng)建鋼墻,Ticker類負責創(chuàng)建時間信息,wall類負責創(chuàng)建普通的墻。而客戶端的Actor類負責創(chuàng)建接口,bomb類負責創(chuàng)建子彈打出后的效果,bullet類負責創(chuàng)建子彈,ClientControler類負責創(chuàng)建對話,幫助,使用之類的信息,ClientModel類負責創(chuàng)建與主機的鏈接,ClientView類負責創(chuàng)建圖標信息,drawingPanel負責創(chuàng)建客戶端窗口視圖,instructionHandler類完成各物體間的轉換及游戲結束后是否繼續(xù),level類負責創(chuàng)建各個不同的關,normalObject類描繪了去墻以外的所有物體,Steelwall類負責創(chuàng)建鋼墻,Ticker類負責創(chuàng)建時間信息,wall類負責創(chuàng)建普通的墻。玩家通過輸入IP獲得連接,能夠實現(xiàn)敵方炸彈人和子彈的智能化運行,添加了草坪,河流,普通墻和鋼墻,并給其賦予了自己特有的功能,同時游戲中還包含了記分功能,特殊武器的加入另外,此游戲中不同的是在游戲中添加了通話功能,在游戲中使用了套接字Socket來完成客戶端與服務器端的連接。第4章算法設計和主要技術4.1炸彈人大戰(zhàn)生成算法4.1.1子彈產生的算法publicvoiddraw(Graphicsg){ g.setColor(Color.lightGray); if(direction==0||direction==1) g.fillRect(border.x+1,border.y+1,3,9); if(direction==2||direction==3) g.fillRect(border.x+1,border.y+1,9,3);}其流程如圖4-1所示:圖4-1子彈生成圖在這里,定義了子彈的顏色為Color.lightGray,若子彈是水平發(fā)出的,則繪制子彈為矩形g.fillRect(border.x+1,border.y+1,9,3),若子彈是垂直發(fā)出的,則繪制子彈為g.fillRect(border.x+1,border.y+1,3,9)。4.1.2敵人炸彈人產生的算法//定義敵人炸彈人共有屬性interval=(int)(Math.random()*200); direction=(int)(Math.random()*4);//定義敵人炸彈人的特殊屬性if(type==args1){//args1為敵人炸彈人名稱 firePosibility=args2;//args2為炸彈人開火位置 speed=args3;//args3為炸彈人速度 textures=newImage[args4];}//args4為圖片名字//繪制敵人炸彈人publicvoiddraw(Graphicsg){ if(flashing&&gameModel.gameFlow%10>4) g.drawImage(textures[textures.length-4+direction],xPos-size,yPos-size,null); else g.drawImage(textures[direction],xPos-size,yPos-size,null);}在這里,通過interval=(int)(Math.random()*200)設置了炸彈人出現(xiàn)的時間間隔,通過direction=(int)(Math.random()*4)獲得炸彈人出現(xiàn)的隨機方向,而在特殊屬性中,通過firePosibility設置敵人炸彈人的火力,通過speed設置敵人炸彈人的速度,通過textures[i]=gameModel.textures[]獲取敵人炸彈人的圖標,讓后通過方法publicvoiddraw(Graphicsg){}添加敵人炸彈人。4.1.3爆炸效果產生算法publicvoiddraw(Graphicsg){ g.setColor(Color.red); g.fillOval(xPos-outer,yPos-outer,2*outer,2*outer); g.setColor(Color.orange); g.fillOval(xPos-middle,yPos-middle,2*middle,2*middle); g.setColor(Color.yellow); g.fillOval(xPos-inner,yPos-inner,2*inner,2*inner);}其爆炸效果流程如圖4-2所示:圖4-2爆炸效果圖當子彈打出,爆炸時,通過g.setColor()方法設置爆炸時的顏色,通過g.fillOval()方法獲得爆炸的圖形及位子大小。4.1.4大本營產生算法publicvoiddraw(Graphicsg){ g.drawImage(base,xPos-12,yPos-12,null); }其流程如圖4-3所示:圖4-3大本營建立圖使用publicvoiddraw(Graphicsg){}方法直接添加一副圖片作為大本營。大本營是玩家的核心,一旦大本營被敵人攻破了,則玩家被判為輸了,并結束游戲。4.1.5面板產生算法//設置面板大小和創(chuàng)建面板圖標publicvoidpaintComponent(Graphicsg){ GraphicsoffScreenGraphics; if(offScreenImage==null){ offScreenImage=createImage(640,550); } offScreenGraphics=offScreenImage.getGraphics(); myPaint(offScreenGraphics); g.drawImage(offScreenImage,0,0,this);}//向面板添加當前關數(shù)及剩余敵人數(shù)g.setColor(newColor(81,111,230)); g.drawString("第"+level.currentLevel+"關",527,39); g.drawString("敵人數(shù)="+level.enemyLeft,527,79);//輸出勝利場景if(level.winningCount>敵人炸彈人數(shù)量){g.setColor(newColor(red,green,blue));g.drawString("過關了!",240,250);}其流程如圖4-4所示:圖4-4面板生成圖通過publicvoidpaintComponent(Graphicsg){}方法創(chuàng)建了一個面板,通過g.drawString("第"+level.currentLevel+"關",527,39)設置了當前關數(shù),及在面板中的位置,通過g.drawString("敵人數(shù)="+level.enemyLeft,527,79)方法顯示剩余敵人數(shù)量及位置,通過g.drawString("過關了!",240,250);}向面板中輸出勝利場景。4.1.6草坪產生算法其流程如圖4-5所示:圖4-5草坪生成圖在算法中,通過publicvoiddraw(Graphicsg){}方法繪制了草坪。草坪中,游戲雙方炸彈人可以自由通過。4.1.7河流產生算法使用g.drawImage()方法直接添加一副圖片作為河流地圖。游戲中,不允許炸彈人在河流中行走,但子彈可以穿過河流,打到對方,這樣的設置使游戲更加新穎,符合傳統(tǒng)炸彈人大戰(zhàn)游戲的規(guī)則。4.1.8普通墻的產生算法本算法中通過generalBorder=newRectangle(xPos-12,yPos-12,25,25)方法初始化了一個矩形,然后調用border[args1]=newRectangle(args2,args3,11,11)生成了普通墻。其中args1為border數(shù)組的索引arg2和arg3分別為矩形繪制的起點坐標x和y。4.1.9鋼墻的產生算法其流程如圖4-6所示:圖4-6鋼墻建立圖本算法中通過generalBorder=newRectangle(xPos-12,yPos-12,25,25)方法初始化了一個矩形,然后調用border[args1]=newRectangle(args2,args3,11,11)生成了鋼墻。與普通墻所不同的是:普通墻被子彈打中后,會相應的減少一部分,直到消失為止,而鋼墻卻不能被一般子彈所打破,只有當玩家吃到五角星圖標時,子彈火力增強后才能將鋼墻打破,而敵人卻無法打破鋼墻。其中args1為數(shù)組參數(shù),args2和args3分別為x和y軸坐標。4.1.10主機服務器建立連接算法主機通過publicvoidcreateServer(){}方法創(chuàng)建主機,通過serverSocket=newServerSocket(4321)創(chuàng)建了一個端口,如果serverCreated=true,則建立成功,否則給出錯誤提示,而服務器則通過clientSocket=serverSocket.accept()建立連接,當通過方法InetAddressaddr=InetAddress.getByName(serverIP);clientSocket=newSocket(addr,4321)連接上主機之后,則載入游戲,否則則給出相應連接錯誤信息。4.2功能實現(xiàn)算法4.2.1子彈功能算法子彈通過掉用方法if(gameModel.actors[i].getType().equals(args))判斷子彈和什么物體相碰,其中args表示各種物體的名字,若是碰到了敵人的炸彈人,則敵人的炸彈人消失,若是碰到了普通的墻,則普通墻被損壞,若是擊中其他物體,則其他物體保持不變,若是打破了大本營,則游戲結束。4.2.2炸彈人功能算法 炸彈人通過if(gameModel.actors[i].getType().equals(args)判斷炸彈人碰到了什么圖標,其中args表示各種物體的名字,若是INT圖標,則判定敵方炸彈人全死亡,若是五角星,則玩家火力加強,若是鋼墻圖標,則大本營變鋼墻,若是炸彈人圖標玩家生命加一,若是時鐘圖標,則敵人停止不動。4.2.3面板功能算法面板流程里主要通過mainPanel=newdrawingPanel()方法調用面板,通過sendMessage=newJButton(??)初始化按鈕,按鈕中包含幫助,暫停/繼續(xù),發(fā)送消息,建立主機,輸入IP按鈕,通過方法publicServerModel(ServerViewthisview)建立主機,通過算法publicvoidactionPerformed(ActionEvente){if(!model.gameStarted){model.addMessage("還沒有和別的玩家聯(lián)上,無法發(fā)送對話");return;} if(!view.messageField.getText().equals("")){model.addMessage("主機端玩家說:"+view.messageField.getText()); model.playerTypedMessage+="m"+view.messageField.getText()+";"; view.messageField.setText(""); }else{model.addMessage("對話內容不能為空");}}來控制消息的互動。為help按鈕上添加監(jiān)聽器publicvoidactionPerformed(ActionEvente)實現(xiàn)幫助消息的顯示。 第5章炸彈人大戰(zhàn)游戲的詳細設計游戲由服務器和客戶機2部分組成,其中服務器包含18個類,客戶機包含13個類。在服務器中Actor類負責創(chuàng)建接口,base類負責創(chuàng)建大本營,bomb類負責創(chuàng)建子彈打出后的效果,bullet類負責創(chuàng)建子彈,enemy類負責創(chuàng)建敵方炸彈人,drawingPanel類負責創(chuàng)建主機窗口視圖,feedbackHandler類負責創(chuàng)建暫停與繼續(xù)游戲事件,grass類負責創(chuàng)建草坪,level類負責創(chuàng)建各個不同的關,player類負責我方炸彈人的得分,位置等信息,powerUp類負責將子彈的能量加高,速度加快,river類負責創(chuàng)建河流,ServerControler創(chuàng)建對話,幫助,使用之類的信息,ServerModel類負責創(chuàng)建主機,ServerView類負責創(chuàng)建圖標信息,Steelwall類負責創(chuàng)建鋼墻,Ticker類負責創(chuàng)建時間信息,wall類負責創(chuàng)建普通的墻。而客戶端的Actor類負責創(chuàng)建接口,bomb類負責創(chuàng)建子彈打出后的效果,bullet類負責創(chuàng)建子彈,ClientControler類負責創(chuàng)建對話,幫助,使用之類的信息,ClientModel類負責創(chuàng)建與主機的鏈接,ClientView類負責創(chuàng)建圖標信息,drawingPanel負責創(chuàng)建客戶端窗口視圖,instructionHandler類完成各物體間的轉換及游戲結束后是否繼續(xù),level類負責創(chuàng)建各個不同的關,normalObject類描繪了去墻以外的所有物體,shield類創(chuàng)建了保護時的狀態(tài),Steelwall類負責創(chuàng)建鋼墻,Ticker類負責創(chuàng)建時間信息,wall類負責創(chuàng)建普通的墻。5.1服務器的類5.1.1主類ServerView類 ServerView類創(chuàng)建了一個窗口,在窗口中添加了六個按鈕,一個文本框,一個面板。在這里,分別將按鈕設置為建立主機按鈕,暫停/繼續(xù)按鈕,幫助按鈕,退出按鈕,發(fā)送按鈕,還有一個隱藏按鈕,文本框用來輸入主機的IP,幫助按鈕則用來幫助用戶了解游戲的使用,發(fā)送按鈕則用來互通玩家的信息,另外,這些按鈕和文本框全都被加載到了面板中,而面板又被添加到了窗口中。5.1.2服務器模型ServerModel類的實現(xiàn)其具體實施流程如圖5-1所示:圖5-1游戲建立及信息輸出流程圖5.1.3子彈屬性bullet類的實現(xiàn) bullet類描繪了子彈的具體實現(xiàn),及子彈打中各種不同物體時做出的不同反映5.1.4轟炸類bomb類的實現(xiàn) 該類主要描繪了子彈打中其他物體時所產生的效果,下面是轟炸類的一些參數(shù)和具體方法://設置轟炸后產生的圖形是一個三種顏色的圓publicvoiddraw(Graphicsg){ g.setColor(Color.red); g.fillOval(xPos-outer,yPos-outer,2*outer,2*outer); g.setColor(Color.orange); g.fillOval(xPos-middle,yPos-middle,2*middle,2*middle); g.setColor(Color.yellow); g.fillOval(xPos-inner,yPos-inner,2*inner,2*inner); }//判斷出現(xiàn)什么情況時,獲得轟炸:if(size.equals("big")){ inner=6;middle=9;outer=14; jumpDistance=8; animationTime=6; }elseif(size.equals("small")){ inner=2;middle=4;outer=7; jumpDistance=4; animationTime=4; }其實現(xiàn)圖如圖5-2所示:圖5-2子彈轟炸圖5.1.5面板類drawingPanel類的實現(xiàn) drawingPanel類初始化了一個面板,向該面板中添加了一個游戲產地,并在該面板中顯示了當前的敵人炸彈人剩余量及關數(shù),另外還繪制了或的勝利時的場景。 5.1.6敵人炸彈人enemy類的實現(xiàn) enemy類設置了敵人坎坷的共同屬性,各自的特殊屬性,敵人的炸彈人在一個隨機的有限時間內保持著向一個方向行走,在有限的時間結束后,將改變一個新的方向。敵人炸彈人決定是否發(fā)射一顆子彈,這子彈的方向也是隨機的,另外,此類描繪了子彈發(fā)射的方向和具體的位置,確定了子彈的速度,以及如何向該類中添加子彈,該類可以檢查是否與地圖的邊緣相碰,若是,則獲得一個新的方向,若與其他物體相碰,則相應的長生一些其他效果,另外,敵人炸彈人被子彈打中了也要做出一些相應的反應。5.1.7游戲關數(shù)level類 Lever類定義了獲得勝利的場景參數(shù),在每次進入更高一關時,都增加了游戲的難度,并清理了當前關的所有東西,給出了如何加載各關的方法,圖片,并在各關中給出了常人敵人炸彈人的方法,如果進入下一關時,則從設所有的一切。5.1.8游戲者player類的實現(xiàn)Player類設置了玩家的位置和圖片,當玩家按了“fire”鍵,并且條件是滿足的,則創(chuàng)建了一顆子彈,并給出了子彈的速度,位置,能量,在游戲中可以通過方向鍵準確的控制玩家炸彈人的上,下,左,右的移動,并給出玩家炸彈人與地圖邊緣相撞,和其他別的物體相撞的反應。并在游戲中可以精確的確定游戲玩家的位置。在游戲中,可以給出玩家的信息,得分,當玩家被擊中時,則將其移除,此時玩家生命數(shù)減少一條。5.2客戶端的類5.2.1子彈屬性bullet類的實現(xiàn)bullet類描繪了子彈的具體畫法為publicvoiddraw(Graphicsg){ g.setColor(Color.lightGray); if(direction==0||direction==1) g.fillRect(xPos-1,yPos-4,3,9); if(direction==2||direction==3) g.fillRect(xPos-4,yPos-1,9,3); gameModel.removeActor(this); }通過方法publicStringgetType(){returnType;}獲得子彈類的參數(shù)。其實現(xiàn)流程如圖5-3所示:圖5-3子彈繪制流程圖5.2.2客戶端模型ClientModel類的實現(xiàn)ClientModel類實現(xiàn)了ActionListener監(jiān)聽器,通過如下方法連接主機publicvoidconnectServer(){ addMessage("正在連接主機"); try{ serverIP=view.IPfield.getText(); InetAddressaddr=InetAddress.getByName(serverIP); clientSocket=newSocket(addr,4321);out=newPrintWriter(clientSocket.getOutputStream(),true);in=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));}catch(Exceptione){t.stop();System.out.println(e);addMessage("連接中出現(xiàn)錯誤,請確認1.輸入的IP是否正確,2.主機端已存在");return;}當載入成功后,設置serverConnected=true。這樣就連接上了主機。//當一些事情出錯了,刪掉創(chuàng)建的東西 try{out.close();in.close(); clientSocket.close(); }catch(Exceptionexc){System.out.println(exc);}//增加游戲中的一個實力物體publicvoidaddActor(Actoractor){ for(inti=0;i<drawingList.length;i++) if(drawingList[i]==null){ drawingList[i]=actor; break; } }//刪除游戲中的一個實力物體publicvoidremoveActor(Actoractor){ for(inti=0;i<drawingList.length;i++) if(drawingList[i]==actor){ drawingList[i]=null; break; }其具體實現(xiàn)流程如圖5-4所示:圖5-4客戶機模型流程圖5.2.3面板類drawingPanel類的實現(xiàn)drawingPanel類初始化了一個面板,向該面板中添加了一個游戲產地,并在該面板中顯示了當前的敵人炸彈人剩余量及關數(shù),另外還繪制了或的勝利時的場景。5.2.4說明控制類instructionHandler類的實現(xiàn)instructionHandler類中實現(xiàn)的具體方法如下://如果是L開頭則表示加載一副地圖,L后面的數(shù)字即為地圖的關數(shù)if(perInstruction.substring(0,1).equals("L")){level.loadLevel(gameModel,Integer.parseInt(perInstruction.substring(1,2))); return;}//如果是W開頭則表示改變了普通的墻if(perInstruction.substring(0,1).equals("w")){for(intk=0;k<gameModel.drawingList.length;k++){ if(gameModel.drawingList[k]!=null){if(gameModel.drawingList[k].getxPos()==xPos&&gameModel.drawingList[k].getyPos()==yPos){ walltempWall=newwall(xPos,yPos,4,gameModel); tempWall.shape=shape; gameModel.drawingList[k]=tempWall; } } }如果是以S開頭則表示鋼墻發(fā)生了變化,具體實現(xiàn)方法和普通墻的改變方法一樣。//如果以b開頭,則表示大本營被毀if(perInstruction.substring(0,1).equals("b")){gameModel.drawingList[4]=newnormalObject(260,498,gameModel,"base",1);}//如果以t開頭,則顯示子彈if(perInstruction.substring(0,1).equals("t")){gameModel.addActor(newbullet(xPos,yPos,gameModel,direction))}//如果以o開頭,則顯示大本營if(perInstruction.substring(0,1).equals("o")){gameModel.addActor(newbomb(xPos,yPos,size,gameModel));}//如果以i開頭,則顯示炸彈人隱身if(perInstruction.substring(0,1).equals("i")){gameModel.addActor(newshield(xPos,yPos,gameModel));}//如果以a開頭,則顯示GAMEOVER!想再玩一次嗎(y/n)?if(perInstruction.substring(0,1).equals("a")){ if(!gameModel.gameOver){ gameModel.addMessage("GAMEOVER!想再玩一次嗎(y/n)?"); gameModel.gameOver=true; } }//如果以x開頭,則顯示玩家暫?;蚶^續(xù)游戲if(perInstruction.substring(0,1).equals("x")){ inttemp=Integer.parseInt(perInstruction.substring(1,2)); if(temp==0){ if(gameModel.gamePaused){ gameModel.addMessage("主機端玩家取消了暫停"); gameModel.gamePaused=false;} }else{if(!gameModel.gamePaused){ gameModel.addMessage("主機端玩家暫停了游戲"); gameModel.gamePaused=true; } }其具體實現(xiàn)流程如圖5-5所示:圖5-5handleInstruction類流程圖5.3服務器類結構圖圖5-6炸彈人大戰(zhàn)游戲服務器端類結構圖5.4客戶端類結構圖圖5-7炸彈人大戰(zhàn)游戲客戶端類結構圖5.5炸彈人大戰(zhàn)游戲的場景結構流程游戲啟動時,ServerModel類負責創(chuàng)建主機,等待客戶機的參與,接著客戶端ClientModel類負責創(chuàng)建與主機的鏈接,鏈接上之后,閃屏,drawingPanel類負責創(chuàng)建窗口視圖,接著ServerView類負責創(chuàng)建主機圖標信息,而ClientView類負責創(chuàng)建客戶端圖標信息,主機使用grass類負責創(chuàng)建草坪,river類創(chuàng)建河流,然后分別用Steelwall類、Ticker類、wall類創(chuàng)建各自的鋼墻,時間信息,普通的墻,主機用ServerControler創(chuàng)建對話,而客戶機用ClientControler創(chuàng)建對話,base類負責創(chuàng)建大本營。第6章游戲測試6.1測試方法測試,通常有兩種方式:單元測試和組裝測試。對本系統(tǒng)著重單元測試。單元測試中通常使用白盒測試法,也就是根據(jù)程序的內部處理邏輯來設計測試用例。白盒測試法主要的方法有:語句覆蓋,條件覆蓋,判定覆蓋,判定-條件覆蓋,條件組合覆蓋,路徑覆蓋,本系統(tǒng)根據(jù)白盒測試法來設計測試用例。6.2部分測試用例6.2.1系統(tǒng)啟動測試表6-1啟動測試測試用例1描述測試游戲成功鏈接測試方法雙擊游戲的打包文件期望結果啟動成功,看到系統(tǒng)主界面測試結果(正確或錯誤)正確測試人Date:6.2.2子彈發(fā)射測試表6-2子彈發(fā)射測試測試用例2描述測試子彈能否發(fā)射,及響應反映測試方法點擊S鍵,子彈發(fā)射鍵期望結果成功發(fā)射子彈并打中不同物體產生相應效果測試結果(正確或錯誤)正確測試人Date:6.2.3玩家移動測試表6-3玩家移動測試測試用例3描述測試玩家移動的情況測試方法點擊方向鍵移動,看移動是否成功期望結果炸彈人可以移動測試結果(正確或錯誤)正確測試人Date:6.2.4信息發(fā)送測試表6-4信息發(fā)送測試測試用例4描述測試信息發(fā)送的接收情況測試方法輸入信息,按Enter鍵發(fā)送,看移動是否成功期望結果另一玩家收到信息測試結果(正確或錯誤)正確測試人Date:

溫馨提示

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

評論

0/150

提交評論