软件设计
1、 制订规范
1.1、命名规范
(1)、人物基类文件
role.h文件实现基类的编写和透明贴图函数的存放
(2)、人物角色设计文件
统一为头文件,为人物英文名称.h,如K.h表示K的人物设计的头文件。
一个角色对应一个头文件。
(3)、人物角色各种功能函数
使用英文释义:
Stand()—— 站立函数;RightMove()—— 右移函数;
LeftMove()—— 左移函数;Jump()—— 跳跃函数;
fistAttack()—— 拳击函数;legAttack()—— 腿击函数
skill_I、skill_II、skill_III()—— 技能1、2、3函数
(4)、图片计数变量的设计
在进行人物功能函数的coding时,需要类中的变量来进行记录动作进行位置。
统一设计为:count_xxxx;如count_stand、count_move等。
(5)、图片命名
对于一个角色的图片文件,我们将其存放在source文件家中,
譬如对于K的图片文件都存储在source\\K\\......
对于左边的拳击图片命名为K1_拳击 (%d),%d表示拳击的第几张图。
1.2、图标样式
原则上,应该能让使用者一看即能看懂该图标所代表的功能。
要求无水印,拥有该图标的使用权。
1.3、交流方式和工作纪律
交流方式:
随时群内交流,定时线下讨论
工作纪律:
要求能够在规定的时间内,完成应该完成的任务。
2、 设想供选择的方案
自顶向下,逐步细化的设计方法:
三次迭代完成各项人物,分别在每次迭代完成后完成一定的任务,能够实现相应
的操作。
模块化设计方法:
将总体的任务分为多个模块,不同的人开发不同的模块。
3、 方案选择与推荐
针对以上系统要完成的功能,推荐本系统总体设计采用自顶向下,逐步细化的设计
方法,在需求分析中各次迭代的任务大致写完,所以只需按迭代要求在规定时间内
完成即可完成游戏的编写。
4、 基类子类说明和接口分析
外部接口:
virtual void InitImage() =0;//资源初始化
virtual void Stand(role* p2)= 0;//站立动作
virtual void Beaten(role*p2) = 0;//挨打
virtual void Defend(role*p2) = 0;//防御
……
即role基类中各种虚函数,对于每一个角色来说各自的外部接口所做的动作都是不同的,但是都可以通过role类型的指针来进行操作,这样十分有利于后续command()函数的coding。
5、 游戏总结构设计
int main()
{
int another=1;
While(another==1)
system(“PAUSE”);
return 0;
}
6、 其他设计
6.1、安全性设计
按以下原则进行安全性设计:
保护最薄弱环节原则,纵深防御原则,故障保护原则,最小特权原则,分割原则.
各工作人员将自己所做的修改存放在修改日记中。
对于各人物技能的释放:不能超过对应的窗口位置
对于各人物的移动:也不能超过对应的窗口位置
6.2、故障处理设计
故障:
某人物存在某些动作异常,不符合预期标准。
某人物血量到0时,操作界面未按要求结束还可以操作。
规定时间到0时,操作界面未按要求结束还可以操作。
角色选择出错,不符合预期。
针对这些故障,我们设计了一个暂停,一个返回键,可以直接返回游戏初始界面重新开始游戏,同时用户可通过初始界面的按钮将该故障上报。
6.3、可维护性设计
对于该游戏运营后,所产生的改正错误、扩充游戏功能、人物等问题,在软件开发
工程中即设置一个用于系统检测维护的专用函数,Check()。在Check中,对于
增加后的游戏的原各项功能做一个总体检验,看是否有合理的输出。除此之外,还
添加一个功能扩充函数AddFunc()以及人物普子类Sub_role,普遍适用于各种功
能、人物添加,每次添加功能、人物后,再预置一个功能扩充函数或人物普子类。
7、 详细设计
总体流程图
7.1、拳皇游戏系统总体控制
实现拳皇游戏系统的总体流程控制
伪代码:
Function main
进入游戏
基本选择
对战开始
对战结束
重开退出
End Function main
7.2、基本选择
实现拳皇游戏的基本选择
伪代码:
Function KofChoose
加载人物选择界面
P1、P2选择人物
选择背景图片、背景音乐
转到对战开始模块
End Function KofChoose
7.3、对战开始
实现拳皇游戏对战
伪代码:
Function FightBegin
加载对战背景图片、背景音乐
P1、P2进行对战
转到对战结束模块
End Function FightBegin
7.4、对战结束
实现拳皇游戏结束
伪代码:
Function FightEnd
加载获胜方庆祝姿势
转到重开退出模块
End Function FightEnd
7.5、重开退出
实现拳皇游戏重开或者退出。
伪代码:
Function ReopenExit
加载系统选择界面
选择重开或退出游戏
End Function ReopenExit
7.6、人物role
设计人物基类role的基本属性。
通用的人物属性,包括人物位置归属、相对窗口的坐标、血量、站立方向、当前行为状态、头像、血条等。
设计相应虚函数,由各个具体的人物类继承时实现,包括人物资源初始化、站立、右移、左移、跳跃、拳击、腿击、3个技能、防御等。
伪代码:
class role
role基本属性
type位置归属P1 orP2
x,y相对窗口的坐标
blood血量
direction站立方向
action行为状态
head[2][1]头像
HP[2][2]血量
role继承实现属性
virtual void InitImage() = 0;//资源初始化
virtual void Stand(role* p2) = 0;//站立
virtual void RightMove(role* p2) = 0;//右移
virtual void LeftMove(role* p2) = 0;//左移
virtual void Jump(role* p2) = 0;//跳跃
virtual void fistAttack(role* p2) = 0;//拳击
virtual void legAttack(role* p2) = 0;//腿击
virtual void skill_I(role* p2) = 0;//技能1
virtual void skill_II(role* p2) = 0;//技能2
virtual void skill_III(role* p2) = 0;//技能3
virtual void Defend(role* p2) = 0;//防御
end class role
7.7、人物操作控制command
实现人物的操作控制。包括血量变化,跳跃、拳击、腿击、技能、移动、防御的限制、判定、行为状态设立等。
伪代码:以P1为例
Function command
GetAsyncKeyState(
)接收键盘输入
//如果站立,则可以跳跃、拳击、腿击、技能1、技能2、技能3、移动、防御
if ‘W’ 进入跳跃状态 then
begin
加载跳跃
if ‘A’
跳跃空中加载左移
else if ‘D’
跳跃空中加载右移
end if
end
end if
//如果非跳跃,则可以拳击、腿击、技能1、技能2、技能3、移动、防御
if ‘J’ 进入拳击状态 then
begin
加载拳击
判定P2是否防御
确定相应的血量变化
end
end if
//如果非跳跃、拳击,则可以腿击、技能1、技能2、技能3、移动、防御
if ‘K’ 进入腿击状态 then
begin
加载腿击
判定P2是否防御
确定相应的血量变化
end
end if
//如果非跳跃、拳击、腿击,则可以技能1、技能2、技能3、移动、防御
if ‘U’ 进入技能1状态 then
begin
加载技能1
判定P2是否防御
确定相应的血量变化
end
end if
//如果非跳跃、拳击、腿击、技能1,则可以技能2、技能3、移动、防御
if ‘I’ 进入技能2状态 then
begin
加载技能2
判定P2是否防御
确定相应的血量变化
end
end if
//如果非跳跃、拳击、腿击、技能1、技能2,则可以技能3、移动、防御
if ‘O’ 进入技能3状态 then
begin
加载技能3
判定P2是否防御
确定相应的血量变化
end
end if
//如果非跳跃、拳击、腿击、技能1、技能2、技能3,则可以移动、防御
if ‘A’ 进入左移状态 then
begin
加载左移
end
end if
if ‘D 进入右移状态 then
begin
加载右移
end
end if
//如果非跳跃、拳击、腿击、技能1、技能2、技能3、移动,则可以防御
if ‘S’ 进入防御状态 then
begin
加载防御
end
end if
//无输入则重置为站立状态
if 无输入 进入站立状态 then
begin
加载站立
end
end if
End Function command