Серийный номер программы ничего не отображает (SIM 800L)

Короткий ответ: все узлы знают своих родителей и детей.

Есть несколько способов подойти к этой проблеме. Я объясню подход, используя древовидную структуру с несколькими классами узлов. Сначала мы рассмотрим взаимодействие с игроком, как вы описали:

  • Выполнение выбора диалога (говоря)
  • Наблюдение ответа на диалог (прослушивание)

Также необходимо рассмотреть некоторые важные условия:

  • Пользовательские разговоры
  • Бесконечные прерывания с AI

Из этого плана мы можем построить наше дерево с некоторыми классами. Я поцарапал некоторые примеры, но я их не тестировал. Надеюсь, это передает идею, и вы можете создать собственное решение. Для вас может быть более полезным сделать один класс Node, который просто знает, какой тип он есть. Другим усовершенствованием будет использование интерфейса или какой-либо способ обобщить отношения между родителями и дочерними элементами, которые позволили бы создавать более сложные древовидные структуры.

class ChoiceNode
{
    public ChoiceNode(ResponseNode myParent)
    {
        parent = myParent;
    }

    ResponseNode parent = null;
    List children = new List;
    bool canSayGoodbye = true;
}

class ResponseNode
{
    public ResponseNode(ChoiceNode myParent, string myMessage)
    {
        parent = myParent;
        parent.children.Add(this);
        response = myMessage;
    }

    ChoiceNode parent;
    ChoiceNode child;
    string response;
}

Теперь мы должны иметь возможность использовать метод для отображения выбора диалога с помощью просто перечисляя ResponseNode.children. Затем, когда мы делаем выбор диалога, мы хотим отобразить ResponseNode.response, а затем перейдем к ResponseNode.child, чтобы найти следующий набор вариантов диалога. Когда parent == null, мы находимся в корневой ветке. Когда child == null, мы показываем некоторый текст завершения.

Надеюсь, это полезно и даст вам некоторые идеи.

0
задан Danny_ds 19 January 2019 в 08:29
поделиться