私の質問を詳しく説明すると、特定の状況は次のとおりです。
たとえば、メンバ データとして異なる統計 ( 、 など) を持つクラスを持つシミュレーションまたはゲーム プロジェクトがあり、一定Monster
の基本統計 ( 、など)を持つ任意の数の異なるタイプのモンスターが必要な場合、このクラスを使用する必要がある 3 つの方法を参照してください。hitPointsRemaining
AttackDamage
MaxHP
Speed
- コード全体で Monster オブジェクトを使用するために使用されるインターフェイスを持つ実際のクラス ("
Monster
" など) - さまざまな種類のモンスターの実際の「データ」。(概念的に可能なサブクラス? 正しい解決策ではないことは確かですが) 例: ゴブリン、ドラゴン、サイクロプスなど
- キャラクターがゲーム内で遭遇したさまざまなモンスターを表す実際のインスタンス化さ
Monster
れたオブジェクト (いつでも同じタイプの複数のインスタンスが存在する可能性があります)
ほとんどのデザイナーがこれをどのように実装するのか疑問に思っていました。私の考えは次のとおりです。
Monster
-開発が進むにつれ、想定されるすべてのタイプのモンスターに対してクラスを作成し、次に新しいサブクラスを作成することは意味がありません。これは、特に、異なるモンスター タイプの数が数百単位で異なり、各タイプの違いが新しいサブクラスを保証するのに十分なほど大きくない場合は、非常に厄介で保守不可能なソリューションのように思えます。
-むしろ、私の解決策は次のようになりMonster
ます。このテーブルは、プロジェクトの開発中にいつでも追加できます。
テーブルから
Monster
オブジェクトにデータをロードする関数を作成します。ファイルを解析し、
MonsterManager
インスタンス化さMonster
れたオブジェクトの静的またはメンバー ベクトルを作成し、ファイル内のテーブルからすべての「基本」統計情報を入力して (つまり、開始時のヒットポイントなど)Monster
あるタイプの新しいオブジェクトをインスタンス化して誰かの軍隊に追加したり、誰かに会わせたりしたいときはいつでもMonster
、ベクトルから (ランダムに、または何らかの決定要因を介して) 選択し、新しいMonster
オブジェクトを作成し、それをベクトルからコピーします。
これは解決策として理にかなっていますか、それとも私は昼食に出かけていますか? これが良い解決策ではない場合、より良い方法はありますか?
その他の補足質問:
-ベクトルに保持されるモンスター データに対して別のクラスを作成することは理にかなっていますか? MonsterData
上記によってベクターに組み込まれるクラスを呼び出すことができると思いましたMonsterManager
。多くのMonsterData
オブジェクトの特性はモンスターのMonster
種類( MaxHP 、速度など) によって決定され、その他のもの (CurrentHP、任意のランダム変数など)Monster
Monster
-モンスターが出現するレベルを示すエントリをテーブルに追加し、MonsterManager
初期化関数で特定のレベルのすべてのモンスターのみを一度にロードしてメモリフットプリントを縮小するなどのことができるため、この方法は最適化できると思いました) -私はこれに を使用していないので、テキスト文字列を保存することは、オブジェクトの「タイプ」enum
を識別する手段として意味がありますか? Monster
おそらく、のベクトルからコピーされたMonster
(または) へのポインタの方がよいでしょうか?MonsterData
MonsterManager
ここで最も理にかなっているゲームのアナロジーを使用しましたが、どのような状況でもこの種のものに最適な設計パターンを知りたいです。
みんな、ありがとう!