第6页 共41页
应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。
2.游戏界面设计的需求分析:
作为一个游戏吸引玩家的重要方面,游戏的界面要很漂亮,图形动画的设计是非常必要的。本作将采用模拟动画的方式将战争展现在玩家眼前。设计出丰富的战争环境,游戏中为了美观,适用性强,需要采用外部文件引入的图片贴图,而Java中提供了用于处理图片的功能包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。
2.1.3 系统的可靠性和可用性需求分析
可靠性需求定量地指定系统的可靠性。例如,游戏在运行过程中不能频繁发生错误而不得不终止游戏。
可用性则与可靠性密切相关,它量化了用户可以使用系统的程度。例如,游戏的运行必须保证随时可以,不能在一段不使用的时间内,游戏产生不可预见的错误而致无法运行等等。
2.2 数据流分析
数据流程分析主要包括对信息的流动、传递、处理、存储等的分析。数据流程分析的目的就是要发现和解决数据流通中的问题。通过对本系统的需求分析,确定了系统的基本功能。整个系统的数据流图如图2-1所示:
玩家事务1.0进入游戏玩家信息1.1设置玩家卡片类型1.2设置卡片游戏类型军队信息2开始游戏设置信息1.4设置地图地图信息1.3设置游戏类型2.1各个玩家放置军队玩家信息2.2设置进攻者玩家信息2.3设置防守者事务2.4滚动骰子骰子结果3交易卡片卡片信息2.6军队的移动战争结果2.5进行战争游戏信息交易信息战争结果3.2放置军队游戏信息军队信息3.1换算军队没有胜利4判断是否胜利胜利D1 游戏保存文件5游戏结束
图2-1 系统数据流程图
第7页 共41页
3 总体设计
总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构和功能模块。
3.1 系统开发 3.1.1 系统开发的原则
经过需求分析阶段的工作,系统必须“做什么”已经清楚了,现在是决定“怎么做”的时候了。总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。通过这个阶段的工作将划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等等,但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
总体设计过程首先寻找实现目标系统的各种不同的方案,需求分析阶段得到的数据流图是设想各种可能方案的基础。然后从这些供选择的方案中选取若干合理的方案,为每个合理的方案都准备一份系统流程图,列出组成系统的所有物理元素,进行成本/效益分析,并且指定实现此方案的进度计划。通常,设计出初步的软件结构后还要多方改进,从而得到更合理的结构,进行必要的数据库设计,确定测试要求并且制定测试计划。
基于上面的叙述,在详细设计之前先进行总体设计的必要性:可以站在全局高度上,花较少成本,从较抽象的层次上分析比对多种可能的系统方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。
3.1.2 系统设计阶段
系统设计阶段的主要目的就是确定软件如何做的问题。主要任务就是确定系统中的大模块和设计方法,确定软件的功能模块和模块的作用,组成,关系等等。
本系统是一款希望可以基于网络的多人对战游戏,当游戏者打开游戏,游戏界面打开,然后玩家可以选择是进行一轮新的游戏,还是选择接着玩上次没玩结束的游戏(如果先前已经玩过该游戏,但没有玩结束,有事了,并且保存了),只需要选择载入游戏就可以;玩家还可以选择是进行单机游戏或是联机游戏,如果选择网络联机玩的话只需要启动服务器等待其他玩家加入就可以了;如果选择了单机游戏,并选择了进行一轮新的游戏,则游戏会出现游戏设置界面,通过该界面玩家可以设置游戏的玩家数量(2-6个)以及游戏的难度,电脑玩家有简单智力的和高智力的,然后玩家可以选择不同的卡片模式和不同的游戏模式(分为统治型、首都型和任务型),并且玩家可以选择不同的游戏地图,游戏的目标是统治全世界,当玩家设置好一切后,可以点击开始游戏,则游戏开始。
游戏开始,游戏画面是一张被分割成多个国家的地图,每个玩家可以轮流在地图上选择自己的地盘和军队的布置,而电脑玩家也会自动放置军队,当每个国家都被放上军队后,才可以重复在一个国家放置多余的军队,当默认的所有军队全都放置好,然后玩家就可以
第8页 共41页
开始统一全球的战争游戏了,而当一方的军队侵略另一边时,游戏程序通过一定的人工智能算法让战争的双方分别产生随机数,然后进行比较,大的一方胜利,而当进攻者与防守者产生的数字一样大时,算是进攻失败,如果进攻胜利,则胜者将占领该国家,并可以选择留守该国家的军队数,而等到下一轮到该玩家进攻时,可以根据该玩家在占领的领土来决定你可以增加多少军队,以及你可以获得的卡片,获得的卡片可以用来交换军队,最后占领全世界(消灭了其他两个玩家)的为胜利者。在游戏过程中如果玩家突然有事无法继续游戏,本游戏可以保存当前游戏状态,当玩家有时间时可以接下去游戏,而无需重新开始,玩家也可以将自己的机器作为服务器,通过网络与网络上的其他玩家一起游戏。本游戏还具有统计的功能,在你游戏过程中或则游戏结束后你可以查看在本局游戏中各个玩家各个方面的战绩的统计(例如每个玩家在游戏过程当中所占领的国家数、军队数、摧毁数、伤亡数、受到进攻的次数等等),游戏中还设置了控制台,玩家可以通过图形显示的按钮进行游戏,也可以通过命令来进行游戏,在游戏菜单栏的帮助中,玩家可以选择命令按扭来显示出游戏中可用的命令菜单,玩家可以通过选择其中的关于了解本游戏的一些信息。 当你赢的了游戏,游戏会告诉你,你胜利了!
关于线程:对象技术提供了一种把程序划分成若干独立部分的方式。通常,还需要把程序转换成彼此分离的、能独立运行的子任务。每一个这样的独立子任务都被称为一个“线程”。每个线程都好象是在独立运行并且有自己的CPU。CPU时间确实是通过某些底层机制进行分配的,不过你一般不考虑这些,这使得编写多线程程序的任务变得容易得多了。多线程有多种用途,不过通常用法是,程序中的某个部分与一个特定的事件或资源联系在一起,而又不想让这种联系阻碍程序其余部分的运行。这时候,可以创建一个与这个事件或者资源相关联的线程,并且让此线程独立于主程序运行。使用并发的最引人瞩目的理由之一就是,产生一个可作出响应的用户界面。考虑一个程序,它要执行某项强烈需用CPU的计算,这样就会导致用户的输入被忽略,也就无法作出响应。问题的实质是:程序需要一边连续进行计算,同时还要把控制权交给用户界面,这样程序才能响应用户的操作。
并发还可以用来优化吞吐量。比如,在等待数据到达输入/输出端口的同时,可以进行其他重要的工作。要是不用线程的话,唯一可行的办法就是不断查询输入/输出端口,这种方法不仅笨拙,而且很困难。
线程模型为编程带来了便利,它简化了在单一程序中同时交织在一起的多个操作的处理。在使用线程时,CPU将轮流给每个线程分配其占用时间。每个线程都觉得自己在一直占用CPU ,但事实上CPU时间是划分成片段分配给了所有线程。例外情况是程序运行在具多个CPU的机器上,但线程的一大好处是可以使你从这个层次抽身出来,即代码不必知道它是运行在具有一个还是多个CPU的机器上。所以线程是一种透明的、可扩展的程序方法,如果程序运行的太慢,为机器增添一个CPU就能很容易地加快程序的运行速度。多任务和多线程往往是使用多处理器系统的最合理方式。
游戏中将在很多地方用到多线程,像在进行网络联机时将会使用多线程来是两个玩家可以同步进行游戏,而图形界面也通过多线程同时进行多的程
第9页 共41页
序的进行。
3.1.3 结构设计阶段
1. 经过系统设计阶段的思考和实践,需要对功能结构进行细致的划分。一个程序的结构设计的好坏也是决定其发展的重要指标。对一个程序的模块划分往往也能使程序设计变得简单。
本游戏的模块大致分为游戏引擎和用户界面两大模块而,游戏引擎模块又分为核心包、ai包、网络包、本地翻译包、游戏控制类等等,其功能模块图示如下:
King游戏 游戏引擎 核心模块 AI模块
功能模块介绍:
<1>
用户界面 网络模块 本地翻译模块 游戏控制模块 图3-1 系统功能模块结构图
king.engine.core包:其中包括了一些基本核心的类,例如像表示一个国家
的Country类,表示一个卡片的Card类,表示一个版块的Continent类,表示一个玩家的Player类以及表示一个任务的Mission类等等。
<2> <3> <4>
king.engine.ai包:其中包括了玩家可选择的简单人工智能的电脑玩家和复king.engine.translation包:其中包括了用于将游戏中的语言根据计算机所king.engine.net包:其中包括了将游戏用于网络联机玩用到的类。
杂人工智能的电脑玩家以及不同游戏类型的不同玩家的人工智能。 处的不同的国家翻译成不同的语言的类。
<5> 游戏控制模块:主要包含一些我自己定义的一些接口和过滤器类等工具类。
第10页 共41页
系统用例图见下页:
图3-2 系统用例图
游戏设置用例图:
图3-3 游戏设置用例图