• 2.29 MB
  • 2022-04-22 13:54:57 发布

Java桌面游戏争霸的设计与实现毕业论文.doc

  • 44页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'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系统开发的原则7 3.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致谢41 1引言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.2Java语言的特点和及其与游戏的结合1.2.1Java语言的特点Java能够取得如此的成功,是因为它在设计时的目标就定位在要解决当今程序员们所面临的众多问题。Java的基本目标之一就是要提高生产率。生产率来源于许多方面,但是Java希望在语言方面相对于它的前辈有明显的提高,从而为程序员提供更大的便利。1.系统易于表达、易于理解被设计用来适应问题的“类” ,在表达问题的能力上显得更强。这意味着当你编写代码时,你是在用问题空间的术语,而不是计算机——也就是解空间——的术语,来描述解决方案。可以用更高层的概念来处理问题,并且只用一行代码就可以做更多的事。易于表达所带来的另一个好处就是易于维护,维护在程序生命周期中所占的成本比例极大。如果程序易于理解,那么他必定易于维护。同时,这也降低了创建和维护文档的费用。2.类库的巨大影响力创建程序最快捷的方式就是使用已经编写好的代码:类库。Java的主要目标之一就是要使类库更易于使用。这是通过将类库转型为新的数据类型来实现的,因此,引入类库意味着在语言中添加了新的数据类型。因为Java编译器会照管类库的使用方式——确保正确地初始化和回收垃圾,并保证其他方法被正确地调用,因此,你只需专注于你想让类库做些什么,而不必关心应如何去做。3.错误处理在C语言中,错误处理一直是一个声名狼籍的问题,而且经常被忽视——经常只能靠上帝保佑了。如果你在构建一个大型的、复杂的程序,那么没有什么比在程序某处暗藏了一个错误,而你却没有任何能够暗示它在何处的线索更糟糕的事情了。Java异常处理便是一种能够确保错误必须被报告,而且对此必须有所响应的机制。4.大型程序设计许多传统语言在程序大小和复杂度方面都有内置的限制。例如,BASIC可能对某类问题的解决能力非常强,可以快速地创建解决方案,但是如果程序长度超过数页,或者超出该语言正常的题域之外,它就会像“在非常粘稠的液体中游泳”。它没有明确的界线来表示何时你所使用的语言会导致最终的失败,即使有这样的界线,你也会忽视它。你总不能说:“我的BASIC程序太大了,我不得不用C来重写它!”相反,你会试着将几行代码硬塞进去,以便在程序中增加新功能。因此,不知不觉中,你就付出了额外的开销。Java具备编写大型程序的能力——也就是说,它消除了小型程序和大型程序之间的复杂度界线。在编写“hello,world”风格的小应用程序时,你当然不必使用OOP,但是当你需要用到时,这些功能随手可得。而且,对小型程序和大型程序,编译器都会一视同仁地、积极地找出因bug而产生的错误。1.2.1Java与网络的结合Java不仅是一种功能强大的、安全的、跨平台的、国际化的编程语言,而且它还在不断地被扩展,以提供更多的语言功能和类库,能够优雅地处理在传统编程语言中很难解决的问题,例如线程、数据库访问、网络编程和分部式计算。Java是通过applet以及使用JavaWebStart来进行客户端编程的。Applet是只在Web浏览中器运行的小程序,它是作为网页的一部分而自动下载的。当applet被激活时,它便开始执行一个程序,这正是它优雅之处:它提供一种分发软件的方法,一旦用户需要客户端软件时,就自动从服务器把客户端软件分发给用户。用户获取最新版本的客户端软件时不会产生错误,而且也不需要很麻烦的重新安装过程。Java 的这种设计方式,使得程序员只需创建单一的程序,而只要一台计算机有浏览器,且浏览器具有内置的Java解释器,那么这个程序就可以自动在这台计算机上运行。由于Java是一种成熟的编程语言,所以在提出对服务器的请求之前和之后,可以在客户端尽可能多地多做些事情。例如,不必跨网络地发送一张请求表单来检查自己是否填写了错误的日期或其他参数,客户端计算机就可以快速地标出错误数据,而不用等待服务器作出标记并给你传回图片。这不仅立即就获得了高速度和快速的响应能力,而且也降低了网络流量和服务器负载,从而不会使整个Internet的速度都慢下来。Javaapplet胜过脚本语言程序的优势之一就是,它是以被编译过的形式存在的,因此其源代码对客户端来说是不可见的。另一方面,虽然反编译Javaapplet并不需要花费多少力气,但是隐藏你的代码通常并不是一个重要的话题。有另外两个因素很重要。如果编译过的applet很大的话,那么就需要额外的时间去下载它。脚本语言程序只是被作为Web页面的一部分文本而集成到了Web页面中。这对Web网站的响应能力来说很重要。另一个因素是非常重要的“学习曲线”问题。如果你是一个VisualBASIC程序员,那么转而学习VBScript可能是最快的解决方案,而且由于它或许能够解决大多数典型的客户/服务器问题,所以你可能很难对学习Java报以公正的态度。如果你已经对脚本语言很有经验了,那么你在考虑使用Java之前,应该先看看JavaScript是否满足你的要求,这样对你会很有好处,因为它们能够更方便地满足你的要求,而且使你更具生产力。Java引起人们的注意很大程度上始于applet。Java确实是一种通用的编程语言,至少在理论上可以解决各种其他语言能够解决的问题。正像前面指出的那样,可能存在其他更有效的方式去解决客户/服务器问题。当你离开applet的竞技场时,你便步入了通用应用系统的世界,这里的系统都是独立运行的,不需要浏览器,就像其他普通程序一样。在这里,Java的威力不仅在于它的可移植性,还包括它的可编程性。Java已经具备了许多功能,让你创建健壮的程序,而花费的时间比使用Java之前的任何编程语言都更少。不过,这是好坏参半的事。为Java带来的改进,所付出的代价是降低了执行速度。像任何语言一样,Java也具有不适合解决某类问题的天生的限制。然而,Java是快速进化的语言,而且每当发布一个新版本时,它都会因为能够解决更多的问题而变得越来越具有吸引力。1.2可行性的分析可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。要达到这个目的,必须分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。1.2.1技术可行性本游戏是在WindowsXP环境下开发的,一般的机器配置就可以了,对机器本身没有太高的要求,一般当前学校或个人电脑完全可满足要求,环境只需装上jdk 1.4或以上版本就行了,Java是现在全球最时髦的开发工具之一,它拥有一套庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机。NeatBeansIDE5.5是SUN公司开发的Java可视化集成开发工具,是目前最优秀的Java集成开发工具之一。1.2.1经济可行性由于本系统使用到的工具一般机器都具备,使用环境也很简单,开发成本低,本课题研究的内容是涉及网络的游戏对战。当今形式下网络游戏俨然已经成为年轻人最时兴的消费方式之一,JAVA一直以来由于其可以“跨平台”以及“一次编译,到处运行”等特点,许多人直接它为网络编程语言,且由于JAVA游戏一般来说简单有趣,并且对用户硬件要求极小,所以JAVA游戏通常对85%的计算机用户都有吸引力。且政府态度和政策都是一种信号,表明2005年对本土网络游戏的扶持力度将加大;国内游戏厂商将可获得发展的核心技术平台;政策有利于保护中国游戏软件的自主知识产权;这为网络游戏发展创造了良好的政策环境。1.2.2操作可行性由于在整个系统的开发过程中从操作简便、界面美观、灵活实用的用户要求为出发点,界面设计时充分考虑玩家的感受,界面比较直观,交互性很好,所以操作起来简单明了。1.2.3法律可行性信息产业部已将网络游戏通用引擎研究及示范产品纳入国家“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.2结构设计阶段1.经过系统设计阶段的思考和实践,需要对功能结构进行细致的划分。一个程序的结构设计的好坏也是决定其发展的重要指标。对一个程序的模块划分往往也能使程序设计变得简单。本游戏的模块大致分为游戏引擎和用户界面两大模块而,游戏引擎模块又分为核心包、ai包、网络包、本地翻译包、游戏控制类等等,其功能模块图示如下:King游戏游戏引擎用户界面网络模块核心模块游戏控制模块AI模块本地翻译模块图3-1系统功能模块结构图功能模块介绍:<1>king.engine.core包:其中包括了一些基本核心的类,例如像表示一个国家的Country类,表示一个卡片的Card类,表示一个版块的Continent类,表示一个玩家的Player类以及表示一个任务的Mission类等等。<2>king.engine.ai包:其中包括了玩家可选择的简单人工智能的电脑玩家和复杂人工智能的电脑玩家以及不同游戏类型的不同玩家的人工智能。<3>king.engine.translation包:其中包括了用于将游戏中的语言根据计算机所处的不同的国家翻译成不同的语言的类。<4>king.engine.net包:其中包括了将游戏用于网络联机玩用到的类。<5>游戏控制模块:主要包含一些我自己定义的一些接口和过滤器类等工具类。 系统用例图见下页:图3-2系统用例图游戏设置用例图:图3-3游戏设置用例图 网络联机用例图:图3-4网络联机游戏用例图游戏用例图:图3-5游戏用例图 2.系统的主要UML图见下页:图3-2Risk类的依赖关系图图3-3SwingGUIPanel类的依赖关系图 图3-4RikGame类的依赖关系图 4详细设计详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。详细设计的结果基本上决定了最终程序代码的质量。详细设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。结构程序设计技术是实现上述目标的关键技术,因此是详细设计的逻辑基础。4.1核心包的设计游戏中需要经常用到的常有名词有卡片、国家、任务、玩家、版块、统计资料等等,所以我们由此可以确定这些基本的核心类:Card、Continent、Country、Mission、Player、Statistic;4.1.1Card类的设计与实现:在游戏过程中某一些国家中会有卡片,当你没占领了这样的国家的时候,你就能获得卡片,当你获得了几张放在一起可以交易的卡片的时候你就可以用卡片换军队了,所以在该类中有卡片的名字,所属国家等属性,该类的类图如下所示:图4-1Card类的类图Card类的主要代码如下:publicclassCardimplementsSerializable{……publicCard(Stringn,Countryt){name=n;Country=t;}publicStringgetName(){returnname;}publicCountrygetCountry(){returnCountry;}} 4.1.1Continent类的设计与实现:游戏中的图片都是世界地图,其中包括几个洲,这些洲再分成一个一个国家,洲有自己的名字和颜色,并且每个洲都有它的对应的价值的军队数,当你占领了一个洲的时候,当下一轮到你进攻的时候,你可以获得相应数目的军队,在其他对象访问该对象时,可以获得它的名字,颜色,价值军队数和所属的玩家,其类图见图4-2所示:图4-2Continent类的类图Continent类的主要代码如下:publicclassContinentimplementsSerializable{……publicbooleanisOwned(Playerp){intownedByPlayer=0;for(intc=0;c0){risk.GameParser(str);}}}catch(IOExceptione){……}if(badexit){risk.kickedOff();}}}ChatReader类:publicclassChatReaderextendsThread{……ChatReader(BufferedReaderin,ChatAreacArea,intindex){super("ChatReaderThread");mySocketInput=in;myIndex=index;myChatArea=cArea;}publicvoidrun(){ StringinputLine;try{while((inputLine=mySocketInput.readLine())!=null)myChatArea.putString(myIndex,inputLine);}catch(IOExceptione){}}}ChatServerThread类:publicclassChatServerThreadextendsThread{……publicChatServerThread(Socketsocket,ChatAreacArea,intme){super("ChatServerThread");this.socket=socket;myChatArea=cArea;myIndex=me;}publicvoidrun(){StringoutputLine;try{PrintWriteroutChat=newPrintWriter(socket.getOutputStream(),true);BufferedReaderinChat=newBufferedReader(newInputStreamReader(socket.getInputStream()));myReaderThread=newChatReader(inChat,myChatArea,myIndex);myReaderThread.start();do{outputLine=myChatArea.waitForString(myIndex);if(outputLine!=null)outChat.println(outputLine);}while(outputLine!=null);inChat.close();outChat.close();socket.close();}catch(IOExceptione){}}}4.1人工智能包的设计该包主要是用来实现游戏中电脑玩家的人工智能,游戏的电脑玩家可以分为简单ai的玩家和具有复杂ai的玩家:简单ai电脑玩家只能进行一些简单的判断,向哪个国家进攻和部署多少军队以及如何部署军队都是随机的,而具有复杂ai的电脑玩家能进行复杂的判断,能根据敌人军队的部署来选择放置军队的方式和数量,来选择进攻的方式以及防守的方式;具体的一些属性和方法见以下类图: 图4-6AIEasy类的类图图4-7AIHard类的类图其中复杂ai的几个重要的判断方法的主要实现代码如下:1.判断某一个版块是否大部分被某个玩家占领了的方法mostOwned(Continentw){}:方法中定义了一个整型的变量ownedByPlayer来记录被该版快中的一个国家一个玩家所占领,在用for循环方法一个一个检验该版快内的所有国家是否都被某个player给占领了,如果被某个玩家占领的国家数超过了该版快上国家数的一半则算是该玩家大部分占领了该版快,则方法返回true,否则返回false。 publicbooleanmostlyOwned(Continentw){intownedByPlayer=0;VectorterritoriesContained=w.getTerritoriesContained();for(intc=0;c=(territoriesContained.size()/2)){returntrue;}else{returnfalse;}}2.用来判断将军队放在哪个大陆上主要方法getPlaceArmies():publicStringgetPlaceArmies(){Stringoutput;if(game.NoEmptyCountries()==false){……for(inti=0;iscreenSize.height)?screenSize.height:frameSize.height);frameSize.width=((frameSize.width>screenSize.width)?screenSize.width:frameSize.width);gui.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);gui.setVisible(true);}}当你单击选择进行新游戏时,出现游戏设置面板,如图4-9所示;当你选择载入游戏时,如图4-10所示;控制台面板如图4-12所示;统计面板如图4-13所示;游戏中的界面如图4-11所示;卡片交易面板如图4-14所示;关于面板如图4-15所示; 图4-9游戏设置面板图4-10载入游戏面板 图4-11游戏过程中实现这些界面的是类SwingGUIPanel,其中实现游戏界面的方法主要是GamePaenl()主要实现代码:publicGamePanel(){pp=newPicturePanel(myrisk);pp.setPreferredSize(mapSize);pp.setMinimumSize(mapSize);pp.setMaximumSize(mapSize);pp.setBorder(javax.swing.BorderFactory.createLineBorder(newjava.awt.Color(0,0,0),1));pp.addMouseListener(this);pp.addMouseMotionListener(this);DimensiongameOptionsSize=newDimension(PicturePanel.PP_X,25);gameOptions=newGameOptionsPanel();gameOptions.setPreferredSize(gameOptionsSize);gameOptions.setMinimumSize(gameOptionsSize);gameOptions.setMaximumSize(gameOptionsSize);Dimensiond=newDimension(PicturePanel.PP_X,50); inGameCards=newCardLayout();inGameInput=newJPanel();inGameInput.setLayout(inGameCards);inGameInput.setPreferredSize(d);inGameInput.setMinimumSize(d);inGameInput.setMaximumSize(d);JPanelnothing=newJPanel();……JPanelresults=newJPanel();……JPanelplaceArmies=newplaceArmiesPanel();……roll=newrollPanel();JPanelmove=newmovePanel();JPanelattack=newattackPanel();defend=newdefendPanel();……//###################INGAME#######################this.setLayout(newjava.awt.GridBagLayout());GridBagConstraintsc=newGridBagConstraints();c.insets=newjava.awt.Insets(3,3,3,3);c.fill=GridBagConstraints.BOTH;c.gridx=0;//colc.gridy=0;//rowc.gridwidth=1;//widthc.gridheight=1;//heightthis.add(gameOptions,c);c.gridx=0;//colc.gridy=1;//rowc.gridwidth=1;//widthc.gridheight=1;//heightthis.add(pp,c);c.gridx=0;//colc.gridy=2;//rowc.gridwidth=1;//widthc.gridheight=1;//heightthis.add(inGameInput,c);} 图4-12控制台面板图4-13统计面板 图4-14交易面板图4-15关于面板 5用户使用手册5.1系统环境说明本游戏没有操作系统的限制,没有硬件的限制,只要求是在PC机上且该机子装了JRE(1.4及以上版本),这就是用Java开发出来的游戏的优势。而本游戏是在WindowsXP操作系统,jdk1.6版本环境下开发及测试通过的。5.2系统简介5.2.1系统特点⑴用户无需考虑系统的维护;⑵操作简单,一目了然;⑶JAVA开发,可移植性好;5.2.2操作方法我将本游戏的所有类文件打包成了king.jar文件,并且编辑了一个SwingGUI.cmd命令行文件,玩家只需要双击该命令行文件就可以运行游戏了,游戏菜单栏有四个菜单:游戏、控制台、统计和帮助。在菜单下一行是二级菜单。如图所示:图5-1游戏菜单当你选择想进行一轮新的游戏时,你可以选择“新游戏”,如果你曾经保存过了游戏,你想接着玩,可以选择“装载游戏”;刚开始游戏时,“保存游戏”按钮和“关闭游戏”按钮是灰色的(不可点击),只有游戏过程当中才能保存和关闭游戏;如果你想进行网络联机游戏,并做服务器,可以点击“启动服务器”,等待其他玩家的加入,若网上有其他玩家已经建立了游戏,你可以选择“加入游戏”如果玩家想了解一下游戏的其他信息,可以选择“关于”,你也可以通过点击“退出”按钮退出游戏或则直接关闭游戏窗口。图5-2控制台菜单控制台会在在整个过程中记录并显示游戏中用过的命令,玩家可以通过直接点击按钮进行游戏,也可以通过控制台的命令行输入命令来进行游戏,只需要点击“命令” 按钮就可以看到多有的命令列表和说明。图5-3统计菜单统计菜单可以让玩家选择某个数据的统计图,例如玩家只需点击“国家”按钮就可以看到各个玩家在游戏过程中的国家的数目的统计图,选择“军队”按钮就可以看到游戏过程中各个玩家的军队数目的统计图,依次类推。在进行单机新游戏时,玩家可以自己选择电脑玩家的数量和难度,数量不同的游戏模式有所不同,每个玩家有自己的名字和颜色都可以设置,如图:图5-4设置玩家面板游戏模式分为统治、首都和任务三种,统治模式是玩家要占领所有玩家为胜利,首都模式是玩家需要将敌人的首都都占领算胜利,任务是在电脑随机分配了军队的情况下占领全世界为胜利,玩家通过单选框选择,如图所示:图5-5选择游戏类型游戏开始后玩家只需要随的游戏中的提示进行就可以了。5.3游戏需要改进的地方本游戏完全是基于java图形开发的,没有设计到声音的开发,所以在游戏的以后版本中将会在游戏中加入声音效果,并且游戏的界面并不是很美观,所以在游戏的后续版本中会继续美化游戏的界面;还有一点就是游戏的网络包部分还存在很多的bug,经常会出现一些问题,有时候会连接不上,这也是本游戏主要的需要改进的地方。 结论本次毕业设计到此就已经顺利结束了,通过这次的毕业设计,我学到了很多东西。在以前的三年多的时间里我学习了很多的课程,从开始的计算机理论基础,到c语言,数据结构,c++,Java,数据库系统概论等等。虽然通过学习对这些课程有所了解和掌握,但也只是肤浅的了解,也只是停留在对理论知识的理解阶段,对知识的中我还不够全面和熟练,并不能进行编程开发,更不用说实际项目的开发了。这次的毕业设计,使我将大学四年中所学到的很多东西贯串起来,并真正地第一次的在实践中运用起来,在设计中还存在许多我们平时没有接触过的新知识,这就培养了我快速自学和应用新知识的能力。此次设计不仅是对我所学知识的一次综合应用,更是对我综合分析实际问题、处理实际问题、解决实际问题的能力的培养和锻炼。在本次毕业设计中我需要学习的不仅仅是JAVA语言和NeatBeansIDE开发工具,还有其他很多方面的知识都需要我去了解和掌握。本文同时运用了UML的基本知识,以及使用UML进行建模的方法,通过敏捷型方法思想,完成了本系统的UML建模工作,并在UML模型的基础上,实现了该游戏。虽然对该UML建模方法作了一定的学习和探索,但是,由于时间、条件有限,经验不足等,本文所做的工作还有很多不足,还有很多方面需要进一步学习和研究。学习最终是为了服务社会,我即将踏入社会,通过毕业设计的训练,我将会更加适应这个社会。成绩已属于过去,面对未来,我充满信心!相信明天一定会更好! 参考文献[1]ThomasPetchel.JAVA2游戏编程.北京:清华大学出版社,2005[2]J.Rumbaughetal,Object-OrientedModelingandDesign,PrinticeHall,1991[3]PatrickKeegan,LudovicChampenois,GregoryCrawley,CharlieHunt,ChristopherWebster.NetBeansIDE中文版用户指南.机械工业出版社,2006[4]BruceEckel.Java编程思想(第3版).机械工业出版社,2005[5]良葛格.Java学习笔记.清华大学出版社,2006.[6]林智扬,范明翔,陈锦辉.深入浅出JavaSwing程序设计.北京:中国铁道出版社,2005.5[7](美)赫伯特著,马海军,景丽等译.Java实用教程.北京:清华大学出版社,2005.12[8]印旻.Java与面向对象程序设计教程.北京:高等教育出版社,2002.8[9]朱福喜,傅建明,唐晓军.Java项目设计与开发范例.北京:电子工业出版社,2005.10[10]HerbertSchildt著,鹿江春译.Java参考大全.北京:清华大学出版社,2006.1[11][美]CayS,Horstmann,GaryCornell著,叶乃文等译.Java核心技术(第7版)卷I:基础知识.北京:机械工业出版社,2006.5[12]湘沪科技.Java类库查询辞典.北京:中国铁道出版社,2004.12[13](美)吉瑞(GEARY,D.M.)著,李建森等译.Java2图形设计卷Ⅱ:SWING..北京:机械工业出版社,2002.2[14]张海藩.软件工程导论(第四版).北京:清华大学出版社,2003.5.[15]CSDNJava频道.http://java.csdn.net/[16]JR.http://www.javaresearch.org/[17]中文JAVA技术网.http://www.cn-java.com/[18]中国Java开发网.http://www.cjsdn.net/index.html[19]JAVA中文站.http://www.java-cn.com/zhuanti/user.jsp[20]www.javaranch.com 致谢当我以学子的身份踏入北京理工大学珠海学院校门的那天起,便已注定我将在这里度过人生中最美丽的青春年华。提笔写下“谢辞”,我才惊觉自己即将真正离开,人生亦从此展开新的画卷。尽管不舍,却更珍惜,因为我的生命中有那么多可爱的人值得感激。他们使我的大学生活充满了色彩,无论收获、遗憾,对我来说都是一笔宝贵的财富。饮其流时思其源,成吾学时念吾师,在此论文完成之际,谨向我尊敬的导师夏力前先生致以诚挚的谢意和崇高的敬意。在大学学业的最后阶段,无论是实验研究还是论文撰写,夏老师都将他的知识、经验心得毫无保留的传授给我们,给我们耐心的指导,并给我搭建了良好的学习平台。感谢计算机科学技术学院的老师们,与这些老师的近距离接触,也让我深深感动于他们治学的严谨和对学生的赤诚之心。大学之大,不在于大楼,而在于大师,他们,无愧于大师的称谓。另外,向在工作之余还要抽出时间对我的论文进行评阅及考核并提出宝贵意见的各位专家、教授致以最衷心的感谢!大学三年朝夕相处的同学也是宝贵的财富。感谢同室好友让我获得了情同手足的真挚友情,我们一起开心玩闹、互相倾听、探讨未来的时光,这些都将成为我大学三年的美好回忆。感谢所有师兄弟妹、同学、朋友们,是你们的情谊和帮助,让我感到踏实温暖。祝福我们都能快乐,今后常有相聚时候。感谢北京理工大学珠海对我三年的培养,在北理工的三年,是我人生中最重要的三年,是学校的培养让我学到了专业的科学文化知识,同时也提升了我的多方面的能力,塑造了我的人格,使我在未来的人生道路上能够更加信心百倍的走下去。感谢我的父母,我的家人。焉得谖草,言树之背,养育之恩,无以回报。你们始终如一的支持和关爱是我人生道路不断前进的强大动力,教我学会坚强、勇敢,使我在磨砺中得到成长。祝你们永远健康快乐,这是我最大的心愿和牵挂。在此,祝导师夏先生,以及所有关心我的人和我所关心的人身体健康,工作顺利,心情愉快,幸福平安!'