アドベンチャーゲームで不可能な状態を回避する


15

私はかなり複雑なゲームを自分で選択するアドベンチャースタイルを作成することを検討していますが、ゲームデザインを支援するテクニックまたは方法を探しています。

それは多分岐の物語であり、時には分岐が自分自身に折り返され、あなたの主要な行動が記憶され、アイテムが収集されます。例えば、プレイヤーが城に行く前に沼地と森に行った場合、恐竜の骨を拾い、ユニコーンを殺し、余分な腕を伸ばしました。プレイヤーが洞窟と地下室を経由して城に着くと、自転車と奇妙な匂いを拾いました。現在、城のパズルを開発するとき、2つの不可能性が必要な状況を作りたくありません。

イベントやアイテムを非常に慎重に文書化する以外に、プロセス、スプレッドシートで使用できるテクニック、または私を助けることができるソフトウェアがありますか?

回答:


11

有向グラフの問題のように聞こえます。

ストーリーの分岐ごとに現在のアイテムを記録し、グラフを分岐します。そこから各ブランチをたどって同じことを行います。別のブランチに移動したら、現在のアイテムを記録してグラフをブランチします。これにより、多数のノードが複製された非常に密なグラフになります(ただし、各ノードは異なるグラフシーケンスから取得されます)が、ループは発生しません。

最後に、ストーリー内の任意の時点で取得できるすべてのアイテムのグラフと、そこに到達するためのあらゆる可能な方法が必要です。

さて、完成したグラフで:項目X + Y + Zを必要とする各問題について、その問題があるすべてのノードを見つけ、記録された項目がその条件を満たすことができるかどうかを確認します。障害が発生した場合は、グラフをさかのぼって、問題を解決するための適切な項目なしで、そこに到達したすべての決定を見つけます。

運が良ければ、少なくとも概念的には元の設計が既にこのようにレイアウトされているので、コードは現実を反映し、検証しやすいはずです。

大規模なゲームを構築している場合、グラフ検索の処理時間が少し長くなる可能性があるため、実行に時間がかかり、結果をレポートに出力して使用できるユーティリティのように構築します。


それはツールを開発することを意味します。それを最後の手段にしましょう。
Ali1S232

6
このツールは、あなた自身の頭脳、記録保持、メモリ容量のいずれか、または疲れずグリッチを見逃さない自動化されたものになります=)ゲームの大きさや、費やした時間が価値があるかどうかを判断するために、同じエンジンから別のエンジンを作成します。
パトリックヒューズ

これを行う最善の方法は、依存関係ツリーを上から下へ(逆方向に)構築することであり、ツリー内の2つのアイテムが同じ依存関係を共有している場合(および依存関係に選択が必要な場合)、違反があります。
減速

0

これは奇妙な答えのように思えるかもしれませんが、コンパイラ(c ++など)を使用して、不可能なイベントを簡単に確認できます。方法を説明しましょう。各ステージに1つのヘッダーファイルがあります。そしてゲームはmain.cppファイルで終了します。あなたから行くことができるたびstage astage b、あなただけのファイルをインクルードする必要がありに関係stage aの中でstage b。ステージで新しいアイテムを取得するたびに、そのアイテムの値を定義するだけです。アイテムを紛失したり使用したりするたびに、定義を解除する必要があります。最終的に各段階で必要なのは、その段階で必要なアイテムに定義されたすべての値を使用することだけです。コードでこれを使用する方法のサンプルを次に示します。

ああ

#define itemA

ああ

#include <a.h>
#undef itemA
#define itemB

ch

#include <a.h>

itemA;

#include <b.h>

itemB;

main.cpp

#include <c.h>
int main()
{
}

実際に使用する前にいくつかの変更が必要になる場合がありますが、このようなコードを作成できると思います。また、提案したアプローチの代わりに、継承を使用し、各ステージでクラスを使用することもできます。これら以外は、自分でツールを開発する必要があると思います。


2
コンパイラの本当の誤用です!
Ali1S232

3
おもしろいですが、非常に壊れやすく、ストーリー内のオブジェクト/イベント/セクションごとにクラスがある場合にのみ機能します。私はもっ​​とデータ駆動型のアプローチを考えていました。xmlなどから読みました。あなたの提案をありがとう。
DanDan

3
クエストが変更されるたびに強制的に再コンパイルするのは、あまり良い考えではありません。また、これにより、エンドユーザー(DLCなど)にデータの更新が許可されません。
パトリックヒューズ

2
そのコードサンプルは、リリースされるコードに関連するものではなく、そのコードは実際には何もしません。ストーリーラインとクエストが有効かどうかを確認するだけです。(そうでない場合は、コンパイルエラーが発生するだけです。それ以外の場合は、そのクエストツリーをゲームに実装できます!
Ali1S232

ああ、私は誤解しました。このコードが実際のデータを確実に反映するために、クエストロジックエラーのデバッグを保存するよりも多くの時間を費やすことができるのではないかと考えています。
パトリックヒューズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.