基于选择的冒险游戏的数据结构?

时间:2011-11-06 17:03:16

标签: .net vb.net data-structures adventure

我在VB.NET 2010中设计了一个基于选择的冒险游戏,在那里你会看到一个故事标签,你可以选择2个按钮,你想要做出哪个选择。我想知道最有效的方法。

我的目标是以某种形式的数据结构存储按钮和故事的标签,这种形式暂时是哈希表,以及某种形式的选择结构。现在我使用的是一个自定义类,它引用了下两个选项的索引以及它们各自的标签索引,它们将类实例存储在一个哈希表中。我已经查看了数组,词典,列表和集合等内容,但我不确定哪一个最适合我之后的内容。任何.NET数据结构都可以。这两个数据的最有效数据结构是什么?只是一个字符串数组吗?

2 个答案:

答案 0 :(得分: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是您在做出选择后显示的内容,并且即将进行下一个决定。

如果FirstChoiceSecondChoice为空,您可以选择隐藏按钮。这将允许您只选择一个选项,并将其倾斜到框架的一侧,以获得显着效果。 E.g:

                  You've found yourself in a narrow corridor



                                                              [Go Right]

如果您想要启用多于两个的选择,或者至少让您自己将来可以自由地这样做,您可以像这样定义您的数据结构:

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

您可以使用ListBoxGridView样式控件将其显示给用户,也可以选择在列表框和按钮之间切换,具体取决于列表中的项目数。

顺便说一句,数据结构是有意递归的。这将成为树结构,并且在树的每个节点处您都有一个决定,并且可能是孩子的决定。

通常你不会循环这样的结构,但在这种情况下没有理由你不能。如果你遇到“游戏结束”风格的情况,你的选择可以简单地回到开头,它将链接到根实例(因此是一个“循环图”)。

修改

这是一个代码示例,向您展示如何将它们连接在一起:

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

答案 1 :(得分:1)

你的游戏很明显是决策树。如果只有2个选择,则二叉树的某些修改形式将是完美的。否则,一个更复杂的n-ary树就可以了。