枚举与 技能值的整数


10

我正在实施一个基本的技能和属性系统,尽管我对应该如何去做有第二个想法。

例如,我可以使用Dictionary / HashMap,它使用SkillType枚举表示键,并使用整数值表示值。但是我应该这样做吗?

public class Skills
{
    public IDictionary<StatType, Int> skills; //StatType is enum, being the key; the int //is the value.

}

vs.

public class Skills
{
    public int LongBlade, Armor, Marksman; //...etc
}

我想知道这里类型安全的好处,而不是仅仅使用基本整数。有什么建议吗?


interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };实际上,我希望...
Martin Sojka,

Answers:


8

如果最终会出现:

  • 您游戏中的各种技能类型,
  • 或授予能力的物品,
  • 或赋予能力的迷
  • 或大型能力树,

然后我开始更喜欢字典中字符串或整数键的灵活性,而不是单个实例字段甚至带有枚举键的字典。

我的理由- 因为您可能很快就会意识到...

男孩,如果我可以调整数学模型并在(我最喜欢的文本编辑器| Excel |一个自定义工具)中选择单位功能,那将很好。

...此时,具有字符串或整数键的字典比必须自己维护枚举值或一长列实例字段更为自然。但是,也可以总是编写上述工具来生成C#代码,因此您可能能够找到满意的混合动力。

如果您的游戏复杂度非常简单,并且您的技能种类很少,那么在运行时和“击键”中手动管理实例字段(而不是字典和枚举)似乎更为方便,并且避免了某种程度的间接访问-时间。


但是,单位能力和数学技巧是什么意思?我不太关注,至少在这方面。如果可行的话,我想使用一个枚举。
blissfreak 2011年

我部分同意您的观点,字符串对于较高级别(例如脚本API)非常有用,但移动字符串并不是一个好主意(内存和移动时间限制了每帧可以执行的最大操作数)。可能是混合的:带有整数标识符的命名实体。名称必须存储一次(也许在单例映射中),并且实体使用整数标识自己。这样,您可以根据需要将字符串放入接口中,并像枚举一样工作。
FxIII

@fxiii我同意,这就是为什么我提到“字符串或整数”。我没有详细介绍,因此感谢您提出一些关于使用整数的原因和方式。
DuckMaestro 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.