Структура данных для Приключенческой игры на основе выбора? - PullRequest
1 голос
/ 06 ноября 2011

Я разрабатываю приключенческую игру на основе выбора в VB.NET 2010, где вам представлен ярлык истории, и вы выбираете между двумя кнопками, какой выбор вы хотите сделать.Я хочу знать наиболее эффективный способ сделать это.

Мои цели - хранить ярлыки для кнопок и истории в некоторой форме структуры данных, которая сейчас временно является хеш-таблицей, и в некоторой форместруктуры для выбора.Прямо сейчас я использую пользовательский класс, который ссылается на индексы следующих 2 вариантов и их соответствующие индексы меток, которые хранят экземпляры класса в хеш-таблице.Я изучал такие вещи, как массивы, словари, списки и коллекции, но я не уверен, какой из них лучше всего подходит для того, что мне нужно.Любая структура данных .NET будет работать.Какова наиболее эффективная структура данных для этих двух частей данных?Будет ли работать только массив строк?

Ответы [ 2 ]

5 голосов
/ 06 ноября 2011

Вот как я бы определил структуры (если 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 голос
/ 06 ноября 2011

Ваша игра довольно четко представляет собой дерево решений.Если есть только 2 варианта, то некоторая измененная форма двоичного дерева будет идеальной.Иначе это сделало бы несколько более сложное n-арное дерево.

...