Files
socoban/BACKLOG.md
T

3.8 KiB

Backlog

  • Удалить levels.dat и dynamic_prompt.txt — мёртвые файлы (дублировали вшитый дамп / пустой файл), провисели в бэклоге лишний месяц
  • Солвер: заменить BFS+Array.shift() на A* (бинарная куча) + баг с устаревшим состоянием ящиков при повторном запуске. Сделано, но по факту весь набор из 60 уровней — не лёгкая прогрессия: минимум 6 ящиков на уровень, до 34 на некоторых. Это тяжёлые многоящичные паковки, для которых даже правильный A* с хорошим deadlock-отсечением не укладывается в разумное время в JS (нужны техники уровня специализированных солверов — macro-moves, corral pruning, паттерн-базы deadlock'ов — отдельная большая задача). Сейчас солвер честно останавливается по таймауту (8с) вместо зависания на 30-80с как раньше — но "решает всё" не гарантирует
  • Добавить кнопку/клавишу отмены поиска — сделано: солвер разбит на createSolver()+пошаговый .step(), гоняется кусками через setTimeout, есть модалка с таймером и кнопкой "Отмена" (+ Esc). 8-секундный хардкап убран — считает сколько угодно, пока не отменишь
  • Добавить отмену хода (undo, клавиша Z/U)
  • Добавить выбор уровня (не только N/P по одному)
  • Сохранять прогресс в localStorage (текущий уровень, счётчик ходов)
  • Заменить alert('Победа!') на экран победы — сделано иначе и лучше: механика двери-выхода (см. ниже), per-level alert исчез вовсе. Остался только финальный alert "игра пройдена" на 60-м уровне — можно тоже заменить на экран, но не горит
  • Touch-управление для мобилок (canvas фиксированного размера, только клавиатура сейчас)
  • Favicon + README (что за проект, откуда дамп уровней)

Солвер — следующий уровень (если понадобится тянуть тяжёлые 20-34-ящичные уровни)

  • Разбивка карты на туннели/комнаты (макро-ходы) — режет дерево поиска на порядки сильнее, чем то, что уже сделано (deadlock-клетки + A*). Отдельная большая задача, не вписывается в лёгкую правку

Дизайн блоков

  • Ящик на цели / не на цели различать не только цветом (бежевый #d4a373 vs красный #e94560 — для дальтоника оба буро-коричневые), добавить форму/иконку/паттерн
  • Маркер пустой цели (.) — точка мелкая (radius TILE/5) и полупрозрачная, на шахматном полу может теряться издали; увеличить/сделать контрастнее. Актуально только для незанятых целей — занятую и так видно по цвету ящика