游戏设计:RPG(VB.Net)中可堆叠属性(DFP,HP,MP等)的数据结构

时间:2010-08-07 23:45:39

标签: vb.net data-structures

我正在讨论有关角色设备和属性如何存储在游戏中的问题。

我的角色和可装备物品有22种不同的总属性(HP,MP,ATP,DFP)。角色有基本统计数据,一次最多可以装备四个项目。

例如:

  • BASE ATP:55
  • WEAPON ATP:45
  • ARMOR1 ATP:-10
  • ARMOR2 ATP:-5
  • ARMOR3 ATP:3

本案中的最终角色ATP为88。

我正在寻找一种在我的代码中实现这一点的方法。好吧,我已经实现了这个,但它并不优雅。现在,我有ClassA将这些属性存储在一个数组中。然后,我有ClassB,它接受五个ClassA并将添加值并返回最终属性。

但是,我需要强调的是,这不是一个优雅的解决方案。

必须有一些更好的方法来访问和操作这些属性,包括我没有想过要使用的数据结构。有什么建议吗?


编辑:我应该注意到,我需要对这些属性进行一些限制。例如,这些是基线。

例如,角色自己的HP和MP不能超过基线且不能小于0,而ATP和MST可以是。如果不破解我目前所拥有的东西,我目前也无法强制实施这些限制:(

1 个答案:

答案 0 :(得分:2)

创建一个名为 CharacterAttributes 的枚举来保存每个STR,DEX等。

制作设备类来表示任何可装备物品。这个类将有一个Dictionary,它是该设备修改的任何统计数据的列表。对于造成+10伤害的剑,使用Dictionary [CharacterAttributes.Damage] = 10.魔法物品可能会影响多个属性,所以只需添加任意数量的条目。

设备类也可能有一个枚举,表示它插入的库存(Boots,Weapon,Helm)。

您的字符类将有一个列表来表示当前档位。它还有一个CharacterAttributes字典,就像设备类一样,它代表了角色的基本属性。

要计算最终统计数据,请在Character类中创建一个类似这样的方法:

int GetFinalAttribute(CharacterAttributes attribute)
{
    int x = baseStats[attribute];
    foreach (Equipment e in equipment)
    {
        if (e.StatModifiers[attribute] != null)
        {
            x += e.StatModifiers[attribute];
        }
    }

    // do bounds checking here, e.g. ensure non-negative numbers, max and min

    return x;
}

我知道这是C#并且您的帖子被标记为VB.NET,但应该很容易理解该方法。我没有测试过这段代码,如果出现语法错误或其他原因,请不要道歉。