




已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java桌面游戲爭(zhēng)霸的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文目 錄1 引言11.1 課題的研究背景與意義11.2Java語(yǔ)言的特點(diǎn)和及其與游戲的結(jié)合11.2.1Java語(yǔ)言的特點(diǎn)11.2.2Java與網(wǎng)絡(luò)的結(jié)合21.3可行性的分析31.3.1技術(shù)可行性31.3.2經(jīng)濟(jì)可行性41.3.3操作可行性41.3.4法律可行性42 需求分析52.1 系統(tǒng)初步分析52.1.1用戶(hù)需求分析52.1.2功能需求分析52.1.3系統(tǒng)的可靠性和可用性需求分析62.2 數(shù)據(jù)流分析63總體設(shè)計(jì)73.1 系統(tǒng)開(kāi)發(fā)73.1.1系統(tǒng)開(kāi)發(fā)的原則73.1.2系統(tǒng)設(shè)計(jì)階段73.1.3結(jié)構(gòu)設(shè)計(jì)階段94 詳細(xì)設(shè)計(jì)144.1核心包的設(shè)計(jì)144.1.1Card類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):144.1.2Continent類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):154.1.3Mission類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):164.1.4Country類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):164.1.5Player類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):174.1.6Statistic類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):184.2本地翻譯包的設(shè)計(jì)194.2.1TranslationBoudle類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)194.2.2MapTranslator類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)204.3網(wǎng)絡(luò)包的設(shè)計(jì)224.4人工智能包的設(shè)計(jì)254.5其他工具類(lèi)的設(shè)計(jì)284.6游戲界面的設(shè)計(jì)305 用戶(hù)使用手冊(cè)375.1 系統(tǒng)環(huán)境說(shuō)明375.2 系統(tǒng)簡(jiǎn)介375.2.1 系統(tǒng)特點(diǎn)375.2.2 操作方法375.3 游戲需要改進(jìn)的地方38結(jié) 論39參 考 文 獻(xiàn)40致 謝411 引 言1.1 課題的研究背景與意義隨著計(jì)算機(jī)日益普及,計(jì)算機(jī)已然成為人們?nèi)粘I畹囊徊糠值慕裉?,?jì)算機(jī)游戲也越來(lái)越成為人們生活中不可或缺的元素。游戲可以簡(jiǎn)單地理解為調(diào)節(jié)人們生活節(jié)奏和緩解人們生活壓力的一種手段。現(xiàn)在理解的游戲基本意義都是娛樂(lè)性質(zhì)較濃,要有特定的行為模式,遵循一定規(guī)則以達(dá)到游戲者目的的行動(dòng)。游戲的最初目的就是讓游戲者(玩家)在游戲中得到放松。游戲一直存在于人類(lèi)活動(dòng)中,如今定義的游戲從早期的猜謎游戲,發(fā)展到如今的單機(jī)RPG游戲,網(wǎng)絡(luò)游戲等,已經(jīng)升華為更高級(jí)別意義上的娛樂(lè)活動(dòng),對(duì)人們的感官刺激也越發(fā)強(qiáng)烈,得到的樂(lè)趣也更多。而對(duì)于編寫(xiě)游戲而言,Java終于變得足夠成熟了(Java的語(yǔ)言特性和其與游戲的結(jié)合請(qǐng)見(jiàn)下一小節(jié))。它現(xiàn)在是一種開(kāi)發(fā)能夠在多種平臺(tái)上運(yùn)行的中小型游戲的很好的方式。此外,Java支持和其他的庫(kù)一起工作,而且它的速度變得越來(lái)越快。Java并不是以游戲編程為目的而被開(kāi)發(fā)的,事實(shí)上,游戲編程可能是Java創(chuàng)造者心中的最后一個(gè)目標(biāo)。在過(guò)去,妨礙Java發(fā)展的是它的運(yùn)行環(huán)境;瀏覽器和Java類(lèi)庫(kù)一起從本質(zhì)上決定了Java應(yīng)該用來(lái)寫(xiě)哪種類(lèi)型的應(yīng)用程序,而高速的游戲和圖象則不在其中。這給Java帶來(lái)了不好的影響,因?yàn)槿藗冏⒁獾牟皇钦Z(yǔ)言,而是它的運(yùn)行環(huán)境?,F(xiàn)在,瀏覽器已經(jīng)不能控制一切了,Java作為游戲編程語(yǔ)言的另一個(gè)機(jī)會(huì)到來(lái)了。Java在過(guò)去有一點(diǎn)超前于它的時(shí)代,當(dāng)時(shí)市場(chǎng)的動(dòng)力落后于Java,但是現(xiàn)在Java可以而且已經(jīng)取得成功。據(jù)悉,中國(guó)民族網(wǎng)絡(luò)游戲出版工程將在5年內(nèi)出版100種大型民族網(wǎng)絡(luò)游戲,總投資預(yù)計(jì)超過(guò)3億元。信息產(chǎn)業(yè)部已將網(wǎng)絡(luò)游戲通用引擎研究及示范產(chǎn)品納入國(guó)家“863計(jì)劃”,這是中國(guó)首次將網(wǎng)絡(luò)游戲技術(shù)納入國(guó)家科技計(jì)劃。文化部也向國(guó)內(nèi)12家在網(wǎng)絡(luò)游戲業(yè)的實(shí)力廠(chǎng)商首批頒發(fā)了網(wǎng)絡(luò)文化經(jīng)營(yíng)許可證,加大對(duì)網(wǎng)絡(luò)游戲的監(jiān)管力度,進(jìn)口游戲?qū)彶橹疲拗茋?guó)內(nèi)對(duì)國(guó)外的受理措施??萍疾恐贫萍及l(fā)展規(guī)劃,將把網(wǎng)絡(luò)游戲納入現(xiàn)代服務(wù)業(yè)并加以扶持。政府態(tài)度和政策都是一種信號(hào),表明2005年對(duì)本土網(wǎng)絡(luò)游戲的扶持力度將加大;國(guó)內(nèi)游戲廠(chǎng)商將可獲得發(fā)展的核心技術(shù)平臺(tái);政策有利于保護(hù)中國(guó)游戲軟件的自主知識(shí)產(chǎn)權(quán);這為網(wǎng)絡(luò)游戲發(fā)展創(chuàng)造了良好的政策環(huán)境。而Java的創(chuàng)建者把Java稱(chēng)為“網(wǎng)絡(luò)編程語(yǔ)言”,且由于JAVA游戲一般來(lái)說(shuō)簡(jiǎn)單有趣,并且對(duì)用戶(hù)硬件要求極小,所以JAVA游戲通常對(duì)85%的計(jì)算機(jī)用戶(hù)都有吸引力。1.2 Java語(yǔ)言的特點(diǎn)和及其與游戲的結(jié)合1.2.1 Java語(yǔ)言的特點(diǎn)Java能夠取得如此的成功,是因?yàn)樗谠O(shè)計(jì)時(shí)的目標(biāo)就定位在要解決當(dāng)今程序員們所面臨的眾多問(wèn)題。Java的基本目標(biāo)之一就是要提高生產(chǎn)率。生產(chǎn)率來(lái)源于許多方面,但是Java希望在語(yǔ)言方面相對(duì)于它的前輩有明顯的提高,從而為程序員提供更大的便利。1.系統(tǒng)易于表達(dá)、易于理解被設(shè)計(jì)用來(lái)適應(yīng)問(wèn)題的“類(lèi)”,在表達(dá)問(wèn)題的能力上顯得更強(qiáng)。這意味著當(dāng)你編寫(xiě)代碼時(shí),你是在用問(wèn)題空間的術(shù)語(yǔ),而不是計(jì)算機(jī)也就是解空間的術(shù)語(yǔ),來(lái)描述解決方案??梢杂酶邔拥母拍顏?lái)處理問(wèn)題,并且只用一行代碼就可以做更多的事。易于表達(dá)所帶來(lái)的另一個(gè)好處就是易于維護(hù),維護(hù)在程序生命周期中所占的成本比例極大。如果程序易于理解,那么他必定易于維護(hù)。同時(shí),這也降低了創(chuàng)建和維護(hù)文檔的費(fèi)用。2.類(lèi)庫(kù)的巨大影響力創(chuàng)建程序最快捷的方式就是使用已經(jīng)編寫(xiě)好的代碼:類(lèi)庫(kù)。Java的主要目標(biāo)之一就是要使類(lèi)庫(kù)更易于使用。這是通過(guò)將類(lèi)庫(kù)轉(zhuǎn)型為新的數(shù)據(jù)類(lèi)型來(lái)實(shí)現(xiàn)的,因此,引入類(lèi)庫(kù)意味著在語(yǔ)言中添加了新的數(shù)據(jù)類(lèi)型。因?yàn)镴ava編譯器會(huì)照管類(lèi)庫(kù)的使用方式確保正確地初始化和回收垃圾,并保證其他方法被正確地調(diào)用,因此,你只需專(zhuān)注于你想讓類(lèi)庫(kù)做些什么,而不必關(guān)心應(yīng)如何去做。3.錯(cuò)誤處理在C語(yǔ)言中,錯(cuò)誤處理一直是一個(gè)聲名狼籍的問(wèn)題,而且經(jīng)常被忽視經(jīng)常只能靠上帝保佑了。如果你在構(gòu)建一個(gè)大型的、復(fù)雜的程序,那么沒(méi)有什么比在程序某處暗藏了一個(gè)錯(cuò)誤,而你卻沒(méi)有任何能夠暗示它在何處的線(xiàn)索更糟糕的事情了。Java異常處理便是一種能夠確保錯(cuò)誤必須被報(bào)告,而且對(duì)此必須有所響應(yīng)的機(jī)制。4.大型程序設(shè)計(jì)許多傳統(tǒng)語(yǔ)言在程序大小和復(fù)雜度方面都有內(nèi)置的限制。例如,BASIC可能對(duì)某類(lèi)問(wèn)題的解決能力非常強(qiáng),可以快速地創(chuàng)建解決方案,但是如果程序長(zhǎng)度超過(guò)數(shù)頁(yè),或者超出該語(yǔ)言正常的題域之外,它就會(huì)像“在非常粘稠的液體中游泳”。它沒(méi)有明確的界線(xiàn)來(lái)表示何時(shí)你所使用的語(yǔ)言會(huì)導(dǎo)致最終的失敗,即使有這樣的界線(xiàn),你也會(huì)忽視它。你總不能說(shuō):“我的BASIC程序太大了,我不得不用C來(lái)重寫(xiě)它!”相反,你會(huì)試著將幾行代碼硬塞進(jìn)去,以便在程序中增加新功能。因此,不知不覺(jué)中,你就付出了額外的開(kāi)銷(xiāo)。Java具備編寫(xiě)大型程序的能力也就是說(shuō),它消除了小型程序和大型程序之間的復(fù)雜度界線(xiàn)。在編寫(xiě)“hello,world”風(fēng)格的小應(yīng)用程序時(shí),你當(dāng)然不必使用OOP,但是當(dāng)你需要用到時(shí),這些功能隨手可得。而且,對(duì)小型程序和大型程序,編譯器都會(huì)一視同仁地、積極地找出因bug而產(chǎn)生的錯(cuò)誤。1.2.2 Java與網(wǎng)絡(luò)的結(jié)合Java不僅是一種功能強(qiáng)大的、安全的、跨平臺(tái)的、國(guó)際化的編程語(yǔ)言,而且它還在不斷地被擴(kuò)展,以提供更多的 語(yǔ)言功能和類(lèi)庫(kù),能夠優(yōu)雅地處理在傳統(tǒng)編程語(yǔ)言中很難解決的問(wèn)題,例如線(xiàn)程、數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)、網(wǎng)絡(luò)編程和分部式計(jì)算。Java是通過(guò)applet以及使用Java Web Start來(lái)進(jìn)行客戶(hù)端編程的。Applet是只在Web瀏覽中器運(yùn)行的小程序,它是作為網(wǎng)頁(yè)的一部分而自動(dòng)下載的。當(dāng)applet被激活時(shí),它便開(kāi)始執(zhí)行一個(gè)程序,這正是它優(yōu)雅之處:它提供一種分發(fā)軟件的方法,一旦用戶(hù)需要客戶(hù)端軟件時(shí),就自動(dòng)從服務(wù)器把客戶(hù)端軟件分發(fā)給用戶(hù)。用戶(hù)獲取最新版本的客戶(hù)端軟件時(shí)不會(huì)產(chǎn)生錯(cuò)誤,而且也不需要很麻煩的重新安裝過(guò)程。Java的這種設(shè)計(jì)方式,使得程序員只需創(chuàng)建單一的程序,而只要一臺(tái)計(jì)算機(jī)有瀏覽器,且瀏覽器具有內(nèi)置的Java解釋器,那么這個(gè)程序就可以自動(dòng)在這臺(tái)計(jì)算機(jī)上運(yùn)行。由于Java是一種成熟的編程語(yǔ)言,所以在提出對(duì)服務(wù)器的請(qǐng)求之前和之后,可以在客戶(hù)端盡可能多地多做些事情。例如,不必跨網(wǎng)絡(luò)地發(fā)送一張請(qǐng)求表單來(lái)檢查自己是否填寫(xiě)了錯(cuò)誤的日期或其他參數(shù),客戶(hù)端計(jì)算機(jī)就可以快速地標(biāo)出錯(cuò)誤數(shù)據(jù),而不用等待服務(wù)器作出標(biāo)記并給你傳回圖片。這不僅立即就獲得了高速度和快速的響應(yīng)能力,而且也降低了網(wǎng)絡(luò)流量和服務(wù)器負(fù)載,從而不會(huì)使整個(gè)Internet的速度都慢下來(lái)。Java applet勝過(guò)腳本語(yǔ)言程序的優(yōu)勢(shì)之一就是,它是以被編譯過(guò)的形式存在的,因此其源代碼對(duì)客戶(hù)端來(lái)說(shuō)是不可見(jiàn)的。另一方面,雖然反編譯Java applet并不需要花費(fèi)多少力氣,但是隱藏你的代碼通常并不是一個(gè)重要的話(huà)題。有另外兩個(gè)因素很重要。如果編譯過(guò)的applet很大的話(huà),那么就需要額外的時(shí)間去下載它。腳本語(yǔ)言程序只是被作為Web頁(yè)面的一部分文本而集成到了Web頁(yè)面中。這對(duì)Web網(wǎng)站的響應(yīng)能力來(lái)說(shuō)很重要。另一個(gè)因素是非常重要的“學(xué)習(xí)曲線(xiàn)”問(wèn)題。如果你是一個(gè)Visual BASIC程序員,那么轉(zhuǎn)而學(xué)習(xí)VBScript可能是最快的解決方案,而且由于它或許能夠解決大多數(shù)典型的客戶(hù)/服務(wù)器問(wèn)題,所以你可能很難對(duì)學(xué)習(xí)Java報(bào)以公正的態(tài)度。如果你已經(jīng)對(duì)腳本語(yǔ)言很有經(jīng)驗(yàn)了,那么你在考慮使用Java之前,應(yīng)該先看看JavaScript是否滿(mǎn)足你的要求,這樣對(duì)你會(huì)很有好處,因?yàn)樗鼈兡軌蚋奖愕貪M(mǎn)足你的要求,而且使你更具生產(chǎn)力。Java引起人們的注意很大程度上始于applet。Java確實(shí)是一種通用的編程語(yǔ)言,至少在理論上可以解決各種其他語(yǔ)言能夠解決的問(wèn)題。正像前面指出的那樣,可能存在其他更有效的方式去解決客戶(hù)/服務(wù)器問(wèn)題。當(dāng)你離開(kāi)applet的競(jìng)技場(chǎng)時(shí),你便步入了通用應(yīng)用系統(tǒng)的世界,這里的系統(tǒng)都是獨(dú)立運(yùn)行的,不需要瀏覽器,就像其他普通程序一樣。在這里,Java的威力不僅在于它的可移植性,還包括它的可編程性。Java已經(jīng)具備了許多功能,讓你創(chuàng)建健壯的程序,而花費(fèi)的時(shí)間比使用Java之前的任何編程語(yǔ)言都更少。不過(guò),這是好壞參半的事。為Java帶來(lái)的改進(jìn),所付出的代價(jià)是降低了執(zhí)行速度。像任何語(yǔ)言一樣,Java也具有不適合解決某類(lèi)問(wèn)題的天生的限制。然而,Java是快速進(jìn)化的語(yǔ)言,而且每當(dāng)發(fā)布一個(gè)新版本時(shí),它都會(huì)因?yàn)槟軌蚪鉀Q更多的問(wèn)題而變得越來(lái)越具有吸引力。1.3 可行性的分析可行性研究的目的,就是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問(wèn)題是否能夠解決。要達(dá)到這個(gè)目的,必須分析幾種主要的可能解法的利弊,從而判斷原定的系統(tǒng)規(guī)模和目標(biāo)是否現(xiàn)實(shí),系統(tǒng)完成后所能帶來(lái)的效益是否大到值得投資開(kāi)發(fā)這個(gè)系統(tǒng)的程度。因此,可行性研究實(shí)質(zhì)上是要進(jìn)行一次大大壓縮簡(jiǎn)化了的系統(tǒng)分析和設(shè)計(jì)的過(guò)程,也就是在較高層次上以較抽象的方式進(jìn)行的系統(tǒng)分析和設(shè)計(jì)的過(guò)程。1.3.1 技術(shù)可行性本游戲是在Windows XP環(huán)境下開(kāi)發(fā)的,一般的機(jī)器配置就可以了,對(duì)機(jī)器本身沒(méi)有太高的要求,一般當(dāng)前學(xué)?;騻€(gè)人電腦完全可滿(mǎn)足要求,環(huán)境只需裝上jdk 1.4或以上版本就行了,Java是現(xiàn)在全球最時(shí)髦的開(kāi)發(fā)工具之一,它擁有一套龐大且完善的類(lèi)庫(kù),內(nèi)置了其他語(yǔ)言需要靠庫(kù)甚至是操作系統(tǒng)才能支持的功能,擁有一個(gè)虛擬機(jī)。NeatBeans IDE 5.5是SUN公司開(kāi)發(fā)的Java可視化集成開(kāi)發(fā)工具,是目前最優(yōu)秀的Java集成開(kāi)發(fā)工具之一。1.3.2 經(jīng)濟(jì)可行性由于本系統(tǒng)使用到的工具一般機(jī)器都具備,使用環(huán)境也很簡(jiǎn)單,開(kāi)發(fā)成本低,本課題研究的內(nèi)容是涉及網(wǎng)絡(luò)的游戲?qū)?zhàn)。當(dāng)今形式下網(wǎng)絡(luò)游戲儼然已經(jīng)成為年輕人最時(shí)興的消費(fèi)方式之一,JAVA一直以來(lái)由于其可以“跨平臺(tái)”以及“一次編譯,到處運(yùn)行”等特點(diǎn),許多人直接它為網(wǎng)絡(luò)編程語(yǔ)言,且由于JAVA游戲一般來(lái)說(shuō)簡(jiǎn)單有趣,并且對(duì)用戶(hù)硬件要求極小,所以JAVA游戲通常對(duì)85%的計(jì)算機(jī)用戶(hù)都有吸引力。且政府態(tài)度和政策都是一種信號(hào),表明2005年對(duì)本土網(wǎng)絡(luò)游戲的扶持力度將加大;國(guó)內(nèi)游戲廠(chǎng)商將可獲得發(fā)展的核心技術(shù)平臺(tái);政策有利于保護(hù)中國(guó)游戲軟件的自主知識(shí)產(chǎn)權(quán);這為網(wǎng)絡(luò)游戲發(fā)展創(chuàng)造了良好的政策環(huán)境。1.3.3 操作可行性由于在整個(gè)系統(tǒng)的開(kāi)發(fā)過(guò)程中從操作簡(jiǎn)便、界面美觀(guān)、靈活實(shí)用的用戶(hù)要求為出發(fā)點(diǎn),界面設(shè)計(jì)時(shí)充分考慮玩家的感受,界面比較直觀(guān),交互性很好,所以操作起來(lái)簡(jiǎn)單明了。1.3.4 法律可行性信息產(chǎn)業(yè)部已將網(wǎng)絡(luò)游戲通用引擎研究及示范產(chǎn)品納入國(guó)家“863計(jì)劃”,這是中國(guó)首次將網(wǎng)絡(luò)游戲技術(shù)納入國(guó)家科技計(jì)劃。文化部也向國(guó)內(nèi)12家在網(wǎng)絡(luò)游戲業(yè)的實(shí)力廠(chǎng)商首批頒發(fā)了網(wǎng)絡(luò)文化經(jīng)營(yíng)許可證,加大對(duì)網(wǎng)絡(luò)游戲的監(jiān)管力度,進(jìn)口游戲?qū)彶橹?,限制?guó)內(nèi)對(duì)國(guó)外的受理措施。科技部制定科技發(fā)展規(guī)劃,將把網(wǎng)絡(luò)游戲納入現(xiàn)代服務(wù)業(yè)并加以扶持。政府態(tài)度和政策都是一種信號(hào),表明2005年對(duì)本土網(wǎng)絡(luò)游戲的扶持力度將加大;國(guó)內(nèi)游戲廠(chǎng)商將可獲得發(fā)展的核心技術(shù)平臺(tái);政策有利于保護(hù)中國(guó)游戲軟件的自主知識(shí)產(chǎn)權(quán);這為網(wǎng)絡(luò)游戲發(fā)展創(chuàng)造了良好的政策環(huán)境。2 需求分析所謂系統(tǒng)分析,就是指在整個(gè)系統(tǒng)開(kāi)發(fā)工程中,解決“做什么”的問(wèn)題,把要解決哪些問(wèn)題,滿(mǎn)足用戶(hù)哪些具體的信息需求調(diào)查分析清楚,從邏輯上或是說(shuō)從信息處理的功能需求上提出系統(tǒng)的方案,即邏輯模型,為下一階段進(jìn)行物理方案設(shè)計(jì),解決怎么辦提供依據(jù)。2.1 系統(tǒng)初步分析2.1.1 用戶(hù)需求分析隨著Internet的發(fā)展,進(jìn)入信息時(shí)代后快速獲得網(wǎng)絡(luò)共享資源成為很簡(jiǎn)單的事情,人們對(duì)互聯(lián)網(wǎng)也有了很大的依賴(lài)性。網(wǎng)絡(luò)的普及化使得原本單人的游戲已經(jīng)不能適應(yīng)人們的需要,廣大的游戲者迫切需要能夠和身在異地的朋友一起享受游戲的樂(lè)趣。在這種環(huán)境下,網(wǎng)絡(luò)游戲應(yīng)運(yùn)而生,越來(lái)越多的游戲者投身到網(wǎng)絡(luò)游戲中。這樣帶來(lái)的問(wèn)題自然成為越來(lái)越多的游戲研究者將研究方向轉(zhuǎn)為網(wǎng)絡(luò)游戲的研究。據(jù)目前的網(wǎng)絡(luò)游戲的調(diào)研來(lái)看,以運(yùn)動(dòng)休閑為主的運(yùn)動(dòng)類(lèi)游戲正在受到越來(lái)越多玩家的支持和愛(ài)戴。但是此類(lèi)網(wǎng)絡(luò)游戲中,由Java開(kāi)發(fā)的網(wǎng)絡(luò)游戲仍然是一個(gè)空白頁(yè),但是它卻是一個(gè)迫切需要填補(bǔ)的空白頁(yè)。而Java由于其天生的語(yǔ)言特性(請(qǐng)見(jiàn)1.2節(jié)),很適合用于開(kāi)發(fā)網(wǎng)絡(luò)游戲,但由于系統(tǒng)環(huán)境的問(wèn)題使得它一直以來(lái)未能用于游戲開(kāi)發(fā),而近來(lái)由于Java的發(fā)展,它已經(jīng)擺脫了束縛,浮出了游戲開(kāi)發(fā)的水面,若能在網(wǎng)絡(luò)上出現(xiàn)高要求多人互動(dòng)的Java游戲,它將是一項(xiàng)極為偉大的發(fā)展。這也正是現(xiàn)在許多玩家迫切要求的。2.1.2 功能需求分析系統(tǒng)功能的需求指定系統(tǒng)必須提供的服務(wù)。通過(guò)需求分析應(yīng)該劃分出系統(tǒng)必須完成的所有功能。本作的功能模塊主要包括游戲的引擎設(shè)計(jì),游戲的界面設(shè)計(jì)。1.游戲的引擎設(shè)計(jì)的需求分析:游戲引擎是游戲的靈魂,也就是這個(gè)游戲的框架,它的好壞直接決定著游戲的質(zhì)量。它是控制所有游戲功能的主程序,包括畫(huà)面的處理,人工智能的實(shí)現(xiàn),接受玩家的設(shè)置,以及網(wǎng)絡(luò)聯(lián)機(jī)的實(shí)現(xiàn)等等。所以鑒定一個(gè)游戲的好壞,從內(nèi)部設(shè)計(jì)的原因上說(shuō)來(lái),是從游戲的引擎設(shè)計(jì)體現(xiàn)出來(lái)的。一個(gè)游戲的引擎設(shè)計(jì),直接關(guān)系到游戲設(shè)計(jì)的其他方面,諸如游戲的圖形系統(tǒng)、聲音系統(tǒng)及設(shè)計(jì)的物理模塊等等各個(gè)方面。就如一臺(tái)電腦需要CPU一樣,游戲的引擎也是直接牽制著整個(gè)游戲的設(shè)計(jì)。它的主要作用就是處理游戲中的事件,運(yùn)行游戲中的圖象,輸出聲音及畫(huà)面,調(diào)整游戲的節(jié)奏,響應(yīng)玩家的游戲監(jiān)聽(tīng)事件等等。所以,游戲的引擎設(shè)計(jì)是必要的功能模塊,而且游戲的引擎設(shè)計(jì)必須做好,以使得游戲更具有可玩性。游戲程序是一項(xiàng)精度要求很高的程序系統(tǒng),因?yàn)槠浯a利用率很高。一個(gè)實(shí)時(shí)運(yùn)行的最終作品,每秒都會(huì)運(yùn)行成千上萬(wàn)行程序,繪圖事件等都會(huì)以極高的頻率在后臺(tái)等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運(yùn)行不久后可能出現(xiàn)嚴(yán)重錯(cuò)誤,甚至死循環(huán)。因此,其邏輯設(shè)計(jì)應(yīng)當(dāng)相當(dāng)嚴(yán)謹(jǐn),需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計(jì)中。2游戲界面設(shè)計(jì)的需求分析:作為一個(gè)游戲吸引玩家的重要方面,游戲的界面要很漂亮,圖形動(dòng)畫(huà)的設(shè)計(jì)是非常必要的。本作將采用模擬動(dòng)畫(huà)的方式將戰(zhàn)爭(zhēng)展現(xiàn)在玩家眼前。設(shè)計(jì)出豐富的戰(zhàn)爭(zhēng)環(huán)境,游戲中為了美觀(guān),適用性強(qiáng),需要采用外部文件引入的圖片貼圖,而Java中提供了用于處理圖片的功能包,使得解決靜態(tài)或動(dòng)態(tài)、畫(huà)面背景、屏幕刷新的雙緩沖等都有較好的解決方案。2.1.3 系統(tǒng)的可靠性和可用性需求分析可靠性需求定量地指定系統(tǒng)的可靠性。例如,游戲在運(yùn)行過(guò)程中不能頻繁發(fā)生錯(cuò)誤而不得不終止游戲。可用性則與可靠性密切相關(guān),它量化了用戶(hù)可以使用系統(tǒng)的程度。例如,游戲的運(yùn)行必須保證隨時(shí)可以,不能在一段不使用的時(shí)間內(nèi),游戲產(chǎn)生不可預(yù)見(jiàn)的錯(cuò)誤而致無(wú)法運(yùn)行等等。2.2 數(shù)據(jù)流分析數(shù)據(jù)流程分析主要包括對(duì)信息的流動(dòng)、傳遞、處理、存儲(chǔ)等的分析。數(shù)據(jù)流程分析的目的就是要發(fā)現(xiàn)和解決數(shù)據(jù)流通中的問(wèn)題。通過(guò)對(duì)本系統(tǒng)的需求分析,確定了系統(tǒng)的基本功能。整個(gè)系統(tǒng)的數(shù)據(jù)流圖如圖2-1所示: 圖2-1 系統(tǒng)數(shù)據(jù)流程圖3總體設(shè)計(jì)總體設(shè)計(jì)過(guò)程通常由兩個(gè)主要階段組成:系統(tǒng)設(shè)計(jì)階段,確定系統(tǒng)的具體實(shí)現(xiàn)方案;結(jié)構(gòu)設(shè)計(jì)階段,確定軟件結(jié)構(gòu)和功能模塊。3.1 系統(tǒng)開(kāi)發(fā)3.1.1系統(tǒng)開(kāi)發(fā)的原則經(jīng)過(guò)需求分析階段的工作,系統(tǒng)必須“做什么”已經(jīng)清楚了,現(xiàn)在是決定“怎么做”的時(shí)候了??傮w設(shè)計(jì)的基本目的就是回答“概括地說(shuō),系統(tǒng)應(yīng)該如何實(shí)現(xiàn)?”這個(gè)問(wèn)題,因此,總體設(shè)計(jì)又稱(chēng)為概要設(shè)計(jì)或初步設(shè)計(jì)。通過(guò)這個(gè)階段的工作將劃分出組成系統(tǒng)的物理元素程序、文件、數(shù)據(jù)庫(kù)、人工過(guò)程和文檔等等,但是每個(gè)物理元素仍然處于黑盒子級(jí),這些黑盒子里的具體內(nèi)容將在以后仔細(xì)設(shè)計(jì)??傮w設(shè)計(jì)階段的另一項(xiàng)重要任務(wù)是設(shè)計(jì)軟件的結(jié)構(gòu),也就是要確定系統(tǒng)中每個(gè)程序是由哪些模塊組成的,以及這些模塊相互間的關(guān)系??傮w設(shè)計(jì)過(guò)程首先尋找實(shí)現(xiàn)目標(biāo)系統(tǒng)的各種不同的方案,需求分析階段得到的數(shù)據(jù)流圖是設(shè)想各種可能方案的基礎(chǔ)。然后從這些供選擇的方案中選取若干合理的方案,為每個(gè)合理的方案都準(zhǔn)備一份系統(tǒng)流程圖,列出組成系統(tǒng)的所有物理元素,進(jìn)行成本/效益分析,并且指定實(shí)現(xiàn)此方案的進(jìn)度計(jì)劃。通常,設(shè)計(jì)出初步的軟件結(jié)構(gòu)后還要多方改進(jìn),從而得到更合理的結(jié)構(gòu),進(jìn)行必要的數(shù)據(jù)庫(kù)設(shè)計(jì),確定測(cè)試要求并且制定測(cè)試計(jì)劃?;谏厦娴臄⑹?,在詳細(xì)設(shè)計(jì)之前先進(jìn)行總體設(shè)計(jì)的必要性:可以站在全局高度上,花較少成本,從較抽象的層次上分析比對(duì)多種可能的系統(tǒng)方案和軟件結(jié)構(gòu),從中選出最佳方案和最合理的軟件結(jié)構(gòu),從而用較低成本開(kāi)發(fā)出較高質(zhì)量的軟件系統(tǒng)。3.1.2 系統(tǒng)設(shè)計(jì)階段系統(tǒng)設(shè)計(jì)階段的主要目的就是確定軟件如何做的問(wèn)題。主要任務(wù)就是確定系統(tǒng)中的大模塊和設(shè)計(jì)方法,確定軟件的功能模塊和模塊的作用,組成,關(guān)系等等。本系統(tǒng)是一款希望可以基于網(wǎng)絡(luò)的多人對(duì)戰(zhàn)游戲,當(dāng)游戲者打開(kāi)游戲,游戲界面打開(kāi),然后玩家可以選擇是進(jìn)行一輪新的游戲,還是選擇接著玩上次沒(méi)玩結(jié)束的游戲(如果先前已經(jīng)玩過(guò)該游戲,但沒(méi)有玩結(jié)束,有事了,并且保存了),只需要選擇載入游戲就可以;玩家還可以選擇是進(jìn)行單機(jī)游戲或是聯(lián)機(jī)游戲,如果選擇網(wǎng)絡(luò)聯(lián)機(jī)玩的話(huà)只需要啟動(dòng)服務(wù)器等待其他玩家加入就可以了;如果選擇了單機(jī)游戲,并選擇了進(jìn)行一輪新的游戲,則游戲會(huì)出現(xiàn)游戲設(shè)置界面,通過(guò)該界面玩家可以設(shè)置游戲的玩家數(shù)量(2-6個(gè))以及游戲的難度,電腦玩家有簡(jiǎn)單智力的和高智力的,然后玩家可以選擇不同的卡片模式和不同的游戲模式(分為統(tǒng)治型、首都型和任務(wù)型),并且玩家可以選擇不同的游戲地圖,游戲的目標(biāo)是統(tǒng)治全世界,當(dāng)玩家設(shè)置好一切后,可以點(diǎn)擊開(kāi)始游戲,則游戲開(kāi)始。游戲開(kāi)始,游戲畫(huà)面是一張被分割成多個(gè)國(guó)家的地圖,每個(gè)玩家可以輪流在地圖上選擇自己的地盤(pán)和軍隊(duì)的布置,而電腦玩家也會(huì)自動(dòng)放置軍隊(duì),當(dāng)每個(gè)國(guó)家都被放上軍隊(duì)后,才可以重復(fù)在一個(gè)國(guó)家放置多余的軍隊(duì),當(dāng)默認(rèn)的所有軍隊(duì)全都放置好,然后玩家就可以開(kāi)始統(tǒng)一全球的戰(zhàn)爭(zhēng)游戲了,而當(dāng)一方的軍隊(duì)侵略另一邊時(shí),游戲程序通過(guò)一定的人工智能算法讓?xiě)?zhàn)爭(zhēng)的雙方分別產(chǎn)生隨機(jī)數(shù),然后進(jìn)行比較,大的一方勝利,而當(dāng)進(jìn)攻者與防守者產(chǎn)生的數(shù)字一樣大時(shí),算是進(jìn)攻失敗,如果進(jìn)攻勝利,則勝者將占領(lǐng)該國(guó)家,并可以選擇留守該國(guó)家的軍隊(duì)數(shù),而等到下一輪到該玩家進(jìn)攻時(shí),可以根據(jù)該玩家在占領(lǐng)的領(lǐng)土來(lái)決定你可以增加多少軍隊(duì),以及你可以獲得的卡片,獲得的卡片可以用來(lái)交換軍隊(duì),最后占領(lǐng)全世界(消滅了其他兩個(gè)玩家)的為勝利者。在游戲過(guò)程中如果玩家突然有事無(wú)法繼續(xù)游戲,本游戲可以保存當(dāng)前游戲狀態(tài),當(dāng)玩家有時(shí)間時(shí)可以接下去游戲,而無(wú)需重新開(kāi)始,玩家也可以將自己的機(jī)器作為服務(wù)器,通過(guò)網(wǎng)絡(luò)與網(wǎng)絡(luò)上的其他玩家一起游戲。本游戲還具有統(tǒng)計(jì)的功能,在你游戲過(guò)程中或則游戲結(jié)束后你可以查看在本局游戲中各個(gè)玩家各個(gè)方面的戰(zhàn)績(jī)的統(tǒng)計(jì)(例如每個(gè)玩家在游戲過(guò)程當(dāng)中所占領(lǐng)的國(guó)家數(shù)、軍隊(duì)數(shù)、摧毀數(shù)、傷亡數(shù)、受到進(jìn)攻的次數(shù)等等),游戲中還設(shè)置了控制臺(tái),玩家可以通過(guò)圖形顯示的按鈕進(jìn)行游戲,也可以通過(guò)命令來(lái)進(jìn)行游戲,在游戲菜單欄的幫助中,玩家可以選擇命令按扭來(lái)顯示出游戲中可用的命令菜單,玩家可以通過(guò)選擇其中的關(guān)于了解本游戲的一些信息。當(dāng)你贏的了游戲,游戲會(huì)告訴你,你勝利了!關(guān)于線(xiàn)程:對(duì)象技術(shù)提供了一種把程序劃分成若干獨(dú)立部分的方式。通常,還需要把程序轉(zhuǎn)換成彼此分離的、能獨(dú)立運(yùn)行的子任務(wù)。每一個(gè)這樣的獨(dú)立子任務(wù)都被稱(chēng)為一個(gè)“線(xiàn)程”。每個(gè)線(xiàn)程都好象是在獨(dú)立運(yùn)行并且有自己的CPU。CPU時(shí)間確實(shí)是通過(guò)某些底層機(jī)制進(jìn)行分配的,不過(guò)你一般不考慮這些,這使得編寫(xiě)多線(xiàn)程程序的任務(wù)變得容易得多了。多線(xiàn)程有多種用途,不過(guò)通常用法是,程序中的某個(gè)部分與一個(gè)特定的事件或資源聯(lián)系在一起,而又不想讓這種聯(lián)系阻礙程序其余部分的運(yùn)行。這時(shí)候,可以創(chuàng)建一個(gè)與這個(gè)事件或者資源相關(guān)聯(lián)的線(xiàn)程,并且讓此線(xiàn)程獨(dú)立于主程序運(yùn)行。使用并發(fā)的最引人矚目的理由之一就是,產(chǎn)生一個(gè)可作出響應(yīng)的用戶(hù)界面。考慮一個(gè)程序,它要執(zhí)行某項(xiàng)強(qiáng)烈需用CPU的計(jì)算,這樣就會(huì)導(dǎo)致用戶(hù)的輸入被忽略,也就無(wú)法作出響應(yīng)。問(wèn)題的實(shí)質(zhì)是:程序需要一邊連續(xù)進(jìn)行計(jì)算,同時(shí)還要把控制權(quán)交給用戶(hù)界面,這樣程序才能響應(yīng)用戶(hù)的操作。并發(fā)還可以用來(lái)優(yōu)化吞吐量。比如,在等待數(shù)據(jù)到達(dá)輸入/輸出端口的同時(shí),可以進(jìn)行其他重要的工作。要是不用線(xiàn)程的話(huà),唯一可行的辦法就是不斷查詢(xún)輸入/輸出端口,這種方法不僅笨拙,而且很困難。線(xiàn)程模型為編程帶來(lái)了便利,它簡(jiǎn)化了在單一程序中同時(shí)交織在一起的多個(gè)操作的處理。在使用線(xiàn)程時(shí),CPU將輪流給每個(gè)線(xiàn)程分配其占用時(shí)間。每個(gè)線(xiàn)程都覺(jué)得自己在一直占用CPU ,但事實(shí)上CPU時(shí)間是劃分成片段分配給了所有線(xiàn)程。例外情況是程序運(yùn)行在具多個(gè)CPU的機(jī)器上,但線(xiàn)程的一大好處是可以使你從這個(gè)層次抽身出來(lái),即代碼不必知道它是運(yùn)行在具有一個(gè)還是多個(gè)CPU的機(jī)器上。所以線(xiàn)程是一種透明的、可擴(kuò)展的程序方法,如果程序運(yùn)行的太慢,為機(jī)器增添一個(gè)CPU就能很容易地加快程序的運(yùn)行速度。多任務(wù)和多線(xiàn)程往往是使用多處理器系統(tǒng)的最合理方式。游戲中將在很多地方用到多線(xiàn)程,像在進(jìn)行網(wǎng)絡(luò)聯(lián)機(jī)時(shí)將會(huì)使用多線(xiàn)程來(lái)是兩個(gè)玩家可以同步進(jìn)行游戲,而圖形界面也通過(guò)多線(xiàn)程同時(shí)進(jìn)行多的程序的進(jìn)行。3.1.3 結(jié)構(gòu)設(shè)計(jì)階段1. 經(jīng)過(guò)系統(tǒng)設(shè)計(jì)階段的思考和實(shí)踐,需要對(duì)功能結(jié)構(gòu)進(jìn)行細(xì)致的劃分。一個(gè)程序的結(jié)構(gòu)設(shè)計(jì)的好壞也是決定其發(fā)展的重要指標(biāo)。對(duì)一個(gè)程序的模塊劃分往往也能使程序設(shè)計(jì)變得簡(jiǎn)單。本游戲的模塊大致分為游戲引擎和用戶(hù)界面兩大模塊而,游戲引擎模塊又分為核心包、ai包、網(wǎng)絡(luò)包、本地翻譯包、游戲控制類(lèi)等等,其功能模塊圖示如下:King游戲 游戲引擎用戶(hù)界面網(wǎng)絡(luò)模塊核心模塊游戲控制模塊AI模塊本地翻譯模塊圖3-1 系統(tǒng)功能模塊結(jié)構(gòu)圖功能模塊介紹:king.engine.core包:其中包括了一些基本核心的類(lèi),例如像表示一個(gè)國(guó)家的Country類(lèi),表示一個(gè)卡片的Card類(lèi),表示一個(gè)版塊的Continent類(lèi),表示一個(gè)玩家的Player類(lèi)以及表示一個(gè)任務(wù)的Mission類(lèi)等等。king.engine.ai包:其中包括了玩家可選擇的簡(jiǎn)單人工智能的電腦玩家和復(fù)雜人工智能的電腦玩家以及不同游戲類(lèi)型的不同玩家的人工智能。king.engine.translation包:其中包括了用于將游戲中的語(yǔ)言根據(jù)計(jì)算機(jī)所處的不同的國(guó)家翻譯成不同的語(yǔ)言的類(lèi)。包:其中包括了將游戲用于網(wǎng)絡(luò)聯(lián)機(jī)玩用到的類(lèi)。游戲控制模塊:主要包含一些我自己定義的一些接口和過(guò)濾器類(lèi)等工具類(lèi)。系統(tǒng)用例圖見(jiàn)下頁(yè):圖3-2 系統(tǒng)用例圖游戲設(shè)置用例圖:圖3-3 游戲設(shè)置用例圖網(wǎng)絡(luò)聯(lián)機(jī)用例圖:圖3-4 網(wǎng)絡(luò)聯(lián)機(jī)游戲用例圖游戲用例圖:圖3-5 游戲用例圖2. 系統(tǒng)的主要UML圖見(jiàn)下頁(yè):圖3-2 Risk類(lèi)的依賴(lài)關(guān)系圖圖3-3 SwingGUIPanel類(lèi)的依賴(lài)關(guān)系圖圖3-4 RikGame類(lèi)的依賴(lài)關(guān)系圖4 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)階段的根本目標(biāo)是確定應(yīng)該怎樣具體地實(shí)現(xiàn)所要求的系統(tǒng),也就是說(shuō),經(jīng)過(guò)這個(gè)階段的設(shè)計(jì)工作,應(yīng)該得出對(duì)目標(biāo)系統(tǒng)的精確描述,從而在編碼階段可以把這個(gè)描述直接翻譯成用某種程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)的程序。詳細(xì)設(shè)計(jì)的結(jié)果基本上決定了最終程序代碼的質(zhì)量。詳細(xì)設(shè)計(jì)的目標(biāo)不僅僅是邏輯上正確地實(shí)現(xiàn)每個(gè)模塊的功能,更重要的是設(shè)計(jì)出的處理過(guò)程應(yīng)該盡可能簡(jiǎn)明易懂。結(jié)構(gòu)程序設(shè)計(jì)技術(shù)是實(shí)現(xiàn)上述目標(biāo)的關(guān)鍵技術(shù),因此是詳細(xì)設(shè)計(jì)的邏輯基礎(chǔ)。4.1 核心包的設(shè)計(jì)游戲中需要經(jīng)常用到的常有名詞有卡片、國(guó)家、任務(wù)、玩家、版塊、統(tǒng)計(jì)資料等等,所以我們由此可以確定這些基本的核心類(lèi):Card、Continent、Country、Mission、Player、Statistic;4.1.1 Card類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):在游戲過(guò)程中某一些國(guó)家中會(huì)有卡片,當(dāng)你沒(méi)占領(lǐng)了這樣的國(guó)家的時(shí)候,你就能獲得卡片,當(dāng)你獲得了幾張放在一起可以交易的卡片的時(shí)候你就可以用卡片換軍隊(duì)了,所以在該類(lèi)中有卡片的名字,所屬?lài)?guó)家等屬性,該類(lèi)的類(lèi)圖如下所示:圖4-1 Card類(lèi)的類(lèi)圖Card類(lèi)的主要代碼如下:public class Card implements Serializable public Card(String n, Country t) name = n; Country = t; public String getName() return name; public Country getCountry() return Country; 4.1.2 Continent類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):游戲中的圖片都是世界地圖,其中包括幾個(gè)洲,這些洲再分成一個(gè)一個(gè)國(guó)家,洲有自己的名字和顏色,并且每個(gè)洲都有它的對(duì)應(yīng)的價(jià)值的軍隊(duì)數(shù),當(dāng)你占領(lǐng)了一個(gè)洲的時(shí)候,當(dāng)下一輪到你進(jìn)攻的時(shí)候,你可以獲得相應(yīng)數(shù)目的軍隊(duì),在其他對(duì)象訪(fǎng)問(wèn)該對(duì)象時(shí),可以獲得它的名字,顏色,價(jià)值軍隊(duì)數(shù)和所屬的玩家,其類(lèi)圖見(jiàn)圖4-2所示:圖4-2 Continent類(lèi)的類(lèi)圖Continent類(lèi)的主要代碼如下:public class Continent implements Serializable public boolean isOwned(Player p) int ownedByPlayer=0;for (int c=0; c territoriesContained.size() ; c+) if ( (Country)territoriesContained.elementAt(c).getOwner() = p ) ownedByPlayer+;if ( ownedByPlayer=territoriesContained.size() ) return true;else return false;if ( ownedByPlayer=territoriesContained.size() ) return true;else return false; 4.1.3 Mission類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):Mission類(lèi)主要用來(lái)代表在不同模式的游戲當(dāng)中你的任務(wù),其類(lèi)圖如下所示:圖4-4 Mission類(lèi)的類(lèi)圖4.1.4 Country類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):在本游戲中就是以國(guó)家為基本單位的,所以它為最核心的類(lèi),大部分其他類(lèi)都需要訪(fǎng)問(wèn)它,其類(lèi)圖如下: 圖4-3 Country類(lèi)的類(lèi)圖其中該類(lèi)通過(guò)其構(gòu)造函數(shù)構(gòu)造一個(gè)任務(wù)對(duì)象,傳遞的參數(shù)有:任務(wù)要消滅的敵人,需要占領(lǐng)的的國(guó)家數(shù),在一個(gè)版塊上需要的最少軍隊(duì)數(shù),第一個(gè)需要占領(lǐng)的國(guó)家,第二個(gè)需要占領(lǐng)的國(guó)家,第三個(gè)需要占領(lǐng)的國(guó)家以及任務(wù)的描述,其構(gòu)造函數(shù)代碼如下: public Mission(Player p, int noc, int noa, Continent c1, Continent c2, Continent c3, String d) player = p;noofcountries = noc;noofarmies = noa;con1 = c1;con2 = c2;con3 = c3;discription = d; 4.1.5 Player類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):玩家用來(lái)代表一個(gè)玩家對(duì)象,該類(lèi)也是游戲程序中所要用到的最基本的類(lèi),其中玩家的屬性有:名字,顏色,玩家任務(wù),玩家類(lèi)型等,為了后面的統(tǒng)計(jì)功能的實(shí)現(xiàn),還在其中增加了已經(jīng)消滅的敵人向量,所擁有的卡片,所擁有的版塊數(shù)等等,為了實(shí)現(xiàn)網(wǎng)絡(luò)聯(lián)機(jī)的功能,還增加了玩家的網(wǎng)絡(luò)地址等等。而玩家類(lèi)中有一些重要的方法,像在后面要實(shí)現(xiàn)卡片交易,必要能獲得玩家所擁有的卡片,還要判斷一下玩家多擁有的卡片是否可以進(jìn)行交易,以及為了實(shí)現(xiàn)網(wǎng)絡(luò)聯(lián)機(jī)要統(tǒng)計(jì)功能,必須要獲得一些統(tǒng)計(jì)數(shù)據(jù)和玩家的網(wǎng)絡(luò)地址,具體代碼如下: public Card takeCard() Card c=(Card)cardsOwned.firstElement();cardsOwned.removeElementAt(0); return c; public void tradeInCards(Card card1, Card card2, Card card3) int noaFORcard = 2;/ 看看你是否可以從擁有的國(guó)家中獲得額外的軍隊(duì)if (territoriesOwned.contains( card1.getCountry() ) ) (Country)card1.getCountry().addArmies(noaFORcard); currentStatistic.addReinforcements(noaFORcard);else if (territoriesOwned.contains( card2.getCountry() ) ) (Country)card2.getCountry().addArmies(noaFORcard); currentStatistic.addReinforcements(noaFORcard);else if (territoriesOwned.contains( card3.getCountry() ) ) (Country)card3.getCountry().addArmies(noaFORcard); currentStatistic.addReinforcements(noaFORcard);cardsOwned.remove(card1);cardsOwned.remove(card2);cardsOwned.remove(card3);cardsOwned.trimToSize(); public void addPlayersEliminated(Player p) playersEliminated.add(p); public Vector getPlayersEliminated() return playersEliminated; 4.1.6 Statistic類(lèi)的設(shè)計(jì)與實(shí)現(xiàn):統(tǒng)計(jì)類(lèi)主要是用來(lái)實(shí)現(xiàn)游戲的統(tǒng)計(jì)功能而設(shè)計(jì)的類(lèi),每個(gè)玩家擁有一個(gè)統(tǒng)計(jì)向量用來(lái)記錄一些數(shù)據(jù),給類(lèi)里面只要一個(gè)包含記錄各種數(shù)據(jù)的整形數(shù)組statistic屬性,統(tǒng)計(jì)數(shù)據(jù)有國(guó)家數(shù),軍隊(duì)數(shù),毀滅數(shù),傷亡數(shù),增強(qiáng)過(guò)程,大陸數(shù),國(guó)家數(shù),進(jìn)攻次數(shù),撤退次數(shù),勝利次數(shù)等等,該類(lèi)的類(lèi)圖如下所示:圖4-5 Statistic類(lèi)的類(lèi)圖其中的重要方法有結(jié)束一輪進(jìn)攻進(jìn)行統(tǒng)計(jì)endGoStatistics(int a, int b, int c, int d),向量中其他一些數(shù)據(jù)的計(jì)算方法,具體代碼如下:statistics向量中0位置記錄國(guó)家數(shù),1記錄軍隊(duì)數(shù),2記錄毀掉數(shù),3記錄傷亡數(shù),4記錄增強(qiáng)數(shù),5記錄大陸數(shù),6記錄帝國(guó)數(shù),7記錄進(jìn)攻次數(shù),8記錄撤退次數(shù),9記錄勝利的次數(shù),10記錄戰(zhàn)勝次數(shù),11記錄受到進(jìn)攻的次數(shù): public void endGoStatistics(int a, int b, int c, int d) statistics0 = a;statistics1 = b;statistics5 = c;statistics6 = d; public void addReinforcements(int a) statistics4 = statistics4 + a; public void addKill() statistics2+; public void addCasualty() statistics3+; public void addAttack() statistics7+; public void addAttacked() statistics11+; public void addRetreat() statistics8+; public void addCountriesWon() statistics9+; public void addCountriesLost() statistics10+; 4.2 本地翻譯包的設(shè)計(jì)本包的設(shè)計(jì)是為了本游戲的國(guó)際化,在游戲過(guò)程中可以通過(guò)本包中的類(lèi)實(shí)現(xiàn)語(yǔ)言的本地化,本包中包括兩個(gè)類(lèi):TranslationBundle和MapTranslator。4.2.1 TranslationBoudle類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)該類(lèi)主要是用來(lái)獲得編寫(xiě)的資源包(這指語(yǔ)言包),然后該類(lèi)可以通過(guò)Java API中的一些方法獲得該游戲所處系統(tǒng)的語(yǔ)言環(huán)境,然后將游戲中的語(yǔ)言變換成本地語(yǔ)言;該類(lèi)中主要用到了java.util.ResourceBundle類(lèi),資源包包含特定于語(yǔ)言環(huán)境的對(duì)象。當(dāng)程序需要一個(gè)特定于語(yǔ)言環(huán)境的資源時(shí)(如 String),程序可以從適合當(dāng)前用戶(hù)語(yǔ)言環(huán)境的資源包中裝入它。以這種方式可以編寫(xiě)很大程度上獨(dú)立于用戶(hù)語(yǔ)言環(huán)境的程序代碼,它將資源包中大部分(如果不是全部)特定于語(yǔ)言環(huán)境的信息隔離開(kāi)來(lái)。 這就使您所編寫(xiě)的程序可以: 輕松地本地化或翻譯成不同的語(yǔ)言 一次處理多個(gè)語(yǔ)言環(huán)境 以后可以輕松地進(jìn)行修改,支持更多的語(yǔ)言環(huán)境 資源包屬于這樣的系列,其成員共享一個(gè)公共的基本名稱(chēng),但是名稱(chēng)中還有標(biāo)識(shí)其語(yǔ)言環(huán)境的其他組件。例如,某個(gè)資源包系列的基本名稱(chēng)可能是 MyResources。該系列應(yīng)該有一個(gè)默認(rèn)資源包,其名稱(chēng)與其系列名相同( MyResources),并且如果不支持指定的語(yǔ)言環(huán)境,則此資源包應(yīng)該用作最后的手段。然后,此系列可根據(jù)需要提供特定于語(yǔ)言環(huán)境的成員,例如一個(gè)名為 MyResources_de 的德語(yǔ)資源包。 某個(gè)系列中的每個(gè)資源包都包含相同的項(xiàng),但是已經(jīng)針對(duì)該資源包所代表的語(yǔ)言環(huán)境翻譯了各項(xiàng)。例如,MyResources 和 MyResources_de 可能有用在取消操作按鈕上的 String。在 MyResources 中,String 可能含有 Cancel,而在 MyResources_de 中則可能含有 Abbrechen。 如果不同的國(guó)家/地區(qū)有不同的資源,則可以進(jìn)行限定:例如,MyResources_de_CH 是瑞士 (CH) 中包含德語(yǔ) (de) 的對(duì)象。 Translation類(lèi)中主要的方法有獲得資源包和載入資源包,具體實(shí)現(xiàn)代碼如下:public class TranslationBundle static public ResourceBundle getBundle()if (TranslationBundle.resBundle = null) TranslationBundle.loadBundle();return TranslationBundle.resBundle;static private void loadBundle()if (TranslationBundle.strLanguage = null) loc = Locale.getDefault(); else loc = new Locale(TranslationBundle.strLanguage);try TranslationBundle.resBundle = ResourceBundle.getBundle(king.engine.translation.Risk, loc); catch( java.util.MissingResourceException e) System.out.println( Error: Cant find a translation file. Exiting. );System.exit( 2); static private void setLanguage(String strLanguage)TranslationBundle.strLanguage = strLanguage;4.2.2 MapTranslator類(lèi)的設(shè)計(jì)與實(shí)現(xiàn)該類(lèi)主要是用來(lái)將游戲中圖片顯示中的語(yǔ)言變換成本地語(yǔ)言;具體實(shí)現(xiàn)代碼如下:public class MapTranslatorprivate static ResourceBundle MapResb = null;private static ResourceBundle CardsResb = null;public static void setMap(String strFile) String strName = strFile.substring( 0, strFile.lastIndexOf( .);strFile = strName + _ + TranslationBundle.getBundle().getLocale().getLanguage() + .properties;try MapResb = new PropertyResourceBundle( (new URL(king.engine.Risk.mapsdir,strFile).openStream() );catch( IOException ioe ) try catch( MissingResourceException e) MapResb = null;public static String getTranslatedMapName(String strOriginal)if (MapResb = null) return strOriginal;String strReturn;try strReturn = MapResb.getString( strOriginal); catch(MissingResourceException e) strReturn = strOriginal;return strReturn;public static void setCards(String INstrFile) String strName = INstrFile.substring( 0, INstrFile.lastIndexOf( .);String strFile = strName + _ + TranslationBundle.getBundle().getLocale().getLanguage() + .properties;try CardsResb = new PropertyResourceBundle( (new URL(king.engine.Risk.mapsdir,strFile)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地方政府與電力公司新能源充電樁共建合作框架協(xié)議
- Brand KPIs for sauces condiments in Brazil-外文版培訓(xùn)課件(2025.2)
- 路政聯(lián)合執(zhí)法協(xié)議書(shū)
- 黃石食堂承包協(xié)議書(shū)
- 倉(cāng)庫(kù)登高梯租用協(xié)議書(shū)
- 資產(chǎn)整體轉(zhuǎn)讓協(xié)議書(shū)
- 公司建合同框架協(xié)議書(shū)
- 餐飲法人變更協(xié)議書(shū)
- 解除勞務(wù)外包協(xié)議書(shū)
- 食堂污水清掏協(xié)議書(shū)
- 小學(xué)新課標(biāo)《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)》新修訂解讀課件
- 七年級(jí)下學(xué)期語(yǔ)文5月月考試卷
- 2024年樂(lè)山市市級(jí)事業(yè)單位選調(diào)工作人員真題
- 社區(qū)衛(wèi)生服務(wù)與試題及答案
- 補(bǔ)單合同范本10篇
- 心血管-腎臟-代謝綜合征患者的綜合管理中國(guó)專(zhuān)家共識(shí)2025解讀-2
- 護(hù)工技能大賽試題及答案
- 機(jī)械制造自動(dòng)化技術(shù)工業(yè)機(jī)器人
- 湖南省2024年對(duì)口升學(xué)考試計(jì)算機(jī)綜合真題試卷
- 江蘇省南京市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)統(tǒng)編版期末考試(下學(xué)期)試卷及答案
- 中醫(yī)適宜技術(shù)-中藥熱奄包
評(píng)論
0/150
提交評(píng)論