Уровень 1 0 / 100 XP
Сегодня
0 мин
0 вопросов
- точность
0 уроков

Завтра счёт начнётся заново

Новое достижение
Первые шаги

Best Practices

Лучшие практики создания качественных scenarios

Best Practices: Создание качественных сценариев

Проверенные паттерны и рекомендации для scenarios.


Структура scenario.yaml

Полная структура файла

# === МЕТАДАННЫЕ ===
id: unique-scenario-id
version: 1
type: branching-scenario  # или linear-scenario
title: "Название сценария"
description: "Краткое описание (1-2 предложения)"
topic: "область знаний"
time_minutes: 15
difficulty: 3  # 1-5
startNode: start

# === НАСТРОЙКИ ===
settings:
  allowBacktrack: false      # Можно ли вернуться назад
  showVariables: true        # Показывать переменные
  showHistory: true          # История выборов
  restartAllowed: true       # Кнопка "Начать сначала"
  saveProgress: true         # Сохранение прогресса

# === ПЕРЕМЕННЫЕ ===
variables:
  var_name:
    initial: 50
    min: 0
    max: 100
    label: "Название переменной"
    description: "Что она означает"

# === УЗЛЫ ===
nodes:
  - id: node1
    type: scene
    content: "..."
    choices: [...]

  - id: node2
    type: ending
    title: "..."
    content: "..."

Naming Conventions

ID узлов


Паттерны именования

Тип узла Паттерн Пример
Начало start, intro, awakening awakening
Сцена scene_, [topic]_scene library_entrance
Развилка choice_, decision_ choice_technology
Checkpoint checkpoint_[topic] checkpoint_week3
Theory theory_[topic] theory_loops
Practice practice_[topic] practice_redux
Концовка ending_[type] ending_success

Variables Design

Правила для переменных


Типы переменных

1. Resource (Ресурс)

Что-то, что тратится и накапливается:

variables:
  money:
    initial: 1000
    min: 0
    max: 10000
    label: "Деньги"

  health:
    initial: 100
    min: 0
    max: 100
    label: "Здоровье"

Использование:

effects:
  money: -200    # Потратил
  health: -10    # Получил урон

2. Stat (Характеристика)

Качества, которые растут:

variables:
  wisdom:
    initial: 0
    min: 0
    max: 100
    label: "Финансовая мудрость"

  codeQuality:
    initial: 50
    min: 0
    max: 100
    label: "Качество кода"

Использование:

effects:
  wisdom: 15       # Стал мудрее
  codeQuality: 10  # Код улучшился

3. Relationship (Отношения)

Связи с персонажами или группами:

variables:
  family_bond:
    initial: 60
    min: 0
    max: 100
    label: "Связь с семьёй"

  reputation:
    initial: 50
    min: 0
    max: 100
    label: "Репутация"

4. Abstract (Абстрактное)

Философские или эмоциональные концепты:

variables:
  humanity:
    initial: 100
    min: 0
    max: 100
    label: "Человечность"

  inner_freedom:
    initial: 20
    min: 0
    max: 100
    label: "Внутренняя свобода"

Балансировка переменных

Правило 10-20-30:

  • Мелкие изменения: ±10
  • Средние изменения: ±20
  • Крупные изменения: ±30
choices:
  - text: "Небольшая трата (кофе)"
    effects:
      money: -10

  - text: "Средняя трата (обед)"
    effects:
      money: -20

  - text: "Крупная трата (наушники)"
    effects:
      money: -30

Content Writing

Длина контента

Тип узла Рекомендуемая длина
Scene 50-150 слов
Theory 100-300 слов
Checkpoint 20-50 слов (сам вопрос)
Ending 150-300 слов

Стиль написания

1. Активный залог

# ✅ Хорошо
content: "Ты открываешь дверь и видишь..."

# ❌ Плохо
content: "Дверь была открыта тобой, и комната была увидена..."

2. Настоящее время

# ✅ Хорошо
content: "Грегор просыпается и понимает..."

# ❌ Плохо
content: "Грегор проснулся и понял..."

3. Эмоциональная вовлечённость

# ✅ Хорошо
content: |
  Твоё сердце бьётся быстрее. За дверью слышны шаги.
  **Что ты сделаешь?**

# ❌ Плохо
content: |
  Есть дверь. За ней кто-то. Нужно решить.

Форматирование Markdown

Используй Markdown для выразительности:

content: |
  **Понедельник, 1-е число**

  Мама даёт тебе 1000 рублей.

  "Вот твои карманные на месяц. Трать с умом!"

  *Целая тысяча!* На что бы её потратить...

  Впереди **4 недели**. Посмотрим, как ты справишься!

Элементы:

  • **жирный** — акценты
  • *курсив* — мысли, эмоции
  • "кавычки" — диалоги
  • Абзацы — разделение мыслей

Choices Design

Количество выборов


Качество выборов

1. Выборы должны быть значимыми

# ✅ Хорошо — выборы ведут к разным последствиям
choices:
  - text: "Купить наушники за 600₽"
    goto: bought_headphones
    effects:
      money: -600

  - text: "Не покупать — сэкономить деньги"
    goto: saved_money
    effects:
      wisdom: 10

# ❌ Плохо — выборы не влияют на сюжет
choices:
  - text: "Сказать 'Да'"
    goto: same_result

  - text: "Сказать 'Хорошо'"
    goto: same_result

2. Избегай ложных выборов

# ❌ Ложный выбор — все ведут к одному
choices:
  - text: "Вариант 1"
    goto: same_node
  - text: "Вариант 2"
    goto: same_node

# ✅ Правильно — хотя бы короткая развилка
choices:
  - text: "Вариант 1"
    goto: path_a
  - text: "Вариант 2"
    goto: path_b

# path_a и path_b могут потом сойтись, но дают разный опыт

3. Чёткие формулировки

# ✅ Хорошо — понятно, что выбираешь
choices:
  - text: "Спланировать бюджет на месяц"
  - text: "Сразу пойти в магазин"

# ❌ Плохо — неясно, к чему приведёт
choices:
  - text: "Вариант A"
  - text: "Сделать что-то"

Feedback для выборов

Давай мгновенную обратную связь:

choices:
  - text: "Отложить 100₽ в копилку"
    goto: week1_prepared
    effects:
      savings: 100
      money: -100
      wisdom: 10
    feedback: |
      **Правило 10%** — один из главных принципов финансовой грамотности.
      Даже небольшая подушка безопасности может очень выручить!

Testing Scenarios

Чеклист перед публикацией


Техники тестирования

1. Пройди все пути

Создай таблицу путей:

Путь Описание Концовка Переменные
Путь 1 Всегда планирует, экономит ending_success money: 500, wisdom: 80
Путь 2 Импульсивные покупки ending_broke money: 0, wisdom: 20
Путь 3 Баланс ending_neutral money: 300, wisdom: 50

2. Проверь edge cases

  • Что если money = 0?
  • Что если все переменные максимальны?
  • Что если пользователь всегда выбирает первый вариант?

3. Проверь время прохождения

# Укажи реальное время
time_minutes: 15  # Не 5, если на самом деле 20!

Протестируй на реальных пользователях и измерь время.


Structure Patterns

Паттерн: Hub and Spokes (Хаб и спицы)

Центральный узел, от которого расходятся пути:

      spoke1
         |
  spoke2-HUB-spoke3
         |
      spoke4

Использование: Выбор специализации, направления обучения.

- id: hub
  content: "Выбери направление изучения"
  choices:
    - text: "Frontend"
      goto: frontend_path
    - text: "Backend"
      goto: backend_path
    - text: "DevOps"
      goto: devops_path

Паттерн: Funnel (Воронка)

Множество путей сходятся к одной точке:

A → \
B → MERGE → END
C → /

Использование: Разные подходы к одной проблеме.

# Разные пути решения
- id: approach_a
  goto: solution

- id: approach_b
  goto: solution

- id: approach_c
  goto: solution

# Общее решение
- id: solution
  content: "Независимо от подхода, ты пришёл к решению!"

Паттерн: Critical Path (Критический путь)

Один “правильный” путь, остальные — ошибки:

START → CHOICE
  ├─ Correct → Success
  ├─ Wrong1 → Fail
  └─ Wrong2 → Fail

Использование: Обучение процедурам, безопасности.

- id: emergency_choice
  content: "Человек без сознания. Что делать?"
  choices:
    - text: "Проверить дыхание"
      goto: correct_step_2
    - text: "Вызвать скорую"
      goto: wrong_order
    - text: "Начать массаж сердца"
      goto: wrong_no_check

Common Mistakes

1. Слишком много переменных

# ❌ Плохо — 10 переменных
variables:
  money: ...
  health: ...
  stamina: ...
  wisdom: ...
  charisma: ...
  intelligence: ...
  luck: ...
  karma: ...
  reputation: ...
  experience: ...

# ✅ Хорошо — 3-4 ключевые
variables:
  money: ...
  wisdom: ...
  health: ...

2. Слишком глубокое ветвление

# ❌ Плохо — 5 уровней вложенности
START → A → B → C → D → E → END

# ✅ Хорошо — 2-3 уровня с convergence
START → CHOICE → PATH → MERGE → END

3. Нет обратной связи

# ❌ Плохо — пользователь не понимает последствия
choices:
  - text: "Вариант A"
    goto: next
    effects:
      wisdom: -20

# ✅ Хорошо — объяснение
choices:
  - text: "Вариант A"
    goto: next
    effects:
      wisdom: -20
    feedback: |
      Импульсивное решение! В будущем подумай дважды.

4. Игнорирование условий

# ❌ Плохо — выбор доступен даже без денег
choices:
  - text: "Купить за 500₽"
    goto: buy_item

# ✅ Хорошо — условный выбор
choices:
  - text: "Купить за 500₽"
    goto: buy_item
    condition: "money >= 500"

  - text: "Не хватает денег..."
    goto: no_money
    condition: "money < 500"

Performance Tips

Оптимизация размера файла


Lazy Loading изображений

# ✅ Используй внешние URL
image: "https://source.unsplash.com/800x600/?library"

# Или относительные пути
image: "/images/scenarios/my-scenario/scene1.jpg"

# ❌ Не используй base64 embed
image: "data:image/png;base64,iVBORw0KG..."  # Слишком большой файл!

Accessibility

Текстовые альтернативы

Всегда добавляй описания к изображениям:

- id: scene_with_image
  type: scene
  image: "/images/library.jpg"
  content: |
    **Старая библиотека**

    Пыльные полки тянутся до потолка.
    Запах древних книг наполняет воздух.

Описание в content дублирует то, что на изображении.


Ясность выборов

# ✅ Хорошо — понятные последствия
choices:
  - text: "Потратить 100₽ на обед"
  - text: "Взять еду из дома (бесплатно)"

# ❌ Плохо — неясно
choices:
  - text: "Вариант 1"
  - text: "Вариант 2"

Проверка понимания


Следующие шаги