Java桌面游戲爭霸的設(shè)計與實現(xiàn)畢業(yè)論文.doc_第1頁
Java桌面游戲爭霸的設(shè)計與實現(xiàn)畢業(yè)論文.doc_第2頁
Java桌面游戲爭霸的設(shè)計與實現(xiàn)畢業(yè)論文.doc_第3頁
Java桌面游戲爭霸的設(shè)計與實現(xiàn)畢業(yè)論文.doc_第4頁
Java桌面游戲爭霸的設(shè)計與實現(xiàn)畢業(yè)論文.doc_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java桌面游戲爭霸的設(shè)計與實現(xiàn)畢業(yè)論文目 錄1 引言11.1 課題的研究背景與意義11.2Java語言的特點和及其與游戲的結(jié)合11.2.1Java語言的特點11.2.2Java與網(wǎng)絡(luò)的結(jié)合21.3可行性的分析31.3.1技術(shù)可行性31.3.2經(jīng)濟可行性41.3.3操作可行性41.3.4法律可行性42 需求分析52.1 系統(tǒng)初步分析52.1.1用戶需求分析52.1.2功能需求分析52.1.3系統(tǒng)的可靠性和可用性需求分析62.2 數(shù)據(jù)流分析63總體設(shè)計73.1 系統(tǒng)開發(fā)73.1.1系統(tǒng)開發(fā)的原則73.1.2系統(tǒng)設(shè)計階段73.1.3結(jié)構(gòu)設(shè)計階段94 詳細設(shè)計144.1核心包的設(shè)計144.1.1Card類的設(shè)計與實現(xiàn):144.1.2Continent類的設(shè)計與實現(xiàn):154.1.3Mission類的設(shè)計與實現(xiàn):164.1.4Country類的設(shè)計與實現(xiàn):164.1.5Player類的設(shè)計與實現(xiàn):174.1.6Statistic類的設(shè)計與實現(xiàn):184.2本地翻譯包的設(shè)計194.2.1TranslationBoudle類的設(shè)計與實現(xiàn)194.2.2MapTranslator類的設(shè)計與實現(xiàn)204.3網(wǎng)絡(luò)包的設(shè)計224.4人工智能包的設(shè)計254.5其他工具類的設(shè)計284.6游戲界面的設(shè)計305 用戶使用手冊375.1 系統(tǒng)環(huán)境說明375.2 系統(tǒng)簡介375.2.1 系統(tǒng)特點375.2.2 操作方法375.3 游戲需要改進的地方38結(jié) 論39參 考 文 獻40致 謝411 引 言1.1 課題的研究背景與意義隨著計算機日益普及,計算機已然成為人們?nèi)粘I畹囊徊糠值慕裉?,計算機游戲也越來越成為人們生活中不可或缺的元素。游戲可以簡單地理解為調(diào)節(jié)人們生活節(jié)奏和緩解人們生活壓力的一種手段?,F(xiàn)在理解的游戲基本意義都是娛樂性質(zhì)較濃,要有特定的行為模式,遵循一定規(guī)則以達到游戲者目的的行動。游戲的最初目的就是讓游戲者(玩家)在游戲中得到放松。游戲一直存在于人類活動中,如今定義的游戲從早期的猜謎游戲,發(fā)展到如今的單機RPG游戲,網(wǎng)絡(luò)游戲等,已經(jīng)升華為更高級別意義上的娛樂活動,對人們的感官刺激也越發(fā)強烈,得到的樂趣也更多。而對于編寫游戲而言,Java終于變得足夠成熟了(Java的語言特性和其與游戲的結(jié)合請見下一小節(jié))。它現(xiàn)在是一種開發(fā)能夠在多種平臺上運行的中小型游戲的很好的方式。此外,Java支持和其他的庫一起工作,而且它的速度變得越來越快。Java并不是以游戲編程為目的而被開發(fā)的,事實上,游戲編程可能是Java創(chuàng)造者心中的最后一個目標。在過去,妨礙Java發(fā)展的是它的運行環(huán)境;瀏覽器和Java類庫一起從本質(zhì)上決定了Java應(yīng)該用來寫哪種類型的應(yīng)用程序,而高速的游戲和圖象則不在其中。這給Java帶來了不好的影響,因為人們注意的不是語言,而是它的運行環(huán)境?,F(xiàn)在,瀏覽器已經(jīng)不能控制一切了,Java作為游戲編程語言的另一個機會到來了。Java在過去有一點超前于它的時代,當時市場的動力落后于Java,但是現(xiàn)在Java可以而且已經(jīng)取得成功。據(jù)悉,中國民族網(wǎng)絡(luò)游戲出版工程將在5年內(nèi)出版100種大型民族網(wǎng)絡(luò)游戲,總投資預(yù)計超過3億元。信息產(chǎn)業(yè)部已將網(wǎng)絡(luò)游戲通用引擎研究及示范產(chǎn)品納入國家“863計劃”,這是中國首次將網(wǎng)絡(luò)游戲技術(shù)納入國家科技計劃。文化部也向國內(nèi)12家在網(wǎng)絡(luò)游戲業(yè)的實力廠商首批頒發(fā)了網(wǎng)絡(luò)文化經(jīng)營許可證,加大對網(wǎng)絡(luò)游戲的監(jiān)管力度,進口游戲?qū)彶橹?,限制國?nèi)對國外的受理措施??萍疾恐贫萍及l(fā)展規(guī)劃,將把網(wǎng)絡(luò)游戲納入現(xiàn)代服務(wù)業(yè)并加以扶持。政府態(tài)度和政策都是一種信號,表明2005年對本土網(wǎng)絡(luò)游戲的扶持力度將加大;國內(nèi)游戲廠商將可獲得發(fā)展的核心技術(shù)平臺;政策有利于保護中國游戲軟件的自主知識產(chǎn)權(quán);這為網(wǎng)絡(luò)游戲發(fā)展創(chuàng)造了良好的政策環(huán)境。而Java的創(chuàng)建者把Java稱為“網(wǎng)絡(luò)編程語言”,且由于JAVA游戲一般來說簡單有趣,并且對用戶硬件要求極小,所以JAVA游戲通常對85%的計算機用戶都有吸引力。1.2 Java語言的特點和及其與游戲的結(jié)合1.2.1 Java語言的特點Java能夠取得如此的成功,是因為它在設(shè)計時的目標就定位在要解決當今程序員們所面臨的眾多問題。Java的基本目標之一就是要提高生產(chǎn)率。生產(chǎn)率來源于許多方面,但是Java希望在語言方面相對于它的前輩有明顯的提高,從而為程序員提供更大的便利。1.系統(tǒng)易于表達、易于理解被設(shè)計用來適應(yīng)問題的“類”,在表達問題的能力上顯得更強。這意味著當你編寫代碼時,你是在用問題空間的術(shù)語,而不是計算機也就是解空間的術(shù)語,來描述解決方案。可以用更高層的概念來處理問題,并且只用一行代碼就可以做更多的事。易于表達所帶來的另一個好處就是易于維護,維護在程序生命周期中所占的成本比例極大。如果程序易于理解,那么他必定易于維護。同時,這也降低了創(chuàng)建和維護文檔的費用。2.類庫的巨大影響力創(chuàng)建程序最快捷的方式就是使用已經(jīng)編寫好的代碼:類庫。Java的主要目標之一就是要使類庫更易于使用。這是通過將類庫轉(zhuǎn)型為新的數(shù)據(jù)類型來實現(xiàn)的,因此,引入類庫意味著在語言中添加了新的數(shù)據(jù)類型。因為Java編譯器會照管類庫的使用方式確保正確地初始化和回收垃圾,并保證其他方法被正確地調(diào)用,因此,你只需專注于你想讓類庫做些什么,而不必關(guān)心應(yīng)如何去做。3.錯誤處理在C語言中,錯誤處理一直是一個聲名狼籍的問題,而且經(jīng)常被忽視經(jīng)常只能靠上帝保佑了。如果你在構(gòu)建一個大型的、復(fù)雜的程序,那么沒有什么比在程序某處暗藏了一個錯誤,而你卻沒有任何能夠暗示它在何處的線索更糟糕的事情了。Java異常處理便是一種能夠確保錯誤必須被報告,而且對此必須有所響應(yīng)的機制。4.大型程序設(shè)計許多傳統(tǒng)語言在程序大小和復(fù)雜度方面都有內(nèi)置的限制。例如,BASIC可能對某類問題的解決能力非常強,可以快速地創(chuàng)建解決方案,但是如果程序長度超過數(shù)頁,或者超出該語言正常的題域之外,它就會像“在非常粘稠的液體中游泳”。它沒有明確的界線來表示何時你所使用的語言會導(dǎo)致最終的失敗,即使有這樣的界線,你也會忽視它。你總不能說:“我的BASIC程序太大了,我不得不用C來重寫它!”相反,你會試著將幾行代碼硬塞進去,以便在程序中增加新功能。因此,不知不覺中,你就付出了額外的開銷。Java具備編寫大型程序的能力也就是說,它消除了小型程序和大型程序之間的復(fù)雜度界線。在編寫“hello,world”風格的小應(yīng)用程序時,你當然不必使用OOP,但是當你需要用到時,這些功能隨手可得。而且,對小型程序和大型程序,編譯器都會一視同仁地、積極地找出因bug而產(chǎn)生的錯誤。1.2.2 Java與網(wǎng)絡(luò)的結(jié)合Java不僅是一種功能強大的、安全的、跨平臺的、國際化的編程語言,而且它還在不斷地被擴展,以提供更多的 語言功能和類庫,能夠優(yōu)雅地處理在傳統(tǒng)編程語言中很難解決的問題,例如線程、數(shù)據(jù)庫訪問、網(wǎng)絡(luò)編程和分部式計算。Java是通過applet以及使用Java Web Start來進行客戶端編程的。Applet是只在Web瀏覽中器運行的小程序,它是作為網(wǎng)頁的一部分而自動下載的。當applet被激活時,它便開始執(zhí)行一個程序,這正是它優(yōu)雅之處:它提供一種分發(fā)軟件的方法,一旦用戶需要客戶端軟件時,就自動從服務(wù)器把客戶端軟件分發(fā)給用戶。用戶獲取最新版本的客戶端軟件時不會產(chǎn)生錯誤,而且也不需要很麻煩的重新安裝過程。Java的這種設(shè)計方式,使得程序員只需創(chuàng)建單一的程序,而只要一臺計算機有瀏覽器,且瀏覽器具有內(nèi)置的Java解釋器,那么這個程序就可以自動在這臺計算機上運行。由于Java是一種成熟的編程語言,所以在提出對服務(wù)器的請求之前和之后,可以在客戶端盡可能多地多做些事情。例如,不必跨網(wǎng)絡(luò)地發(fā)送一張請求表單來檢查自己是否填寫了錯誤的日期或其他參數(shù),客戶端計算機就可以快速地標出錯誤數(shù)據(jù),而不用等待服務(wù)器作出標記并給你傳回圖片。這不僅立即就獲得了高速度和快速的響應(yīng)能力,而且也降低了網(wǎng)絡(luò)流量和服務(wù)器負載,從而不會使整個Internet的速度都慢下來。Java applet勝過腳本語言程序的優(yōu)勢之一就是,它是以被編譯過的形式存在的,因此其源代碼對客戶端來說是不可見的。另一方面,雖然反編譯Java applet并不需要花費多少力氣,但是隱藏你的代碼通常并不是一個重要的話題。有另外兩個因素很重要。如果編譯過的applet很大的話,那么就需要額外的時間去下載它。腳本語言程序只是被作為Web頁面的一部分文本而集成到了Web頁面中。這對Web網(wǎng)站的響應(yīng)能力來說很重要。另一個因素是非常重要的“學習曲線”問題。如果你是一個Visual BASIC程序員,那么轉(zhuǎn)而學習VBScript可能是最快的解決方案,而且由于它或許能夠解決大多數(shù)典型的客戶/服務(wù)器問題,所以你可能很難對學習Java報以公正的態(tài)度。如果你已經(jīng)對腳本語言很有經(jīng)驗了,那么你在考慮使用Java之前,應(yīng)該先看看JavaScript是否滿足你的要求,這樣對你會很有好處,因為它們能夠更方便地滿足你的要求,而且使你更具生產(chǎn)力。Java引起人們的注意很大程度上始于applet。Java確實是一種通用的編程語言,至少在理論上可以解決各種其他語言能夠解決的問題。正像前面指出的那樣,可能存在其他更有效的方式去解決客戶/服務(wù)器問題。當你離開applet的競技場時,你便步入了通用應(yīng)用系統(tǒng)的世界,這里的系統(tǒng)都是獨立運行的,不需要瀏覽器,就像其他普通程序一樣。在這里,Java的威力不僅在于它的可移植性,還包括它的可編程性。Java已經(jīng)具備了許多功能,讓你創(chuàng)建健壯的程序,而花費的時間比使用Java之前的任何編程語言都更少。不過,這是好壞參半的事。為Java帶來的改進,所付出的代價是降低了執(zhí)行速度。像任何語言一樣,Java也具有不適合解決某類問題的天生的限制。然而,Java是快速進化的語言,而且每當發(fā)布一個新版本時,它都會因為能夠解決更多的問題而變得越來越具有吸引力。1.3 可行性的分析可行性研究的目的,就是用最小的代價在盡可能短的時間內(nèi)確定問題是否能夠解決。要達到這個目的,必須分析幾種主要的可能解法的利弊,從而判斷原定的系統(tǒng)規(guī)模和目標是否現(xiàn)實,系統(tǒng)完成后所能帶來的效益是否大到值得投資開發(fā)這個系統(tǒng)的程度。因此,可行性研究實質(zhì)上是要進行一次大大壓縮簡化了的系統(tǒng)分析和設(shè)計的過程,也就是在較高層次上以較抽象的方式進行的系統(tǒng)分析和設(shè)計的過程。1.3.1 技術(shù)可行性本游戲是在Windows XP環(huán)境下開發(fā)的,一般的機器配置就可以了,對機器本身沒有太高的要求,一般當前學?;騻€人電腦完全可滿足要求,環(huán)境只需裝上jdk 1.4或以上版本就行了,Java是現(xiàn)在全球最時髦的開發(fā)工具之一,它擁有一套龐大且完善的類庫,內(nèi)置了其他語言需要靠庫甚至是操作系統(tǒng)才能支持的功能,擁有一個虛擬機。NeatBeans IDE 5.5是SUN公司開發(fā)的Java可視化集成開發(fā)工具,是目前最優(yōu)秀的Java集成開發(fā)工具之一。1.3.2 經(jīng)濟可行性由于本系統(tǒng)使用到的工具一般機器都具備,使用環(huán)境也很簡單,開發(fā)成本低,本課題研究的內(nèi)容是涉及網(wǎng)絡(luò)的游戲?qū)?zhàn)。當今形式下網(wǎng)絡(luò)游戲儼然已經(jīng)成為年輕人最時興的消費方式之一,JAVA一直以來由于其可以“跨平臺”以及“一次編譯,到處運行”等特點,許多人直接它為網(wǎng)絡(luò)編程語言,且由于JAVA游戲一般來說簡單有趣,并且對用戶硬件要求極小,所以JAVA游戲通常對85%的計算機用戶都有吸引力。且政府態(tài)度和政策都是一種信號,表明2005年對本土網(wǎng)絡(luò)游戲的扶持力度將加大;國內(nèi)游戲廠商將可獲得發(fā)展的核心技術(shù)平臺;政策有利于保護中國游戲軟件的自主知識產(chǎn)權(quán);這為網(wǎng)絡(luò)游戲發(fā)展創(chuàng)造了良好的政策環(huán)境。1.3.3 操作可行性由于在整個系統(tǒng)的開發(fā)過程中從操作簡便、界面美觀、靈活實用的用戶要求為出發(fā)點,界面設(shè)計時充分考慮玩家的感受,界面比較直觀,交互性很好,所以操作起來簡單明了。1.3.4 法律可行性信息產(chǎn)業(yè)部已將網(wǎng)絡(luò)游戲通用引擎研究及示范產(chǎn)品納入國家“863計劃”,這是中國首次將網(wǎng)絡(luò)游戲技術(shù)納入國家科技計劃。文化部也向國內(nèi)12家在網(wǎng)絡(luò)游戲業(yè)的實力廠商首批頒發(fā)了網(wǎng)絡(luò)文化經(jīng)營許可證,加大對網(wǎng)絡(luò)游戲的監(jiān)管力度,進口游戲?qū)彶橹?,限制國?nèi)對國外的受理措施??萍疾恐贫萍及l(fā)展規(guī)劃,將把網(wǎng)絡(luò)游戲納入現(xiàn)代服務(wù)業(yè)并加以扶持。政府態(tài)度和政策都是一種信號,表明2005年對本土網(wǎng)絡(luò)游戲的扶持力度將加大;國內(nèi)游戲廠商將可獲得發(fā)展的核心技術(shù)平臺;政策有利于保護中國游戲軟件的自主知識產(chǎn)權(quán);這為網(wǎng)絡(luò)游戲發(fā)展創(chuàng)造了良好的政策環(huán)境。2 需求分析所謂系統(tǒng)分析,就是指在整個系統(tǒng)開發(fā)工程中,解決“做什么”的問題,把要解決哪些問題,滿足用戶哪些具體的信息需求調(diào)查分析清楚,從邏輯上或是說從信息處理的功能需求上提出系統(tǒng)的方案,即邏輯模型,為下一階段進行物理方案設(shè)計,解決怎么辦提供依據(jù)。2.1 系統(tǒng)初步分析2.1.1 用戶需求分析隨著Internet的發(fā)展,進入信息時代后快速獲得網(wǎng)絡(luò)共享資源成為很簡單的事情,人們對互聯(lián)網(wǎng)也有了很大的依賴性。網(wǎng)絡(luò)的普及化使得原本單人的游戲已經(jīng)不能適應(yīng)人們的需要,廣大的游戲者迫切需要能夠和身在異地的朋友一起享受游戲的樂趣。在這種環(huán)境下,網(wǎng)絡(luò)游戲應(yīng)運而生,越來越多的游戲者投身到網(wǎng)絡(luò)游戲中。這樣帶來的問題自然成為越來越多的游戲研究者將研究方向轉(zhuǎn)為網(wǎng)絡(luò)游戲的研究。據(jù)目前的網(wǎng)絡(luò)游戲的調(diào)研來看,以運動休閑為主的運動類游戲正在受到越來越多玩家的支持和愛戴。但是此類網(wǎng)絡(luò)游戲中,由Java開發(fā)的網(wǎng)絡(luò)游戲仍然是一個空白頁,但是它卻是一個迫切需要填補的空白頁。而Java由于其天生的語言特性(請見1.2節(jié)),很適合用于開發(fā)網(wǎng)絡(luò)游戲,但由于系統(tǒng)環(huán)境的問題使得它一直以來未能用于游戲開發(fā),而近來由于Java的發(fā)展,它已經(jīng)擺脫了束縛,浮出了游戲開發(fā)的水面,若能在網(wǎng)絡(luò)上出現(xiàn)高要求多人互動的Java游戲,它將是一項極為偉大的發(fā)展。這也正是現(xiàn)在許多玩家迫切要求的。2.1.2 功能需求分析系統(tǒng)功能的需求指定系統(tǒng)必須提供的服務(wù)。通過需求分析應(yīng)該劃分出系統(tǒng)必須完成的所有功能。本作的功能模塊主要包括游戲的引擎設(shè)計,游戲的界面設(shè)計。1.游戲的引擎設(shè)計的需求分析:游戲引擎是游戲的靈魂,也就是這個游戲的框架,它的好壞直接決定著游戲的質(zhì)量。它是控制所有游戲功能的主程序,包括畫面的處理,人工智能的實現(xiàn),接受玩家的設(shè)置,以及網(wǎng)絡(luò)聯(lián)機的實現(xiàn)等等。所以鑒定一個游戲的好壞,從內(nèi)部設(shè)計的原因上說來,是從游戲的引擎設(shè)計體現(xiàn)出來的。一個游戲的引擎設(shè)計,直接關(guān)系到游戲設(shè)計的其他方面,諸如游戲的圖形系統(tǒng)、聲音系統(tǒng)及設(shè)計的物理模塊等等各個方面。就如一臺電腦需要CPU一樣,游戲的引擎也是直接牽制著整個游戲的設(shè)計。它的主要作用就是處理游戲中的事件,運行游戲中的圖象,輸出聲音及畫面,調(diào)整游戲的節(jié)奏,響應(yīng)玩家的游戲監(jiān)聽事件等等。所以,游戲的引擎設(shè)計是必要的功能模塊,而且游戲的引擎設(shè)計必須做好,以使得游戲更具有可玩性。游戲程序是一項精度要求很高的程序系統(tǒng),因為其代碼利用率很高。一個實時運行的最終作品,每秒都會運行成千上萬行程序,繪圖事件等都會以極高的頻率在后臺等待響應(yīng),若有絲毫的差別都將很容易導(dǎo)致程序在運行不久后可能出現(xiàn)嚴重錯誤,甚至死循環(huán)。因此,其邏輯設(shè)計應(yīng)當相當嚴謹,需將所有可能發(fā)生的事件及意外情況考慮在設(shè)計中。2游戲界面設(shè)計的需求分析:作為一個游戲吸引玩家的重要方面,游戲的界面要很漂亮,圖形動畫的設(shè)計是非常必要的。本作將采用模擬動畫的方式將戰(zhàn)爭展現(xiàn)在玩家眼前。設(shè)計出豐富的戰(zhàn)爭環(huán)境,游戲中為了美觀,適用性強,需要采用外部文件引入的圖片貼圖,而Java中提供了用于處理圖片的功能包,使得解決靜態(tài)或動態(tài)、畫面背景、屏幕刷新的雙緩沖等都有較好的解決方案。2.1.3 系統(tǒng)的可靠性和可用性需求分析可靠性需求定量地指定系統(tǒng)的可靠性。例如,游戲在運行過程中不能頻繁發(fā)生錯誤而不得不終止游戲。可用性則與可靠性密切相關(guān),它量化了用戶可以使用系統(tǒng)的程度。例如,游戲的運行必須保證隨時可以,不能在一段不使用的時間內(nèi),游戲產(chǎn)生不可預(yù)見的錯誤而致無法運行等等。2.2 數(shù)據(jù)流分析數(shù)據(jù)流程分析主要包括對信息的流動、傳遞、處理、存儲等的分析。數(shù)據(jù)流程分析的目的就是要發(fā)現(xiàn)和解決數(shù)據(jù)流通中的問題。通過對本系統(tǒng)的需求分析,確定了系統(tǒng)的基本功能。整個系統(tǒng)的數(shù)據(jù)流圖如圖2-1所示: 圖2-1 系統(tǒng)數(shù)據(jù)流程圖3總體設(shè)計總體設(shè)計過程通常由兩個主要階段組成:系統(tǒng)設(shè)計階段,確定系統(tǒng)的具體實現(xiàn)方案;結(jié)構(gòu)設(shè)計階段,確定軟件結(jié)構(gòu)和功能模塊。3.1 系統(tǒng)開發(fā)3.1.1系統(tǒng)開發(fā)的原則經(jīng)過需求分析階段的工作,系統(tǒng)必須“做什么”已經(jīng)清楚了,現(xiàn)在是決定“怎么做”的時候了??傮w設(shè)計的基本目的就是回答“概括地說,系統(tǒng)應(yīng)該如何實現(xiàn)?”這個問題,因此,總體設(shè)計又稱為概要設(shè)計或初步設(shè)計。通過這個階段的工作將劃分出組成系統(tǒng)的物理元素程序、文件、數(shù)據(jù)庫、人工過程和文檔等等,但是每個物理元素仍然處于黑盒子級,這些黑盒子里的具體內(nèi)容將在以后仔細設(shè)計??傮w設(shè)計階段的另一項重要任務(wù)是設(shè)計軟件的結(jié)構(gòu),也就是要確定系統(tǒng)中每個程序是由哪些模塊組成的,以及這些模塊相互間的關(guān)系??傮w設(shè)計過程首先尋找實現(xiàn)目標系統(tǒng)的各種不同的方案,需求分析階段得到的數(shù)據(jù)流圖是設(shè)想各種可能方案的基礎(chǔ)。然后從這些供選擇的方案中選取若干合理的方案,為每個合理的方案都準備一份系統(tǒng)流程圖,列出組成系統(tǒng)的所有物理元素,進行成本/效益分析,并且指定實現(xiàn)此方案的進度計劃。通常,設(shè)計出初步的軟件結(jié)構(gòu)后還要多方改進,從而得到更合理的結(jié)構(gòu),進行必要的數(shù)據(jù)庫設(shè)計,確定測試要求并且制定測試計劃?;谏厦娴臄⑹?,在詳細設(shè)計之前先進行總體設(shè)計的必要性:可以站在全局高度上,花較少成本,從較抽象的層次上分析比對多種可能的系統(tǒng)方案和軟件結(jié)構(gòu),從中選出最佳方案和最合理的軟件結(jié)構(gòu),從而用較低成本開發(fā)出較高質(zhì)量的軟件系統(tǒng)。3.1.2 系統(tǒng)設(shè)計階段系統(tǒng)設(shè)計階段的主要目的就是確定軟件如何做的問題。主要任務(wù)就是確定系統(tǒng)中的大模塊和設(shè)計方法,確定軟件的功能模塊和模塊的作用,組成,關(guān)系等等。本系統(tǒng)是一款希望可以基于網(wǎng)絡(luò)的多人對戰(zhàn)游戲,當游戲者打開游戲,游戲界面打開,然后玩家可以選擇是進行一輪新的游戲,還是選擇接著玩上次沒玩結(jié)束的游戲(如果先前已經(jīng)玩過該游戲,但沒有玩結(jié)束,有事了,并且保存了),只需要選擇載入游戲就可以;玩家還可以選擇是進行單機游戲或是聯(lián)機游戲,如果選擇網(wǎng)絡(luò)聯(lián)機玩的話只需要啟動服務(wù)器等待其他玩家加入就可以了;如果選擇了單機游戲,并選擇了進行一輪新的游戲,則游戲會出現(xiàn)游戲設(shè)置界面,通過該界面玩家可以設(shè)置游戲的玩家數(shù)量(2-6個)以及游戲的難度,電腦玩家有簡單智力的和高智力的,然后玩家可以選擇不同的卡片模式和不同的游戲模式(分為統(tǒng)治型、首都型和任務(wù)型),并且玩家可以選擇不同的游戲地圖,游戲的目標是統(tǒng)治全世界,當玩家設(shè)置好一切后,可以點擊開始游戲,則游戲開始。游戲開始,游戲畫面是一張被分割成多個國家的地圖,每個玩家可以輪流在地圖上選擇自己的地盤和軍隊的布置,而電腦玩家也會自動放置軍隊,當每個國家都被放上軍隊后,才可以重復(fù)在一個國家放置多余的軍隊,當默認的所有軍隊全都放置好,然后玩家就可以開始統(tǒng)一全球的戰(zhàn)爭游戲了,而當一方的軍隊侵略另一邊時,游戲程序通過一定的人工智能算法讓戰(zhàn)爭的雙方分別產(chǎn)生隨機數(shù),然后進行比較,大的一方勝利,而當進攻者與防守者產(chǎn)生的數(shù)字一樣大時,算是進攻失敗,如果進攻勝利,則勝者將占領(lǐng)該國家,并可以選擇留守該國家的軍隊數(shù),而等到下一輪到該玩家進攻時,可以根據(jù)該玩家在占領(lǐng)的領(lǐng)土來決定你可以增加多少軍隊,以及你可以獲得的卡片,獲得的卡片可以用來交換軍隊,最后占領(lǐng)全世界(消滅了其他兩個玩家)的為勝利者。在游戲過程中如果玩家突然有事無法繼續(xù)游戲,本游戲可以保存當前游戲狀態(tài),當玩家有時間時可以接下去游戲,而無需重新開始,玩家也可以將自己的機器作為服務(wù)器,通過網(wǎng)絡(luò)與網(wǎng)絡(luò)上的其他玩家一起游戲。本游戲還具有統(tǒng)計的功能,在你游戲過程中或則游戲結(jié)束后你可以查看在本局游戲中各個玩家各個方面的戰(zhàn)績的統(tǒng)計(例如每個玩家在游戲過程當中所占領(lǐng)的國家數(shù)、軍隊數(shù)、摧毀數(shù)、傷亡數(shù)、受到進攻的次數(shù)等等),游戲中還設(shè)置了控制臺,玩家可以通過圖形顯示的按鈕進行游戲,也可以通過命令來進行游戲,在游戲菜單欄的幫助中,玩家可以選擇命令按扭來顯示出游戲中可用的命令菜單,玩家可以通過選擇其中的關(guān)于了解本游戲的一些信息。當你贏的了游戲,游戲會告訴你,你勝利了!關(guān)于線程:對象技術(shù)提供了一種把程序劃分成若干獨立部分的方式。通常,還需要把程序轉(zhuǎn)換成彼此分離的、能獨立運行的子任務(wù)。每一個這樣的獨立子任務(wù)都被稱為一個“線程”。每個線程都好象是在獨立運行并且有自己的CPU。CPU時間確實是通過某些底層機制進行分配的,不過你一般不考慮這些,這使得編寫多線程程序的任務(wù)變得容易得多了。多線程有多種用途,不過通常用法是,程序中的某個部分與一個特定的事件或資源聯(lián)系在一起,而又不想讓這種聯(lián)系阻礙程序其余部分的運行。這時候,可以創(chuàng)建一個與這個事件或者資源相關(guān)聯(lián)的線程,并且讓此線程獨立于主程序運行。使用并發(fā)的最引人矚目的理由之一就是,產(chǎn)生一個可作出響應(yīng)的用戶界面??紤]一個程序,它要執(zhí)行某項強烈需用CPU的計算,這樣就會導(dǎo)致用戶的輸入被忽略,也就無法作出響應(yīng)。問題的實質(zhì)是:程序需要一邊連續(xù)進行計算,同時還要把控制權(quán)交給用戶界面,這樣程序才能響應(yīng)用戶的操作。并發(fā)還可以用來優(yōu)化吞吐量。比如,在等待數(shù)據(jù)到達輸入/輸出端口的同時,可以進行其他重要的工作。要是不用線程的話,唯一可行的辦法就是不斷查詢輸入/輸出端口,這種方法不僅笨拙,而且很困難。線程模型為編程帶來了便利,它簡化了在單一程序中同時交織在一起的多個操作的處理。在使用線程時,CPU將輪流給每個線程分配其占用時間。每個線程都覺得自己在一直占用CPU ,但事實上CPU時間是劃分成片段分配給了所有線程。例外情況是程序運行在具多個CPU的機器上,但線程的一大好處是可以使你從這個層次抽身出來,即代碼不必知道它是運行在具有一個還是多個CPU的機器上。所以線程是一種透明的、可擴展的程序方法,如果程序運行的太慢,為機器增添一個CPU就能很容易地加快程序的運行速度。多任務(wù)和多線程往往是使用多處理器系統(tǒng)的最合理方式。游戲中將在很多地方用到多線程,像在進行網(wǎng)絡(luò)聯(lián)機時將會使用多線程來是兩個玩家可以同步進行游戲,而圖形界面也通過多線程同時進行多的程序的進行。3.1.3 結(jié)構(gòu)設(shè)計階段1. 經(jīng)過系統(tǒng)設(shè)計階段的思考和實踐,需要對功能結(jié)構(gòu)進行細致的劃分。一個程序的結(jié)構(gòu)設(shè)計的好壞也是決定其發(fā)展的重要指標。對一個程序的模塊劃分往往也能使程序設(shè)計變得簡單。本游戲的模塊大致分為游戲引擎和用戶界面兩大模塊而,游戲引擎模塊又分為核心包、ai包、網(wǎng)絡(luò)包、本地翻譯包、游戲控制類等等,其功能模塊圖示如下:King游戲 游戲引擎用戶界面網(wǎng)絡(luò)模塊核心模塊游戲控制模塊AI模塊本地翻譯模塊圖3-1 系統(tǒng)功能模塊結(jié)構(gòu)圖功能模塊介紹:king.engine.core包:其中包括了一些基本核心的類,例如像表示一個國家的Country類,表示一個卡片的Card類,表示一個版塊的Continent類,表示一個玩家的Player類以及表示一個任務(wù)的Mission類等等。king.engine.ai包:其中包括了玩家可選擇的簡單人工智能的電腦玩家和復(fù)雜人工智能的電腦玩家以及不同游戲類型的不同玩家的人工智能。king.engine.translation包:其中包括了用于將游戲中的語言根據(jù)計算機所處的不同的國家翻譯成不同的語言的類。包:其中包括了將游戲用于網(wǎng)絡(luò)聯(lián)機玩用到的類。游戲控制模塊:主要包含一些我自己定義的一些接口和過濾器類等工具類。系統(tǒng)用例圖見下頁:圖3-2 系統(tǒng)用例圖游戲設(shè)置用例圖:圖3-3 游戲設(shè)置用例圖網(wǎng)絡(luò)聯(lián)機用例圖:圖3-4 網(wǎng)絡(luò)聯(lián)機游戲用例圖游戲用例圖:圖3-5 游戲用例圖2. 系統(tǒng)的主要UML圖見下頁:圖3-2 Risk類的依賴關(guān)系圖圖3-3 SwingGUIPanel類的依賴關(guān)系圖圖3-4 RikGame類的依賴關(guān)系圖4 詳細設(shè)計詳細設(shè)計階段的根本目標是確定應(yīng)該怎樣具體地實現(xiàn)所要求的系統(tǒng),也就是說,經(jīng)過這個階段的設(shè)計工作,應(yīng)該得出對目標系統(tǒng)的精確描述,從而在編碼階段可以把這個描述直接翻譯成用某種程序設(shè)計語言書寫的程序。詳細設(shè)計的結(jié)果基本上決定了最終程序代碼的質(zhì)量。詳細設(shè)計的目標不僅僅是邏輯上正確地實現(xiàn)每個模塊的功能,更重要的是設(shè)計出的處理過程應(yīng)該盡可能簡明易懂。結(jié)構(gòu)程序設(shè)計技術(shù)是實現(xiàn)上述目標的關(guān)鍵技術(shù),因此是詳細設(shè)計的邏輯基礎(chǔ)。4.1 核心包的設(shè)計游戲中需要經(jīng)常用到的常有名詞有卡片、國家、任務(wù)、玩家、版塊、統(tǒng)計資料等等,所以我們由此可以確定這些基本的核心類:Card、Continent、Country、Mission、Player、Statistic;4.1.1 Card類的設(shè)計與實現(xiàn):在游戲過程中某一些國家中會有卡片,當你沒占領(lǐng)了這樣的國家的時候,你就能獲得卡片,當你獲得了幾張放在一起可以交易的卡片的時候你就可以用卡片換軍隊了,所以在該類中有卡片的名字,所屬國家等屬性,該類的類圖如下所示:圖4-1 Card類的類圖Card類的主要代碼如下: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類的設(shè)計與實現(xiàn):游戲中的圖片都是世界地圖,其中包括幾個洲,這些洲再分成一個一個國家,洲有自己的名字和顏色,并且每個洲都有它的對應(yīng)的價值的軍隊數(shù),當你占領(lǐng)了一個洲的時候,當下一輪到你進攻的時候,你可以獲得相應(yīng)數(shù)目的軍隊,在其他對象訪問該對象時,可以獲得它的名字,顏色,價值軍隊數(shù)和所屬的玩家,其類圖見圖4-2所示:圖4-2 Continent類的類圖Continent類的主要代碼如下: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類的設(shè)計與實現(xiàn):Mission類主要用來代表在不同模式的游戲當中你的任務(wù),其類圖如下所示:圖4-4 Mission類的類圖4.1.4 Country類的設(shè)計與實現(xiàn):在本游戲中就是以國家為基本單位的,所以它為最核心的類,大部分其他類都需要訪問它,其類圖如下: 圖4-3 Country類的類圖其中該類通過其構(gòu)造函數(shù)構(gòu)造一個任務(wù)對象,傳遞的參數(shù)有:任務(wù)要消滅的敵人,需要占領(lǐng)的的國家數(shù),在一個版塊上需要的最少軍隊數(shù),第一個需要占領(lǐng)的國家,第二個需要占領(lǐng)的國家,第三個需要占領(lǐng)的國家以及任務(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類的設(shè)計與實現(xiàn):玩家用來代表一個玩家對象,該類也是游戲程序中所要用到的最基本的類,其中玩家的屬性有:名字,顏色,玩家任務(wù),玩家類型等,為了后面的統(tǒng)計功能的實現(xiàn),還在其中增加了已經(jīng)消滅的敵人向量,所擁有的卡片,所擁有的版塊數(shù)等等,為了實現(xiàn)網(wǎng)絡(luò)聯(lián)機的功能,還增加了玩家的網(wǎng)絡(luò)地址等等。而玩家類中有一些重要的方法,像在后面要實現(xiàn)卡片交易,必要能獲得玩家所擁有的卡片,還要判斷一下玩家多擁有的卡片是否可以進行交易,以及為了實現(xiàn)網(wǎng)絡(luò)聯(lián)機要統(tǒng)計功能,必須要獲得一些統(tǒng)計數(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;/ 看看你是否可以從擁有的國家中獲得額外的軍隊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類的設(shè)計與實現(xiàn):統(tǒng)計類主要是用來實現(xiàn)游戲的統(tǒng)計功能而設(shè)計的類,每個玩家擁有一個統(tǒng)計向量用來記錄一些數(shù)據(jù),給類里面只要一個包含記錄各種數(shù)據(jù)的整形數(shù)組statistic屬性,統(tǒng)計數(shù)據(jù)有國家數(shù),軍隊數(shù),毀滅數(shù),傷亡數(shù),增強過程,大陸數(shù),國家數(shù),進攻次數(shù),撤退次數(shù),勝利次數(shù)等等,該類的類圖如下所示:圖4-5 Statistic類的類圖其中的重要方法有結(jié)束一輪進攻進行統(tǒng)計endGoStatistics(int a, int b, int c, int d),向量中其他一些數(shù)據(jù)的計算方法,具體代碼如下:statistics向量中0位置記錄國家數(shù),1記錄軍隊數(shù),2記錄毀掉數(shù),3記錄傷亡數(shù),4記錄增強數(shù),5記錄大陸數(shù),6記錄帝國數(shù),7記錄進攻次數(shù),8記錄撤退次數(shù),9記錄勝利的次數(shù),10記錄戰(zhàn)勝次數(shù),11記錄受到進攻的次數(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è)計本包的設(shè)計是為了本游戲的國際化,在游戲過程中可以通過本包中的類實現(xiàn)語言的本地化,本包中包括兩個類:TranslationBundle和MapTranslator。4.2.1 TranslationBoudle類的設(shè)計與實現(xiàn)該類主要是用來獲得編寫的資源包(這指語言包),然后該類可以通過Java API中的一些方法獲得該游戲所處系統(tǒng)的語言環(huán)境,然后將游戲中的語言變換成本地語言;該類中主要用到了java.util.ResourceBundle類,資源包包含特定于語言環(huán)境的對象。當程序需要一個特定于語言環(huán)境的資源時(如 String),程序可以從適合當前用戶語言環(huán)境的資源包中裝入它。以這種方式可以編寫很大程度上獨立于用戶語言環(huán)境的程序代碼,它將資源包中大部分(如果不是全部)特定于語言環(huán)境的信息隔離開來。 這就使您所編寫的程序可以: 輕松地本地化或翻譯成不同的語言 一次處理多個語言環(huán)境 以后可以輕松地進行修改,支持更多的語言環(huán)境 資源包屬于這樣的系列,其成員共享一個公共的基本名稱,但是名稱中還有標識其語言環(huán)境的其他組件。例如,某個資源包系列的基本名稱可能是 MyResources。該系列應(yīng)該有一個默認資源包,其名稱與其系列名相同( MyResources),并且如果不支持指定的語言環(huán)境,則此資源包應(yīng)該用作最后的手段。然后,此系列可根據(jù)需要提供特定于語言環(huán)境的成員,例如一個名為 MyResources_de 的德語資源包。 某個系列中的每個資源包都包含相同的項,但是已經(jīng)針對該資源包所代表的語言環(huán)境翻譯了各項。例如,MyResources 和 MyResources_de 可能有用在取消操作按鈕上的 String。在 MyResources 中,String 可能含有 Cancel,而在 MyResources_de 中則可能含有 Abbrechen。 如果不同的國家/地區(qū)有不同的資源,則可以進行限定:例如,MyResources_de_CH 是瑞士 (CH) 中包含德語 (de) 的對象。 Translation類中主要的方法有獲得資源包和載入資源包,具體實現(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類的設(shè)計與實現(xiàn)該類主要是用來將游戲中圖片顯示中的語言變換成本地語言;具體實現(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論