私にとってかなりトリッキーなモジュールのサウンドデザインを考え出すのに苦労しています。実際のビジネス ロジックは私をひどく混乱させたので、よりわかりやすい形に言い換えました。実際の設計は言語に依存しないと思いますが、私は C# でコーディングしています。
シンプルなファンタジー ロールプレイング ゲームをコーディングしているとします。いくつかの基本的な属性を持つプレーヤーがいます。プレイヤーはいくつかのアイテムを装備することができ、それは何らかの形で彼の属性に影響を与える可能性があります. 項目には、変更する属性を定義する 1 つ以上のプロパティがあります。
public Character
{
public string charName;
public int charStrength;
public int charHitPoints;
...
public List<Item> equippedItems;
}
public Item
{
public string itemName;
public List<ItemProperty> itemProperties;
}
public ItemProperty
{
public int propertyValue;
public virtual void applyPropertyModification(Character charStatsToBeModified){}
}
文字データは XML 形式です。
<Character>
<Name>John Doe</Name>
<BaseStrength>10</BaseStrength>
<BaseHitPoints>100</BaseHitPoints>
<Items>
<Item>
<Name>Short Sword</Name>
<Properties>
<Strength>10</Strength>
<HitPoints>200</HitPoints>
</Properties>
</Item>
</Items>
<Character>
XML から文字データをロードする方法を探しています。これにより、X の一般的な新しい文字属性 (50 程度を想像してください) および/または Y の一般的な項目のプロパティ (100 ~ 150 程度を想像してください) を簡単に追加できます。
私の設計思想:
可能な各文字属性は、新しいプロパティとして Character クラスに追加されます。属性の数が大きくなると扱いにくくなる可能性があります。applyPropertyModification
可能な各項目プロパティは、適切なメソッドを使用して、独自の ItemProperty サブクラスとして追加されます。
public Strength : ItemProperty
{
public override void applyPropertyModification(Character charStatsToBeModified)
{
charStatsToBeModified.charStrength += this.propertyValue
}
}
これは大量の余分なコードのように見えます。特に、オーバーライドされたメソッドは、どの文字属性を変更する必要があるかを判断するだけであるためです。
ItemProperty は、適切な ItemProperty サブクラスに対応するエレメント XML タグを使用して、リフレクションを使用して作成されます (別の方法としては、100 条件スイッチになると思います)。
私の一般的な設計は正しいですか、それとも私がこれにアプローチするのは間違った方向ですか? 私は自分でこれを理解するのに十分な知識はありませんが、これを行うためのより良い方法があると確信しています. また、この質問がまったく不明な場合、またはとりとめのない場合は、お知らせください。明確にする/言い換えるようにします。ありがとう。