




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