列挙型と スキル値の整数


10

基本的なスキルと属性のシステムを実装していますが、どうすればよいかについて考え直しています。

たとえば、SkillType列挙型を使用してキーを表すDictionary / HashMapと、値を表す整数値を使用できます。しかし、これを行うべきですか?

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; /* ... */ };実際に好みます...
マーティンSojka

回答:


8

最終的にある場合:

  • ゲーム全体のさまざまなスキルタイプ、
  • または能力付与アイテム、
  • または能力付与バフ、
  • または大きな能力ツリー、

次に、個々のインスタンスフィールドや列挙型キーを持つディクショナリではなく、ディクショナリ内の文字列または整数キーの柔軟性を優先し始めます。

私の推論- すぐに気づくかもしれないから...

私の数学を微調整し、ユニットの能力を選択できればいいのですが(私のお気に入りのテキストエディター| Excel |カスタムツール)。

...その時点で、文字列または整数キーを持つディクショナリは、列挙値またはインスタンスフィールドの長いリストを自分で維持する必要があるよりも、より自然な適合になります。ただし、このツールは常にC#コードを生成するようにも作成できるため、幸せなハイブリッドを見つけることができる場合があります。

ゲームの複雑さがかなり単純になり、スキルの多様性が小さい場合は、(辞書と列挙型の代わりに)手作業でインスタンスフィールドを管理する方が便利で、実行時と「キーストローク」の両方で間接参照のレベルを回避できます。時間。


ユニット能力と数学はどういう意味ですか?少なくともその点では、私は完全にはフォローしていません。それが実用的であれば、列挙型を使用したいと思います。
blissfreak、2011

文字列は上位レベル(スクリプトAPIなど)に最適ですが、文字列を移動することはお勧めできません(メモリと移動時間により、フレームごとに実行できる操作の最大量が制限されます)。ハイブリッドであることはオプションかもしれません:整数識別子を持つ名前付きエンティティ。名前は(おそらくシングルトンマップに)1回格納する必要があり、エンティティは整数を使用して自身を識別します。そうすることで、必要に応じてインターフェイスに文字列を配置し、列挙型のように機能させることができます。
FxIII 2011

@fxiii同意し、「文字列または整数」について言及したのはそのためです。ただし、詳細には触れませんでした。整数の使用に関して、理由と方法をいくつか挙げていただき、ありがとうございます。
DuckMaestro 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.