我在VB.NET 2010中设计了一个基于选择的冒险游戏,在那里你会看到一个故事标签,你可以选择2个按钮,你想要做出哪个选择。我想知道最有效的方法。
我的目标是以某种形式的数据结构存储按钮和故事的标签,这种形式暂时是哈希表,以及某种形式的选择结构。现在我使用的是一个自定义类,它引用了下两个选项的索引以及它们各自的标签索引,它们将类实例存储在一个哈希表中。我已经查看了数组,词典,列表和集合等内容,但我不确定哪一个最适合我之后的内容。任何.NET数据结构都可以。这两个数据的最有效数据结构是什么?只是一个字符串数组吗?
答案 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
是您在做出选择后显示的内容,并且即将进行下一个决定。
如果FirstChoice
或SecondChoice
为空,您可以选择隐藏按钮。这将允许您只选择一个选项,并将其倾斜到框架的一侧,以获得显着效果。 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
您可以使用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
答案 1 :(得分:1)
你的游戏很明显是决策树。如果只有2个选择,则二叉树的某些修改形式将是完美的。否则,一个更复杂的n-ary树就可以了。