Содержит способы достижения целей поставленных в техническом задании. Самая объёмная документация по проекту. Фактически - это готовое решение поставленной задачи.
Технический проект «Сюжетограф». Описание Фазы №1.
План.
Фаза №1.
Проигрывать диалоги игры.
Загружаем условия диалога.
Выходим на фразу 0.
Интерпретируем обмен фразами между персонажем и протагонистом.
Исполняем диалог до финальной фразы в текущей цепочке, далее сбрасываем на 0.
Управляем условиями и командами диалога вручную.
Технология исполнения диалога:
Вопросы и предположения:
1. Надо понять, что означает во фразе пустая секция <text />. Рабочее предположение – текста не выводить.
2. Если секция содержит несколько тэгов Next, то вероятно обработать
надо список до первой исполненной фразы. Если ни одна из фраз не
сработала, то выдать ошибку исполнения.
Фразы протагониста и фразы персонажей чередуются. Сначала фразу даёт персонаж – приглашение к диалогу. Протагонист отвечает.
Создать интерпретатор диалога «DoDialog».
Создать интерпретатор обмена фразами «DoExchangePhrases».
Состоит из двух операций:
1. GetQuestion. Получить вопрос-приглашение к диалогу.
2. SetAnswer. Дать ответ.
Действия по обработке фразы:
1. Взять секцию фразы.
2. Выделить список Next. Если список пуст, то внести в список 0, то есть выполнить сброс диалога на нулевую фразу.
3. Проверить условия. Если условия не верны – не обрабатывать далее фразу.
4. Если условия верны, то выдать на экран секцию Text. С учётом предположения №1.
5. Выполнить список Next , в соответствии с предположением №2 из
данного раздела ТехПроекта. То есть, пытаться последовательно выполнять
фразы из списка Next, до тех пор пока не выполнится какая-нибудь.
6. Если в процессе интерпретации текущей фразы будет зафиксировано
двойное прохождение через фразу 0, то остановиться и выдать ошибку
зацикливания.
Текущий список функций по обработке фраз:
Function DoQuestion(id : integer): string; //исполнить фразу по номеру, как вопрос-приглашение
Procedure DoExchangePhrases; // выполненить обмен фразами по схеме: приглашение персонажа - ответ протагониста.
Procedure GetListNextPhrases(id : integer); // получить список Next фразы по номеру
Procedure SectionPhraseToScreen(id : integer); // выдать на экран содержимое секции фразы по номеру
Procedure GetListSectionPhrase(id : integer); // получить содержимое секции фразы по её номеру
Procedure LoadInfoPortionsByDialog(sNameDialog : string); // загрузить
в экранный список имена инфопорций и предусловий всего текущего диалога
function PhraseStringById(id : integer): string; // Получить текст фразы по её номеру
function StringByName (sNamePhrase : string): string; // получить текст строки по имени строки
Как подсказал (и стёр подсказку) Singapur22 - если нет следующей Next фразы, то исполнить следующую секцию <dailog_actor>. Когда нет такого диалога, тогда вернуться на завершающую фразу <start_dialog>. Изучить.