SEProjectSDD.docx

上传人:b****5 文档编号:7251234 上传时间:2023-01-22 格式:DOCX 页数:33 大小:233.39KB
下载 相关 举报
SEProjectSDD.docx_第1页
第1页 / 共33页
SEProjectSDD.docx_第2页
第2页 / 共33页
SEProjectSDD.docx_第3页
第3页 / 共33页
SEProjectSDD.docx_第4页
第4页 / 共33页
SEProjectSDD.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

SEProjectSDD.docx

《SEProjectSDD.docx》由会员分享,可在线阅读,更多相关《SEProjectSDD.docx(33页珍藏版)》请在冰豆网上搜索。

SEProjectSDD.docx

SEProjectSDD

Survivor软件设计说明

Version1.0

Revision

Date

Version

Description

Author

2007-5-17

0.1

初步设计文档

廖洪申、林雁彬

2007-5-18

0.5

小组初步评议后的设计文档

第四小组全体成员

2007-6-15

1.0

初步完善的设计文档

第四小组全体成员

1.引言

本文档是在Survivor游戏软件规格说明SEProject_SRS文档的基础上对Survivor游戏所作的软件设计说明。

具体内容包括系统的总体组织结构、模块分解、模块间的依赖关系、接口说明和详细设计等。

目的

本文档的读者对象是Survivor游戏的所有开发人员、测试人员、系统维护人员等。

本文档的主要目的是清楚地描述系统的设计思路和体系架构,为开发人员进行代码的详细开发提供标准和依据。

同时,本文档对系统的模块进行了详细的划分并定义了相互之间的接口,利于开发人员进行并行开发。

测试人员可以根据本文档的模块划分对软件进行详细的单元和模块测试。

同时,本文档为未来可能的对系统的维护和升级提供技术参考。

范围

我们要开发的游戏名为Survivor,是一款角色扮演类的视频游戏。

1.0的版本将只支持人机对战,玩家和电脑分别控制一个人物。

玩家和电脑均具有5项属性,并且可以重新分配这5项属性的值。

玩家和电脑在一个由多个房间构成的场景里活动,每个房间均具有各自的属性。

玩家和电脑均可在各个房间活动,并且在相遇时玩家人物选择战斗,双方的强弱由双方所在房间属性决定。

战斗后负者须向胜者转移属性,总属性最先为0的一方失败。

在扩展版本里,可能将实现网络对战的功能,并有可能开发基于3D的视频游戏。

为了增加游戏的可玩性,有可能会在游戏中增加“宝物”等设计。

定义和缩写

缩写

定义

SRS

SoftwareRequirementSpecification

SDD

SoftwareDesignDescriptions

IEEE

InstituteofElectricalandElectronicsEngineers

HP

人物生命值,即人物自身所有属性的总和

2.参考文献

[1]视频游戏Survivor问题描述1.0,刘强、卢凯。

[2]面向对象技术UML教程,王少锋,2004年清华大学出版社。

[3]软件需求规格说明,第四小组。

3.分解说明

本软件采用“模型/视图/控制器”的结构作为系统结构。

在玩家进行游戏的过程中,系统要显示多个房间和场景,游戏界面的显示是程序很重要的一个模块。

而对玩家移动、战斗、属性分配等的逻辑控制也并不十分简单,需要一些专门的游戏控制器来控制游戏的状态。

视图和控制器都是基于具体的人物属性、位置等实体数据来进行的,这些数据是程序的基础,组成了程序的实体数据模块。

这样,系统分为实体数据模块、界面显示模块以及控制模块等。

其中,实体数据模块对应的包是Role。

界面显示模块对应的包是Scene。

控制模块对应的包是Control。

另外,为了提高系统一些常用类的可重用性,我们将这些被重复利用的基础类统一放在Utility包下,供其他包共同调用。

为了对外提供统一的接口,尽量降低系统各个模块之间的耦合度,增加包的内聚程度,我们在Role、Scene等包内分别添加了统一提供对外控制接口的类,外部的类只需调用包内的控制接口类即可实现对包内的类的统一调用。

模块分解

实体数据模块

实体数据模块对应的包是Role。

它所包含的类如表2所示:

表2Role包

包功能描述

类名

类功能描述

Role包:

完成游戏人物的数据控制包括属性配置,当前状态等。

RoleCommon

人物部分基本数据定义

BaseRole

人物基类定义人物的基本特征和方法

UserRole

玩家人物

ForeignRole

外部人物

RoleManage

人物管理接口

Role包的类之间的关系如图1所示:

图1Role包的内部关系

界面显示模块

界面显示模块对应的包是Scene。

它所包含的类如表3所示:

表3Scene包

包功能描述

类名

类功能描述

 

Scene包:

完成界面显示部分,包括初始界面,主界面。

主界面中含人物显示和移动部分,房间显示部分,各种面板显示部分。

SceneCommon

场景基本数据定义

人物显示

AnimationMeshContainer

AllocateHierarchy

AnimationFrame

人物显示数据加载辅助类

AnimationRole

人物显示数据加载和渲染

Magic

人物魔法渲染

RoleMoveControl

玩家和外部人物移动控制

房间显示

BaseHouse

房间基类

House

房间数据加载

Courtyard

院子显示

Sky

天空渲染,只有在院子里才显示

HouseControl

游戏房间的加载和显示

面板显示

MapViewport

小地图

MessageViewport

消息面板,游戏状态信息发布

GamePausePanel

游戏暂停面板

PassageViewport

通道信息显示面板

BottomViewport

底部面板

AttrPanelView

属性面板显示和部分消息处理

AttributePanel

属性面板供主窗口和初始化窗口调用

MainView

主界面控制显示部分

InitMenuView

初始菜单界面

InitSetView

初始设置界面

Scene包的类之间的关系如图3所示:

图2Scene包的内部关系

控制模块

控制模块对应的包是Control。

它所包含的类如表4所示:

表4Control包

包功能描述

类名

类功能描述

Control包:

完成游戏的控制逻辑,接收来自窗口的交互信息实现对人物和显示控制

ControlCommon

控制部分基本数据

Camera

摄影类实现三维场景视角调整

DeviceManage

设备管理器

GameState

游戏状态机完成游戏状态调整

MainFrame

主窗口,接收键盘鼠标等交互信息

GameManage

游戏的控制器,从主窗口接收消息控制游戏。

Control包的类之间的关系如图4所示:

图3Control包的内部关系

通用模块

通用模块被其他模块所共同调用,具体含有如下类:

表5Utility包

包功能描述

类名

类功能描述

Utility包,被其他系统模块所调用,提供一些较为基础和通用的功能。

CMesh

加载网格数据

Component

负责管理组件

FrameworkTimer

时间管理

D2DStretchSprite

可变精灵显示

D2DStaticSprite

静态精灵显示

D2DSprite

精灵

TextHelper

提供通用的显示文字的接口

DirectKeyboardInput

处理键盘输入

Music

播放音乐

EnergyBar

属性条,显示玩家属性

TreasureSystem

宝物系统

数据分解

系统中所使用的数据,如表6所示:

表6数据分解

数据

功能描述

人物,房间的数据包括网格及其它纹理贴图

人物显示,房间显示和渲染

音乐

按照所处房间和场景提供适宜的背景音乐和提示音乐等。

数据说明

人物房间,多媒体的数据存储形式为直接用图片,.x格式,.wav存储,保存在程序目录下的文件夹media和music中。

4.依赖关系说明

模块间的依赖关系

图4模块依赖关系

5.接口说明

模块接口

实体数据模块

接口功能主要由RoleManage类完成。

由控制部分调用,接口如表7所示:

表7实体数据模块对外接口

实现类

接口函数

功能描述

RoleManage

 

InitilizeRole

根据游戏状态初始化人物

SetAttribute

调整人物属性

GetActiveRole

获取当前活动人物及其信息

UpdateInfo

更新人物信息

界面显示模块

接口功能主要由三个类提供。

表8界面显示模块对外接口

实现类

接口函数

功能描述

InitMenuView

Init

初始化菜单界面

ClickMenu

检测响应

Render

渲染界面

InitSetView

Init

初始化设置界面

ClickMenu

检测响应

Render

渲染界面

MainView

InitMainView

初始化主界面

RenderMainView

渲染主界面

ShowPausePanel

显示暂停面板

ShowAttributePanel

显示属性面板

ClickMenu

检测响应并处理

控制模块

控制模块的功能实现需要调用Scene的接口和Role的接口,控制模块根据用户的输入进行响应,修改Role的信息并且同步调整Scene中的渲染显示。

它处于游戏最高层,不对其他模块提供调用接口。

6.详细设计

模块详细设计

数据模块详细设计

类RoleCommon

✓AttributeName:

存储五种属性的命名

✓AttributeValue:

属性总值

✓DifficultyName:

难度命名

✓UserRoleInitHoueID:

玩家初始房间

✓ComputerRoleInitHouseID:

外部人物初始房间

类BaseRole

✓attrnum:

属性数目

✓attributes:

属性值数组

✓attrsum:

属性总值

✓id:

人物编号

✓rx,ry:

人物位置信息

✓HouseID:

人物所在房间

✓m_anim:

人物的移动属性信息

✓checksum:

检查人物属性总值以判断是否为0

类ForeignRole

✓diff:

外部人物难度

类UserRole

✓vistype:

人物形象类型

类RoleManage

✓userrole:

游戏中存在的玩家人物

✓foreignrole:

游戏存在的外部人物数组

✓currentActiveID:

当前激活的玩家人物

✓InitlizeRole:

初始化人物

✓SetAttribute:

设置人物属性

✓GetActiveRole:

获取激活人物

✓TestAttckon:

检测人物是否被攻击

✓GetNextRandomHouse:

获取下一个随机相邻的房间

✓IsChooseFight:

判断电脑是否选择战斗

界面显示模块详细设计

类InitMenuView

✓Componet:

组件类用于封装sprite等

✓strsprite:

旋转的背景精灵

✓middlesprite:

普通精灵,不产生响应

✓Init:

初始化

✓Render:

渲染

✓TestsideButton:

检测鼠标移动

类InitSetView

✓componet:

封装组件

✓m_text:

字体显示

✓difid:

选择的难度

✓attrpanel:

属性面板实例

✓Init:

初始化

✓Render:

渲染

✓ClickMenu:

检测点击

✓SetComputerDifferCulty:

临时改变属性值

类MainSceneControl:

✓mesview:

消息面板实例

✓stopview:

暂停面板实例

✓attrview:

BottomViewport实例

类SceneCommon:

类BaseHouse:

✓rect:

房间范围

类House:

✓mesh:

网格数据

✓Localmat:

旋转矩阵

类Courtyard:

✓vertexbuffer:

顶点数据

✓texture:

地面纹理

类Sky:

类HouseControl:

✓m_court:

庭院

✓m_house:

房间数组,保存所有的房间

✓CurrentActiveHouse:

当前所处房间

类RoleMoveControl:

✓CreateRole:

创建人物

✓RoleMoveProcess:

动画显示移动过程

类BottomViewport:

✓rect:

面板的范围

类MapViewport:

✓rect:

小地图的范围

类AttrPanelView:

✓rect:

属性面板的区域

✓isVisible:

是否可见,用于动态显示

✓SetVisible:

设置使之可见

✓Render:

渲染

✓UpdatePanel:

刷新面板

类GamePausePanel:

✓本类是暂停面板。

✓rect:

面板范围

✓isVisible:

是否可见

类MessageViewPort:

✓本类是消息显示面板。

✓rect:

面板范围

✓SendMessage:

外部向消息面板类发送消息,要求显示。

✓DrawMessage:

显示面板具体内容。

类PassageViewPort:

✓本类是通道信息显示类。

类Magic:

✓本类用于显示打斗时的魔法效果。

类AnimationFrame:

类AnimationRole:

✓本类是用来进行人物移动的绘制和管理的。

✓objectRadius:

人物的半径

✓objectCenter:

人物中心

✓rootFrame:

根关节。

✓steplength:

人物移动时的单位步长。

✓fangle:

人物需要的转动角度。

✓matWorld:

人物移动变换矩阵

✓matScale:

人物的缩放

✓DrawnFrame:

绘制帧

✓SetUpMatrix:

设置转移矩阵

✓SetupBoneMatrices:

建立关节矩阵

✓OnFrameRender:

移动渲染

✓UpdateFrameMatrix:

更新每一个关节的矩阵

✓GenerateSkinnedMesh:

产生蒙皮数据

类AllocateHierarchy:

✓本类主要功能是在人物移动时加载人物数据。

类AnimationMeshContainer:

✓本类加载人物动态网格数据。

✓Get/SetTextures:

读取、设置纹理

✓Get/SetBones:

读取、设置关节

控制部分

类MainFrame:

✓这是主窗口类。

✓kDierectInput:

键盘直接访问实例

✓keyBoardEvent:

键盘事件

类GameManager:

这是游戏总控制类,负责根据状态机的状态显示同时接收来自窗口的响应。

属性

✓mdev:

设备

✓Initmenu:

初始化菜单界面

✓Initset:

初始化设置界面

✓mainview:

主界面

✓gameState:

游戏状态

✓m_Role:

人物管理

方法

✓OnInitilize():

设备初始化

✓InitState():

状态初始化

✓DoFrame():

循环渲染帧,负责所有的显示

✓StartRender():

开始渲染

✓EndRender():

结束渲染

✓MouseMove():

鼠标移动时采取相应响应

✓MouseClicke():

鼠标点击时采取相应响应

✓MainviewClick():

点击主场景时采取相应响应

✓ShowPausePanel():

显示暂停面板

✓ShowAttributePanel():

显示属性面板

✓AdjustCamera调整摄影机

类ControlCommon:

控制类的公共数据

属性

✓bFullScreen:

是否全屏

✓bFullScreen以下所有属性为窗口参数。

方法

✓三个方法均为屏幕点和鼠标点击位置之间的转换

类GameState:

状态机,采用状态机转换的方式来实现程序的运行

属性

✓currentstate:

当前程序所处的状态机状态

✓currentmenu:

当前菜单状态

类DeviceManage:

显示设备管理

属性

✓device:

设备

方法

✓initDevice():

根据参数选择设备属性并初始化

类Camera:

摄影类,负责调整视角(远近和旋转)

属性

✓vEyePos:

摄影机位置

✓vLookAt:

摄影机朝向

✓xoffset:

摄影机偏移

✓yoffset:

摄影机偏移

✓yRotate:

摄影机旋转角度

方法

✓AdjustCamera:

调整摄影机

✓ChangeEyePos:

随着人物移动调整摄影机位置

通用类部分

类CMesh:

网格数据加载类

属性

✓mesh:

网格

✓meshMaterials:

网格材质

✓meshTextrues:

网格纹理

方法

✓intiMesh():

初始化网格

✓Render():

渲染

类Componet:

负责管理组件

方法

✓AddControl():

添加组件

类FrameworkTimer:

时间管理类

属性

✓isUsingQPF:

是否使用精确时钟

✓ticksPerSecond:

每秒多少tickets

方法

✓QueryPerformanceFrequency():

时钟频率

✓GetAbsoluteTime():

获取绝对时间

✓GetTimeSpan():

获取相对时间

类D2DStretchSprite:

可变精灵显示

属性

✓scale:

可变比例

方法

✓CreateVertex():

创建数据

✓SetOffSet():

精灵偏移

类D2DStaticSprite:

静态图片显示

方法

✓Render():

精灵渲染

类D2DSprite:

属性

✓sprite:

精灵

✓Elemeentid:

精灵标识符

✓BlendColor:

透明色

方法

✓Contain():

判断是否在精灵区域

✓DrawSprite():

绘制精灵

类TextHelper:

本类负责管理字体的绘制

属性

✓textFont:

字体

✓textSprite:

字体精灵

✓color:

字体颜色

✓point:

字显示位置

✓lineHeight:

字体高度

方法

✓DrawFont():

绘制字体

类DirectKeyboardInput:

属性

✓Mdevice:

键盘设备

方法

✓FreeDirectInput():

释放设备

✓CreateKeyBoardeDevice:

创建设备

✓ReadimmediateData():

读取键盘数据(采用direct方式访问键盘,提高响应速度)

类Music:

类EnergyBar:

属性

✓vertexbuffer:

能量格的顶点数据

✓rect:

能量格区域

✓matrix:

能量格变换矩阵

✓proportion:

能量比例

✓Elementld:

能量ID

方法

✓CheckIn():

检查点是否在能量格范围之内

✓Render():

渲染能量格

类TreasureSystem

属性

✓vertexbuffer:

数据

✓texture:

纹理

✓mat:

宝物变换矩阵

✓m_text宝物属性值显示

方法

✓Init():

初始化宝物

✓LoadTexture():

加载宝物纹理贴图

✓OnCreateVertex():

创建数据

✓Render():

渲染

✓Dispose():

内存清理

✓CheckClicked():

判断是否被选中

✓GainTreasure():

获取宝物

✓AddTreasure():

添加宝物

✓UpdateTreasure():

更新宝物信息如生存时间等

数据详细设计

网格,贴图,音乐数据

系统使用数据分为三类:

网格数据

我们做的是3D的游戏,需要大量的三维网格数据。

网格数据都是.x文件,它是保存有三维信息和贴图信息的mesh数据。

人物模型,房间模型,房间内部的桌子、椅子、床以及剑等的显示都需要加载这些文件。

贴图数据

地图,小地图,宝物,房间、墙壁纹理,人物纹理,按钮背景等需要加载其来显示纹理信息。

为了减少系统的资源消耗,我们在很多地方采用了平铺处理。

音乐媒体数据

用于提供系统音乐效果,都是wav格式的文件。

音乐是不间断循环播放的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1