AnonymousBosch Ответов: 1

Дерево связанных узлов для текстовой диаграммы опций игры


Для окончательного проекта мы с моей группой работаем над текстовой приключенческой игрой. Способ работы игры заключается в том, что пользователям предлагается 3 варианта. Например:
1. Go to the saloon
2. Go to the general store
3. Go to the sheriff's office

Игрок выбирает 1 вариант, вводя соответствующее число, и на основе своего выбора они идут по разным путям. Моя проблема в том, что я знаю, что если мы используем кучу утверждений if/else, это не будет хорошо для оценки. Мой профессор упоминал что - то об использовании дерева связанных узлов для реализации диаграммы опций. Как я должен это сделать

Что я уже пробовал:

Мы использовали операторы if/else для продвижения игры

1 Ответов

Рейтинг:
1

Garth J Lancaster

Допустим, узел " 0 "называется корневым узлом на вершине "дерева", "вы находитесь в прихожей".

Если бы у вас была реализация дерева, то вы могли бы пойти

корень.AddChild node1 'иди в салон'
корень.AddChild node2 'Go to the general store'
корень.AddChild node3 'иди в офис шерифа'

Итак, в node0, корневой / начальной точке, вы отображаете все дочерние элементы и получаете эти параметры ... Итак, допустим, игрок выбирает node2/ "универсальный магазин", и у вас есть это :-

Узел2.Метод addChild node20 'перейти на морозильник
node2.AddChild node21 'перейти в раздел мяса'
Узел2.Node22 метод addChild 'пойти в булочную'

затем у вас есть 3 варианта того, что делать в "универсальном магазине", вы показываете дочерние элементы node2, чтобы получить следующие доступные пути

вы также можете иметь только один путь, например,

node3.AddChild node30 'ты в камере'

или тупик, никаких детей/путей, если только не будет выполнено какое - то другое условие-например, для того, чтобы все пути в универсальном магазине появились, вам, возможно, придется забрать наличные деньги по пути

Очевидно, что вам нужно вывести дерево (не помню, есть ли в java древовидная структура данных) и иметь возможность читать дерево из файла, например, чтобы построить "пути"

Что-то вроде этого

public class TreeNode<T> implements Iterable<TreeNode<T>> {

    T data;
    TreeNode<T> parent;
    List<TreeNode<T>> children;

    public TreeNode(T data) {
        this.data = data;
        this.children = new LinkedList<TreeNode<T>>();
    }

    public TreeNode<T> addChild(T child) {
        TreeNode<T> childNode = new TreeNode<T>(child);
        childNode.parent = this;
        this.children.add(childNode);
        return childNode;
    }

    // other features ...

}


Может быть настроен вручную, например

TreeNode<String> root = new TreeNode<String>("You are in the entrance hall");
{
    TreeNode<String> node1 = root.addChild("Go to the saloon");
    TreeNode<String> node2 = root.addChild("Go to the general store");
    {
        TreeNode<String> node20 = node2.addChild("Go to the freezer");
        TreeNode<String> node21 = node2.addChild("Go to the Meat section");
        TreeNode<String> node22 = node2.addChild("Go to the bakery");
    }
    TreeNode<String> node3 = root.addChild("Go to the sheriff's office");
    {
        TreeNode<String> node30 = node3.addChild("You're in the Cell");
    }
}


Видеть GitHub - gt4dev/yet-another-tree-structure: пример древовидной структуры для C# / Java с итератором и поиском[^] например

Я бы построил "игровое дерево" в отдельной программе и сериализовал его в файл, а затем в вашей реальной игре все, что вам нужно сделать, это прочитать дерево обратно, но сначала получить его с помощью жестко закодированного макета ...

Надеюсь, этого достаточно для начала