我正在讨论有关角色设备和属性如何存储在游戏中的问题。
我的角色和可装备物品有22种不同的总属性(HP,MP,ATP,DFP)。角色有基本统计数据,一次最多可以装备四个项目。
例如:
本案中的最终角色ATP为88。
我正在寻找一种在我的代码中实现这一点的方法。好吧,我已经实现了这个,但它并不优雅。现在,我有ClassA将这些属性存储在一个数组中。然后,我有ClassB,它接受五个ClassA并将添加值并返回最终属性。
但是,我需要强调的是,这不是一个优雅的解决方案。
必须有一些更好的方法来访问和操作这些属性,包括我没有想过要使用的数据结构。有什么建议吗?
编辑:我应该注意到,我需要对这些属性进行一些限制。例如,这些是基线。
例如,角色自己的HP和MP不能超过基线且不能小于0,而ATP和MST可以是。如果不破解我目前所拥有的东西,我目前也无法强制实施这些限制:(
答案 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,但应该很容易理解该方法。我没有测试过这段代码,如果出现语法错误或其他原因,请不要道歉。