SEProjectSDD.docx
《SEProjectSDD.docx》由会员分享,可在线阅读,更多相关《SEProjectSDD.docx(33页珍藏版)》请在冰豆网上搜索。
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格式的文件。
音乐是不间断循环播放的。