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