2

これが私が一言で言えば得たものです。

  1. ポーション、装備、呪文などが派生するベースアイテムクラスがあり、それらからいくつかのクラスが派生します。注: 一部の派生クラスには、非仮想クラス固有のメンバー関数/データ型があります。

  2. 「ランダムな」鎧/武器ジェネレーターも作成しました。

私が持ちたいのは、次のような在庫です。

struct Hero_Inventory
{
   std::vector<Spell*> Spell_Inventory;
   std::vector<Potion*> Potion_Inventory;
   std::vector<Equipment*> Equipment_Inventory; 

   Hero_Inventory() {}
};

呪文とポーションのコンテナ (インベントリ) を作成するのは非常に簡単です。それらは事前定義されるため。ポリモーフィズムとポインターの使用は問題になりません

私の主な問題は、ランダムに生成された武器/防具 (どちらも Equipment から派生したもの) を保存して使用する (例: 武器クラスの特定のメンバー関数にアクセスする) ことです。

すべての「装備」を 1 つのコンテナにまとめたいと思います。

いくつかの関数ですべての機器を生成しているので、生成プロセスを終了すると、次のようになります。

Equipment * TestArmor = new Armor(/* Bunch of parameters go here */);

その関数が範囲外になるとすぐにそのポインターが失われるため、どうすればよいかわかりません。また、ポインター/参照がなければ、ポリモーフィズムを使用できません。これにより、機器をすべて 1 つのコンテナーに保持できます。

私はこの時点で本当に迷っており、人々が提案できる提案や代替案を探しています。さらにコードが必要な場合は、投稿します。興味のある部分を教えてください。

漠然としていたらすみません、これが私の最初の投稿です。私は通常、自分で物事を理解するのが得意ですが、このことは私を打ち負かしています. 誰かがさらに情報を必要とする場合は、尋ねてください。私はそれを提供しようとします.

前もって感謝します、-ライアン

4

1 に答える 1

2

Equipmentオブジェクトを操作するための統一されたインターフェイスを作成します。

class Equipment {
public:
    virtual void render(Renderer& renderer) = 0;
    virtual void createController(ControllerManager& controllerManager) = 0;
    virtual void load(std::istream& input) = 0;
    virtual void save(std::ostream& output) = 0;
};

この機能createControllerは興味深いもので、機器はControllerManagerその正確な値を操作する何かを作成する方法を伝えることができます。

他のオブジェクトとの相互作用を可能にする関数がEquipment必要な場合は、おそらくVisitor Pattern. これは、単一の型ではなく、複数の型に基づいてポリモーフィズムを導入する方法です。

于 2013-01-17T08:06:19.977 に答える