Welcome

首页 / 软件开发 / C# / C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十八)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十八)2010-02-23 博客园 深蓝色右手C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十八) 经典式属性设计及完美的物理攻击系统

战斗即将开始!要实现MMORPG中的攻击系统,必须为精灵增加相关的参数及属性,这些内容及它们之间的牵连关系设计决定着游戏的新颖度与耐玩性;就好比当年的传奇,系统再普通不过了,但是却因为有着恰如其分的系统参数设定与完美的世界观定位,成就了一代不朽巨作。那么本节开始,我将首先对精灵控件进行属性完善,使之具传统经典游戏中的角色属性。

首先看下图:

这些属性是目前最经典的角色属性设置(不同的游戏中,某些属性的命名可能会不同。例如上图中的“体质”属性在本节示例游戏中我称之为“体格”;而“运势”属性我则称之为“运气”等等,但意义是一样的);我们先分析:力量、智慧、敏捷、体质、运气这5个属性为所有基本属性中的根属性,何谓根属性?就是所有基值属性的最底层。当角色升级时,通过手动或系统自动根据角色的职业特性对这5个根属性进行加值,而其他所有与之相关联的基值属性都将同时受到影响。例如我是这样定义这5个根属性的:

double _VPower;

/// <summary>

/// 获取或设置力量

/// 影响最大负重,物理攻击力(最小 - 最大)

/// --[相关基值属性计算公式]:

/// 最大负重 = ABase[0] + Equip[0] + Buff[0] + VPower * Coefficient[0]

/// 物理攻击力最小值 = ABase[1] + Equip[1] + Buff[1] + VPower * Coefficient[1]

/// 物理攻击力最大值 = ABase[2] + Equip[2] + Buff[2] + VPower * Coefficient[2]

/// </summary>

public double VPower {

get { return _VPower + Equip[16] + Buff[16]; }

set { _VPower = value; }

}

double _VAgile;

/// <summary>

/// 获取或设置敏捷

/// 影响命中,闪避,跑速,攻速,施法速度

/// --[相关基值属性计算公式]:

/// 命中 = ABase[3] + Equip[3] + Buff[3] + VAgile * Coefficient[3]

/// 闪避 = ABase[4] + Equip[4] + Buff[4] + VAgile * Coefficient[4]

/// 跑速 = ABase[5] - Equip[5] + Buff[5] - VAgile * Coefficient[5]

/// 物攻速度 = ABase[6] - Equip[6] + Buff[6] - VAgile * Coefficient[6]

/// 施法速度 = ABase[7] - Equip[7] + Buff[7] - VAgile * Coefficient[7]

/// </summary>

public double VAgile {

get { return _VAgile + Equip[17] + Buff[17]; }

set { _VAgile = value; }

}

double _VPhysique;

/// <summary>

/// 获取或设置体格

/// 影响最大生命值,物理防御力,格档率(与暴击率相反,物理或魔法攻击伤害减半)

/// --[相关基值属性计算公式]:

/// 最大生命值 = ABase[8] + Equip[8] + Buff[8] + VPhysique * Coefficient[8]

/// 物理防御力 = ABase[9] + Equip[9] + Buff[9] + VPhysique * Coefficient[9]

/// 格档率 = ABase[10] + Equip[10] + Buff[10] + VPhysique * Coefficient[10]

/// </summary>

public double VPhysique {

get { return _VPhysique + Equip[18] + Buff[18]; }

set { _VPhysique = value; }

}

double _VWisdom;

/// <summary>

/// 获取或设置智慧

/// 影响最大魔法值,魔法防御力,魔法攻击力(最小 - 最大)

/// --[相关基值属性计算公式]:

/// 最大魔法值 = ABase[11] + Equip[11] + Buff[11] + VWisdom * Coefficient[11]

/// 魔法防御力 = ABase[12] + Equip[12] + Buff[12] + VWisdom * Coefficient[12]

/// 魔法攻击力最小值 = ABase[13] + Equip[13] + Buff[13] + VWisdom * Coefficient[13]

/// 魔法攻击力最大值 = ABase[14] + Equip[14] + Buff[14] + VWisdom * Coefficient[14]

/// </summary>

public double VWisdom {

get { return _VWisdom + Equip[19] + Buff[19]; }

set { _VWisdom = value; }

}

double _VLucky;

/// <summary>

/// 获取或设置幸运

/// 影响暴击率(物理或魔法攻击加倍)及其他

/// --[相关基值属性计算公式]:

/// 暴击率 = ABase[15] + Equip[15] + Buff[15] + VLucky * ACoefficient[15]

/// </summary>

public double VLucky {

get { return _VLucky + Equip[20] + Buff[20]; }

set { _VLucky = value; }

}

/// <summary>

/// 获取或设置属性基数

/// 0-14对应基础属性值

/// </summary>

public double[] ABase { get; set; }

/// <summary>

/// 获取或设置装备加成总和

/// 0-14对应基础属性值

/// 15-19对应5大属性

/// </summary>

public double[] Equip { get; set; }

/// <summary>

/// 获取或设置加持/减持值总和

/// 0-14对应基础属性值

/// 15-19对应5大属性

/// </summary>

public double[] Buff { get; set; }

/// <summary>

/// 获取或设置属性系数(成长率)

/// 0-14对应基础属性值

/// </summary>

public double[] Coefficient { get; set; }