これが私が構造を定義する方法です(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