1

助けてくれませんか。

私は、プレイヤーが複数のルートをたどることができるゲーム(2d)を書いています。その中には、分岐/マージ(おそらくループ)もあります。ゲームの各セクションは、次にロードされるセクションを決定します。

私は各セクションをIStoryElementと呼んでいます-そして、簡単に変更/構成でき、同時にグラフ化できる方法でこれらの要素をリンクするのに最適な方法を考えています

StoryElementさまざまな構成オプションに基づいて適切なものをロードするエンジン/ファクトリーアセンブリを用意します。

私は当初、それぞれStoryElementNextElement() As IStoryElementプロパティとCompleted()イベントを提供することを計画していました。ベントが発生すると、エンジンはNextElementプロパティを読み取り、次を検索しますStoryElement

これの欠点は、ゲーム内のすべてのルートをグラフ化する場合、グラフ化できないことです。それぞれの可能なすべてのターゲットを特定できませんでしたStoryElement

私は他のいくつかの解決策を検討しましたが、それらはすべて少し不格好に感じます-たとえば、抽象化の追加レイヤーが必要ですか?つまり、StoryElementPlayersまたは同様のもの-それぞれが複数のStoryElementおそらくシリーズとChoicePlayerをつなぎ合わせ、それぞれが独自のグラフを作成する責任がありますStoryElement-しかし、これは問題を層の上に移動させるだけです。

つまり、シンプルでありながら動的なワークフローをエミュレートする方法が必要です(ただし、実際にはWWFを使用したくありません)。これほど単純なもののパターンはありますか?私が見つけたものはすべて、より高度な制御フロー(並列処理など)に関連しています。

4

2 に答える 2

5

StoryElementオブジェクトを有向グラフのノードとして考えると役立つ場合があります。StoryElementTransitionグラフのエッジは、オブジェクト(または同様の名前)で表すことができます。AStoryElementTransitionには、遷移元の状態、遷移先の状態、および遷移をトリガーするイベントへの参照を含めることができます。

ストーリーをグラフとして設定することで、有向グラフトラバーサルアルゴリズムを実行して、ゲーム内のすべての可能なルートを決定する可能性が広がります。たとえば、イベントグラフで深さ優先探索アルゴリズムを実行し、各状態と遷移をスタックにプッシュし、終了状態に達したらスタック全体を印刷できます。

于 2010-06-14T00:17:18.643 に答える
1

この質問には受け入れられた答えがあり、おそらくあなたはとにかく解決したと思いますが、私は最近それについて考えていたと言わなければなりません(「ストーリー中心のゲームをどのようにモデル化する必要がありますか?」)そして私が得た結論現在のところ:

  • ストーリーはデータであり、コード内のどこにも定義しないでください。

(同じことがゲームプレイ要素にも当てはまります。たとえば、クラスは必要ありません。代わりに、敵のデータベースから「ゴブリン」と呼ばれるものGoblinをロードできます。)Enemy.Creep

  • あなたが思いつくことができるほとんどのデザインは制限されるか、拡張するのが難しいでしょう。

これは私にとって設計の黄金のルールです。拡張可能で拡張可能なすべてのものを作成します。したがって、必要以上のことを行わず、うまく機能する単純なクラスとインターフェースの適切な階層を作成します。ある時点で、森の中で50匹のゴブリンを殺すことによってイベントをトリガーしたい場合があり、デザインが良くない場合は、ストーリーを適応させるか、フレームワークをリファクタリングする必要があります。どちらも悪いことです。

  • ほとんどのプロのゲームは、スクリプトとエンジンに依存しています。

これには理由があります。まず、ゲームをレンダリングするコードは、小さい場合は簡単に最適化でき、すべてのストーリー要素は、一般的な(Luaなどの)スクリプト言語またはカスタム表記で定義できます。したがって、YAMLなどでキャラクターを定義することができます。

  • ポイントの後でエンジンに触れて、ストーリーに集中する必要はありません。

これは、コンパイラをそのままにして、ストーリーファイル(データベース?マークアップ?スクリプト?)を編集し、それらがどのように連携するかを確認することを意味します。

于 2010-11-08T13:38:54.773 に答える