Skip to content

Реализовать парсер для диалоговых файлов #8

@SDesya74

Description

@SDesya74

#7 описывает нужный формат диалоговых файлов. Необходимо реализовать парсер для такого формата, который позволяет превращать строку этого формата в стейтмашину, по которой можно перемещаться согласно правилам диалога.

Для тестов можно сделать консольную программу, которой нужно скормить диалоговый файл, а она в консоли запустит данный диалог.

Для разработки можно создать дополнительный репозиторий, так как игра, скорее всего, будет на Rust, желательно реализовать парсер тоже на Rust в виде библиотеки, но прототип алгоритма и консольную программу можно сделать на чём угодно, лишь бы работало :)

Описание функциональности парсера

Парсер должен уметь вынимать из файла:

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

Пример:

@
Алиса, зевая, заходит в комнату Боба

@alice:yawning
Привет, Боб!

@:happy // настроение обновляется у Алисы, поскольку предыдущее изменение состояния относилось к Алисе

Сегодня такой хороший день!
С самого утра я чувствую воодушение и радость! // две строки, не разделённые пустой строкой, воспринимаются как одна реплика

А как у тебя настроение?

:menu Что ей ответить?
:opt(#happy_mood) Отличное, спасибо!
:opt(#sad_mood) Не очень радостное...


#happy_mood

@bob:happy
У меня сегодня нет никаких планов, хочешь, пойдём погуляем?

:end // конец


#sad_mood

@bob:sad
Я хочу побыть один...

:end // конец

Эти буквы надо распарсить в структуру такого вида:

characters:
  - alice: yawning, happy
  - bob: happy, sad
lines:
  -
    type: line
    author: harrator
    text: "Алиса, зевая, заходит в комнату Боба"
  -
    type: line
    author: alice
    state: yawning
    text: "Привет, Боб!"
  -
    type: line
    author: alice
    state: happy
    text: [ "Сегодня такой хороший день!\nС самого утра я чувствую воодушение и радость!", "А как у тебя настроение?" ]
  -
    type: menu
    label: "Что ей ответить?"
    opts: 
      -
        mark: happy_mood
        text: "Отличное, спасибо!"
      -
        mark: sad_mood
        text: "Не очень радостное..."
marks:
  happy_mood:
    lines:
      -
        type: line
        author: bob
        state: happy
        text: "У меня сегодня нет никаких планов, хочешь, пойдём погуляем?"
      -
        type: end

  sad_mood:
    lines:
      -
        type: line
        author: bob
        state: sad
        text: "Я хочу побыть один..."
      -
        type: end

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions