1

私はVB.NET2010で選択ベースのアドベンチャーゲームを設計しています。ここでは、ストーリーラベルが表示され、2つのボタンから選択して選択します。これを行うための最も効率的な方法を知りたいです。

私の目標は、ボタンとストーリーのラベルを、現在一時的にハッシュテーブルであるデータ構造の形式と、選択肢の構造の形式で保存することです。現在、次の2つの選択肢のインデックスと、クラスインスタンスをハッシュテーブルに格納するそれぞれのラベルインデックスを参照するカスタムクラスを使用しています。配列、辞書、リスト、コレクションなどを調べましたが、どれが自分の目的に最も適しているかわかりません。任意の.NETデータ構造が機能します。これら2つのデータの最も効率的なデータ構造は何ですか?文字列配列だけで機能しますか?

4

2 に答える 2

5

これが私が構造を定義する方法です(VB.Net-fuが私を失敗させていないと仮定して):

Public Class Decision
    Public Property Title As String
    Public Property Description As String
    Public Property FirstChoice As Decision
    Public Property SecondChoice As Decision
End Class

これTitleは、その選択肢を選択するためにボタンの上または上に表示するものです。

これDescriptionは、その選択をコミットし、次の決定に到達したときに表示されるものです。

FirstChoiceまたはがnullの場合SecondChoice、ボタンを非表示にすることを選択できます。これにより、1つの選択肢のみをオプションにし、フレームの片側に傾けて劇的な効果を得ることができます。例えば:

                  You've found yourself in a narrow corridor



                                                              [Go Right]

2つより多くの選択肢を有効にしたい場合、または少なくとも将来的に自由に使用できるようにしたい場合は、次のようにデータ構造を定義できます。

Public Class Decision
    Public Property Title As String
    Public Property Description As String
    Public Property Decisions As New List(Of Decision)
End Class

ListBoxまたはスタイルコントロールを使用GridViewしてユーザーに表示したり、リスト内のアイテムの数に応じてリストボックスとボタンをオプションで切り替えることができます。

ちなみに、データ構造は意図的に再帰的です。これがツリー構造になり、ツリーの各ノードで決定が行われ、場合によっては子の決定が行われます。

通常、このような構造をループすることはありませんが、この場合にループできない理由はありません。「ゲームオーバー」スタイルの状況に遭遇した場合、オプションは単に最初に戻ることであり、ルートインスタンスにリンクされます(したがって「循環グラフ」になります)。

編集

これらをフックする方法を示すコードサンプルを次に示します。

Dim darkAlley = New Decision With
{
    .Title = "Dark Alley",
    .Description = "You are in a deep dark alley." _
        + "  The night surrounds you and you feel a bit claustrophobic." _
        + "  Obvious exits are east and Salisbury street."
}

Dim eastOfDarkAlley = New Decision With
{
    .Title = "East of Dark Alley",
    .Description = "You are mauled by a bear!" _
        + "  He was a dire bear, so he had rabies.  Start over?"
}

Dim salisburyStreet = New Decision With
{
    .Title = "Salisbury street",
    .Description = "Mmm... Ground beef... Blarrghlhlap (*tongue hangs out*)"
}

darkAlley.FirstChoice = eastOfDarkAlley
darkAlley.SecondChoice = salisburyStreet

eastOfDarkAlley.FirstChoice = darkAlley

salisburyStreet.FirstChoice = darkAlley
于 2011-11-06T17:33:26.817 に答える
1

あなたのゲームは明らかに決定木です。選択肢が2つしかない場合は、修正された形式のバイナリツリーが最適です。そうでなければ、やや複雑なn-aryツリーがそれを行います。

于 2011-11-06T17:18:03.520 に答える