Files
Learn_System/plans/quantik-game/phase-3-graph-levels.md
T
Maxim Dolgolyov 4b5c8077d3 @
feat(quantik-game): фаза 0 — слой целей в движке (goal/HUD/result)

Декларативный блок goal в спеке SimForge (булево SimExpr-условие победы),
вычисляемый каждый кадр: фиксация результата (победа/время/попытки/звёзды),
callback onGoal, HUD-оверлей (цель/звёзды/подсказка/баннер, inline SVG).
API инстанса: onGoal/getResult/resetResult. Серверный validateSpec
пропускает goal/game (длина выражений + escape текста, без исполнения).
Аддитивно: спека без goal ведёт себя как раньше. Смоук 40/40; npm test
238 pass/8 baseline; lint:routes 0. План фичи (7 фаз) + CONTEXT.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-06-13 15:13:02 +03:00

4.4 KiB

Phase 3: Граф-уровни (движение по f(x)) + зоны-препятствия

Status: Not Started Parent plan: PLAN.md Domain: fullstack

Objective

Новый тип уровня: Квантик движется по кривой y=f(x), которую собирает игрок (настраивает параметры/выбирает выражение). Препятствия — «запретные зоны»; цель/звёзды/проигрыш — выражения. Реюз plot + SimExpr. Сид граф-главы.

Tasks

  • Task 1: «Бегунок по кривой»: герой-точка с x = функция t (напр. линейный проход xmin→xmax), y = f(x) через ту же скомпилированную функцию, что у plot. Кривая рисуется (P3 plot), герой едет по ней с glow/trail. Без физики (кинематический проход), либо мягкая физика — на выбор уровня.
  • Task 2: Тип объекта/поле «зона» (forbidden/target): прямоугольник/круг в мире + удобные env-предикаты (или документированный паттерн: fail:'inzone(...)'). Реализовать helper-предикаты БЕЗ расширения небезопасного синтаксиса — предпочесть готовить булевы поля зон в env (напр. zone1.hit) на основе позиции героя, чтобы goal/fail ссылались на них.
  • Task 3: Цель = добраться до конца/в целевую зону, не задев запретные (fail). Звёзды: пройти под нормативом, собрать бонус-точки (зоны-сборы).
  • Task 4: Управление: слайдеры коэффициентов f(x) (a·sin(b·x+c)+d и т.п.) ИЛИ выбор/набор выражения с inline-проверкой SimExpr.compile(...).error (как в sim-builder). Безопасно.
  • Task 5: Контент: сид граф-главы (~4–5 уровней): синус под мостом, парабола над ямой, кусочная подгонка, экспонента/логарифм — растущая сложность, привязка к темам алгебры.
  • Task 6: Интеграция в карту (Ф2): новая глава-созвездие; общий конвейер результата/XP.
  • Task 7: Тесты: проход по кривой достигает цели; задевание зоны → fail; смоук рендера кривой+героя.

Files to Modify/Create

  • frontend/js/labs/_sim_engine.js — поддержка «бегунка по кривой» (если не выразимо текущими полями) и подготовка булевых полей зон в env. Аддитивно, документировать в шапке.
  • frontend/js/game/levels.js — граф-глава.
  • frontend/js/game/quantik-game.js / map.js — новая глава, управление коэффициентами.
  • тест(ы).

Acceptance Criteria

  • Квантик едет по собранной игроком кривой; правильная f(x) проводит между препятствиями к цели.
  • Задевание запретной зоны → проигрыш; норматив/сборы дают звёзды.
  • Кривая безопасна (SimExpr, без eval); existing симуляции/уровни не затронуты; тесты зелёные.

Notes

  • НЕ вводить произвольные функции-предикаты в синтаксис выражений (безопасность). Зоны → булевы env-поля.
  • Переиспользовать P3 plot (несколько кривых, заливка, маркеры) для визуала «земли»/препятствий.

Review Checklist

  • Все задачи; аддитивность движка; без эмодзи/eval; тесты зелёные; lint baseline 0

Handoff to Next Phase