泛化关系和各个参与者所参与的用例,以及用例之间的关系。
图3-2玩家操作游戏的用例图
3.4.2 游戏的包图
包图是维护和控制系统总体结构的重要建模工具[4]。创建包图是在为了在逻辑上把一个复杂的系统模块化,进而高效地组织Java源代码。游戏的包图如图3-3所示,通过该图可以清楚地看到游戏中各个包之间的关系,为后续的游戏设计提供方便。
图3-3 游戏的包图
3.4.3 游戏的状态图
状态图是系统分析的一种常用工具,它能够表征系统的变化状态。单机版游戏的状态图如图3-4所示。双人对战版游戏服务器端和客户端的状态图分别如图3-5和图3-6所示。
图3-4 单机版游戏状态图
单机版:玩家进入单机版游戏模式后,可以点击"开始"按钮开始游戏,游戏进行过程中如果游戏最小化或者玩家点击"暂停"按钮或菜单项,则游戏暂停。如果游戏界面恢复或玩家点击"继续"按钮或菜单项则游戏可以继续,游戏进行过程中玩家还可以点击"停止"按钮或菜单项,使游戏停止。无论游戏是否进行,玩家都可以点击"退出"按钮或菜单项退出游戏。
活动图是UML用于对系统的动态行为建模的一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流[4]。活动图在本质上是一种流程图。俄罗斯方块游戏总的活动图如图3-7所示。
玩家进入游戏主界面后,可以选择游戏模式:单机版或双人对战版。选择相应的模式即可进入游戏。
单机版:如果玩家选择了单机版,即可对游戏进行相应的设置,包括游戏难度级别设置、方块颜色设置、背景颜色设置、背景音乐设置、窗口风格设置等。然后可以开始游戏。玩家也可先开始游戏,再进行相应的设置。一旦游戏开始,玩家即可对游戏的状态进行控制,包括暂停游戏、继续游戏和退出游戏的操作。
图3-7 俄罗斯方块游戏的活动图
3.4.5 游戏的时序图
时序图描述了对象之间传统消息的时间顺序,它用来表示用例中的行为顺序。当执行一个用例行为时,时序图中的每条消息对应了一个类操作或状态机中引起转换的触发事件[4]。
游戏中单机版游戏的时序图如图3-8所示,从图中可以看到,单机版游戏的时序图涉及了8个对象:player(玩家)、game(游戏主类)、music(音乐文件)、controlPanel(控制面板)、canvas(画布)、block(方块类)、enterframe(输入对话框)、heroframe(排行榜)。游戏的动作从玩家进入游戏开始,背景音乐自动播放,然后玩家可以设置游戏难度级别和方块及背景颜色,设置成功后玩家可以通过点击"开始"按钮进行游戏。游戏过程中,不断检查是否有满行方块并检查游戏是否结束,如果有满行就移除,当方块填满整个画布时,游戏结束。此时弹出输入对话框,玩家输入后点击"确定"按钮,将插入到排行榜,排行榜就会自动显示出来。
图3-8 单机版游戏的时序图
图3-9(a) 服务器端玩家的时序图
客户端:玩家进入游戏后,背景音乐自动播放,玩家可以通过控制面板控制背景音乐。同时设置主机和端口号向服务器端发出连接游戏请求。当成功连接服务器时,玩家可以点击控制面板上的"开始"按钮进行对战,此时玩家可以控制方块的状态,通过画布绘制方块来显示游戏进程,不断检查是否有满行方块并检查游戏是否结束,如果有满行就移除,当有一方玩家游戏失败时,发出游戏结束消息给游戏主类,此时游戏结束。4总体设计
4.1 总体设计概述
经过了需求分析阶段的工作,系统必须"做什么"已经清楚了,现在是决定"怎么做"的时候了。总体设计的基本目的就是回答"概括地说,系统应该如何实现?"这个问题[2]。通过这个阶段的工作将划分出组成系统的物理元素。总体设计部分的重要任务就是确定软件的总体结构,也就是要确定系统中每个程序是有哪些模块组成的,以及这些模块之间的关系,同时也包括数据库的设计。
4.2 总体设计思想
俄罗斯方块游戏设计的主要从以下12个方面进行构思:
(1)游戏主界面的设计。
(2)俄罗斯方格的表示。
(3)俄罗斯方块的表示。
(4)俄罗斯方块的旋转。
(5)俄罗斯方块的运动情况(包括向左、向右、向下和丢下)。
(6)俄罗斯方块的自动消行功能。
(7)游戏级别的自由选择。
(8)游戏得分的计算。
(9)游戏菜单选项的设计及功能实现。
(10)游戏背景音乐的播放功能。
(11)俄罗斯方块单机版的具体实现。
(12)俄罗斯方块双人对战版的具体实现。
首先,是定义与游戏相关的数据的存储方法,分为两个主要的部分:一个是当前的方块,需要保存位置、当前的旋转状态;另一个是屏幕区域的状态,这可以用一个二维数组来表示。
其次,分析得到按键的含义,做出响应,响应模块:"左移"、"右移"、"下移"、"丢下"和"旋转"几个模块,负责改变当前方块的状态数据;画方块模块:位置移动后,把方块画到新的位置之上;检查模块:在每次改变状态之前,对方块企图占用的区域进行检查。如果无处可放,则此次移动失败。如果方块到区域底端了,则应该固定在当前位置,这可以通过调用前面的画方块模块来实现,同时再产生一个新的方法。这样还需要写一个产生新方块的模块。每次当方块到底的时候,都需要检查一下是否有新的层排满了,如果有,则应该消层,如果这个位置已被占用,则游戏结束,这需要通过调用前面的检查模块来实现。最后检查系统时间,规定每过一个指定的时间间隔就调用一次方块下落模块。
俄罗斯方块是一个非常复杂但比较有趣并且耐玩的游戏,游戏中共有7种方块,每种方块由4个方格组成,如图4-1所示。
图4-1 游戏中的7种方块
4.3 系统的类图
类图描述系统中的类的静态结构,它不仅定义系统中的类,描述类之间的联系,还包括类的内部结构(类的属性和操作)[5]。通过分析用例和问题域,就可以等到相关的类,然后再把逻辑上相关的类封装成包。
4.3.1 俄罗斯方格类的类图
图4-2所示为俄罗斯方格类的类图
图4-2 俄罗斯方格类的类图
RussiaBox:方格类,是组成俄罗斯方块的基本元素,用自己的颜色来表示块的外观。
4.3.2 单机版俄罗斯方块游戏的类图
图4-3所示为单机版俄罗斯方块游戏的类图。其中包括:
① SingleBlock:单机版游戏的方块类,控制块的移动、下落、旋转变形等。
② SingleControlPanel:单机版游戏的控制面板类,上边安放预显即将出现的方块类型的窗口、难度级别、得分、游戏状态控制按钮、背景音乐控制按钮。
③ SingleGameCanvas:单机版游戏的画布类,画布类通过检查方格颜色来体现方块的移动情况。
④ Music:单机版游戏的音乐类,实现背景音乐播放功能、更换背景音乐功能、暂停播放功能、继续播放功能和各种音效播放功能。
⑤ SingleBlocksGame:单机版游戏的主类,负责游戏的全局控制。内含:一个画布类的实例引用,一个保存当前活动块实例的引用,一个保存当前控制面板实例的引用。
图 4-3 单机版
上一篇:
个人网站毕业论文(word文档)
下一篇:
月入5000,你有什么资格谈生活