Я тут делаю недодвижок для создания текстовых квестов делаю, оцените примерно пж:
VM - вм
Она в себе хранит:
1. Функции на специальном (e)DSL.
2. Блоки исполняемого кода, которые содержат команды и вызовы функций.
3. Глобальный стейт для хранения данных.
Блоки - это диалоги. Они в себе хранят локальные переменные, и последовательность команд для вывода (за это отвечает GraphicController).
Код написанный на (e)DSL парсится в дерево, проходит тайпчек, и транслируется в последовательность блоков (их можно рассматривать как состояния в КА).
Делать чисто стековую ВМ это хорошо но слишком сложно. Вместо этого будут хранится деревья, а данные в hashset'ах (плановый вариант).
Графическая составляющая подгружается динамически в виде GraphicController у которого есть интерфейс, принимающий название команды и аргументы. Он занимается отображением на экране *логика*
Как насчёт начать с reuirements elicitation, затем перейти к формированию общей архитектуры системы, затем - элементам дизайна типа MVVM для разделения конкретного отображения и его абстрактного описания, если это вообще требуется исходя из требований? 😉