質問

RPゲーム開発のクラス図の例を見つけることができる場所を誰か知っていますか? こちらに似たものが非常に便利です。私は奴隷のようにコピーできるものを探しているのではなく、自分のクラスを書き下ろすときに発見している問題に対するさまざまな解決策を示すさまざまな例を探しています。

役に立ちましたか?

解決

GameDev.netのEmmanuel Delogetは知っていますが、彼が持っている階層を使用することを選択するかどうかはわかりません!継承が多すぎて、十分な柔軟性がありません。

テキストベースのRPGを書いていた場合(過去に行ったように)、これは少し似たものになります(悲しいことに、ダイアグラムを作成する時間はありませんが):

  • 派生したクリーチャー、部屋、アイテム WorldEntityのWorldEntityから コンポジットに配置されたオブジェクト 構造なので、アイテムは クリーチャーによって運ばれる他のアイテム、 部屋の中にいる人。実装 WorldEntitiesの訪問者パターン うまくいくかもしれません。
  • CreatureTypeおよびItemTypeクラス の「クラス」データを含む 個々のクリーチャーとアイテム それらのインスタンスを参照するインスタンス 対応する「タイプ」オブジェクト。 (例:ベース 前者のヒットポイントと統計、 現在のヒットポイントと過渡効果 後者で)。私はこれらを実装するかもしれません 取得するプロパティのプロトタイプリスト 次の場合にCreatureまたはItemインスタンスにコピーされます それらが作成されます。プロパティを実装できます 「親」プロパティを介した継承 特定のゴブリンクリーチャーインスタンスは、 「warrior goblin」CreatureTypeには、 「ジェネリックゴブリン」CreatureTypeへの親参照。等々。
  • 部屋が所有する出口であり、 一方向、そしての方向の詳細 旅行、通過条件など。
  • 接続された部屋のグループを含むエリア 論理的な組織によって。
  • Creatureを指定するSpawnクラス およびItemインスタンスが作成されます(例:どの部屋、 またはどの座標で)、作成されたとき、 どんな頻度で、そして どのCreatureTypesおよびItemTypes。あなたが持っているかもしれません ここで少しランダム化するためのいくつかのロジック。
  • スペル、スキル、能力など 基本Actionクラスからすべて派生 または前提条件を指定するインターフェース (例:現在位置、マナポイント、一部 スキルの学習度など)。普通 コマンドとアクションは 多くの場合、何らかの要件もあります (例えば、 'sleep'コマンドは、あなたが 既に寝ています。)
  • 基本的にはFutureEventクラス 優先度キューにプッシュするコールバック 将来実行するために。これらを使用して 戦闘ラウンドのスケジュール、クールダウン時間のスペル、 夜/日サイクル、好きなもの。
  • 名前と値のペアのハッシュ/マップ/辞書 プレイヤーとアイテムの統計。タイプセーフではありませんが、 柔軟性は後で評価されます。私の 統計メンバー変数の作成経験は 実行可能であるが柔軟性がなく、専門性がある 「属性」クラスは複雑になります デバッグ時の悪夢。
  • 統計名を含む修飾子タイプ および修飾子の値(例:+ 10、+ 15%)。これら 使用されているクリーチャーに追加されます (例:呪文の効果、または振り回す エンチャントされた武器)そして後で剥ぎ取られる 時限FutureEventまたは他のイベントなど 実行中のコマンドとして。
  • PlayerClassなどのゲーム固有のクラスまたは PlayerRace。各プレーヤーのクラスを記述します (例:戦士、魔法使い、泥棒)または人種(人間、エルフ、 dwarf)開始統計値と制限を設定し、 スキルの可用性リスト、特別な権限など。
  • さまざまな基本的なプレーヤーインターフェイスクラス 実際のゲームの種類に応じて。あなたはかもしれない グラフィカルゲームのレンダリングクラスがある、または MUDには、Connectionクラスがある場合があります プレーヤーのクライアントへのTCP接続を反映します。 これらのすべてのゲームロジックを避けてください。
  • スクリプトインターフェイス。ほとんどのコマンド、スペル、 クリーチャーAIは、 まともなスクリプティングインターフェイスとコンパイル時間を保持します ダウンも。また、いくつかの素晴らしいゲーム内デバッグを可能にします および診断機能。

これが、私が使用する基本的な高レベル構造になります。

他のヒント

従来の継承階層ではなく、コンポーネントエンティティシステムを検討することをお勧めします。特定の種類の変更に対してより柔軟になり、ツール(ワールドエディターなど)の開発がはるかに容易になり、そうでなければ明白または簡単ではないかもしれない並列化の機会を提供する傾向があります。

最近の多くのゲームエンジンは、「モノリシッククラスオブジェクト」から離れつつあります。 (またはクラスEntity、何でも)および「コンポーネントのバッグ」に向けてアプローチ。

多数の書籍や記事があります。一般的に:

具体的に(いくつかの注目に値するもの、google" component"と" entity"のさまざまな組み合わせ):

これらの記事のそれぞれは、さらにいくつかにリンクしています。

クールエイドを試してみてください。 =)

<tongue_in_cheek_mode_because_it_is_friday>

開始するだけ:

          ----------------                    --------------
          |   Creature   |                    |  Item      |
          |--------------|                    |------------|
          | Name         |                    | Name       |
          | Hp           |                    | Value      |
          | Abilities    |--------------------| Weight     |
          |--------------|                    --------------
          | Attack       |
          ----------------
                 ^
                 |
        ----------------------
        |                    |
----------------    ----------------
|  Hero        |    |  Monster     |
|--------------|    |--------------|
| Level        |    |              |
|--------------|    |--------------|
| KillMonster  |    | AttackAndDie |
| GrabTreasure |    | DropTreasure |
----------------    ----------------

</tongue_in_cheek_mode_because_it_is_friday>

大胆に、あなたのゲームはハックのクローンであってはなりません。 あなたの俳優は、側面を変え、彼ら自身のイニシアチブを取ることができなければなりません 他のアクターなどを参加させてください。そうでなければ、何がポイントですか?

   +-----------------------------+
   V                             |
[Actor] ------- [Allegiance] ----+
 - risk comfort    - weight
 - temerity        
scroll top