29

RPゲーム開発のクラス図の例をどこで見つけることができるか知っている人はいますか?ここに似たものは非常に便利です。私は惜しみなくコピーできるものを探しているのではなく、自分のクラスを書き留めようとしているときに発見した問題のさまざまな解決策を図解するさまざまな例を探しています。

4

7 に答える 7

51

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

私がテキストベースのRPGを書いていた場合(過去に行ったように)、それは少し次のようになります(残念ながら、そのための図を作成する時間はありませんが):

  • WorldEntityから派生したクリーチャー、部屋、アイテム。WorldEntityオブジェクトは複合構造に配置されているため、アイテムは、部屋内に存在するクリーチャーによって運ばれる他のアイテム内に住むことができます。WorldEntitiesのVisitorパターンを実装するとうまくいく可能性があります。
  • 個々のCreatureおよびItemインスタンスの「class」データを含むCreatureTypeおよびItemTypeクラス。これらは、対応する「type」オブジェクトを参照します。(例えば、前者の基本ヒットポイントと統計、後者の現在のヒットポイントと一時的な効果)。これらは、作成時にCreatureまたはItemインスタンスにコピーされるプロパティの典型的なリストとして実装する場合があります。'parent'プロパティを介してプロパティの継承を実装し、特定のgoblinCreatureインスタンスが'genericgoblin'CreatureTypeへの親参照を含む'warriorgoblin'CreatureTypeに関連付けられるようにすることができます。等々。
  • 部屋が所有する片道の出口で、進行方向やさまざまな通過条件などが詳しく説明されています。
  • いくつかの論理的な組織によって接続された部屋のグループを含むエリア。
  • クリーチャーインスタンスとアイテムインスタンスが作成される場所(たとえば、どの部屋、どの座標で)、いつ作成されるか、どの頻度で、どのクリーチャータイプとアイテムタイプから作成されるかを指示するSpawnクラス。ここには、物事を少しランダム化するためのロジックが含まれている場合があります。
  • 呪文、スキル、能力などはすべて、前提条件(現在の位置、マナポイント、スキルのある程度の学習など)を指定する基本アクションクラスまたはインターフェイスから派生します。通常のコマンドとアクションは、ある種の要件もあることが多いため、ここでも実行できます(たとえば、「sleep」コマンドでは、まだスリープしていない必要があります)。
  • 将来実行するために優先キューにプッシュする本質的にコールバックであるFutureEventクラス。これらを使用して、戦闘ラウンドのスケジュール、クールダウン時間のスペル、夜間/日中のサイクルなど、好きなものを選択できます。
  • プレーヤーとアイテムの統計のための名前->値のペアのハッシュ/マップ/辞書。タイプセーフではありませんが、後で柔軟性に感謝します。私の経験では、統計メンバー変数を作成することは実行可能ですが柔軟性がなく、特殊な「属性」クラスを持つことは、デバッグ時に複雑な悪夢になります。
  • 統計名と修飾子の値(+ 10、+ 15%など)を含む修飾子のタイプ。これらは、使用時にクリーチャーに追加され(たとえば、スペルエフェクトを介して、またはエンチャントされた武器を使用することによって)、後で時限FutureEventまたは実行中のコマンドなどの他のイベントによって削除されます。
  • PlayerClassやPlayerRaceなどのゲーム固有のクラス。それぞれがプレーヤーのクラス(戦士、ウィザード、泥棒など)または種族(人間、エルフ、矮星)を記述し、開始ステータスの値と制限、スキルの可用性リスト、特殊能力を設定します。等
  • 実際のゲームタイプによって異なる基本的なプレーヤーインターフェイスクラス。グラフィカルゲームのレンダリングクラスがある場合や、MUDにプレーヤーのクライアントへのTCP接続を反映するConnectionクラスがある場合があります。すべてのゲームロジックをこれらから除外するようにしてください。
  • スクリプトインターフェイス。コマンド、呪文、クリーチャーAIのほとんどは、適切なスクリプトインターフェイスを使用してより迅速に実現でき、コンパイル時間も短縮されます。また、ゲーム内の優れたデバッグおよび診断機能も可能になります。

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

于 2009-08-04T14:37:40.963 に答える
11

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

多くの最新のゲームエンジンは、「モノリシッククラスオブジェクト」(またはクラスエンティティなど)から「コンポーネントのバッグ」アプローチに移行しています。

周りにはたくさんの本や記事があります。一般的:

具体的には(いくつかの注目すべきもの、グーグルの「コンポーネント」と「エンティティ」のさまざまな組み合わせ):

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

クールエイドを試してみてください、あなたはそれを好きかもしれません。=)

于 2009-08-06T02:29:33.623 に答える
5
<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>
于 2009-07-31T12:10:53.753 に答える
4

スティーブ・エッゲによる非常に異なるアプローチ。

于 2009-08-06T13:15:27.443 に答える
3

複雑なゲームの概要については、JADEのJavadocをご覧ください:)

于 2009-08-03T16:34:22.153 に答える
1

大胆に、あなたのゲームはハックアンドスラッシュのナンセンスのクローンであってはなりません。あなたの俳優は、サイドを切り替えたり、他の俳優を参加させたりすることができるはずです。そうでなければ、ポイントは何ですか?

   +-----------------------------+
   V                             |
[Actor] ------- [Allegiance] ----+
 - risk comfort    - weight
 - temerity        
于 2009-08-07T02:19:47.297 に答える