Змейка непрерывно поворачивает в сторону смещения пальца от точки касания,
пока ведёшь по экрану (а не один поворот на отпускание свайпа).
- обработка в onDrag (а не onDragEnd): turn() вызывается на каждое движение
- направление по доминирующей оси смещения от origin; мёртвая зона 28dp
- общий turn() с запретом разворота на 180°; быстрый флик тоже работает
- подсказка на старте обновлена
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- раздел «Этапы» переписан таблицей: что меняется / приём / где в коде
- «Что внутри» и «Управление» приведены к итоговой версии (тор, пауза)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Змейка проходит сквозь край поля и появляется с противоположной стороны.
- координаты головы считаются по модулю: (x+dx+COLS)%COLS, (y+dy+ROWS)%ROWS
- столкновение с краем больше не убивает; смерть только от себя/препятствий
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Прогрессия сложности: каждые 5 очков — новый уровень с новыми стенами.
- obstacles (Set<Cell>) и level; addObstacles() добавляет порцию стен,
избегая змейки/еды/бонуса/других стен и клеток вплотную к голове
- столкновение со стеной-препятствием = Game Over
- еда и бонус не спавнятся в препятствиях
- двустрочная шапка со счётом/рекордом и уровнем/скоростью
- reset() очищает препятствия и уровень
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Иногда при поедании обычной еды появляется золотая бонус-еда на
ограниченное время и даёт больше очков.
- bonusFood/bonusStepsLeft; шанс выката 1 из 4 при обычном поедании
- бонус живёт BONUS_LIFETIME_STEPS шагов (таймер в шагах -> учитывает паузу)
- съеденный бонус даёт BONUS_POINTS очков, звук выше тоном, вспышка
- отрисовка золотой клетки + дуга-таймер (drawArc) в drawBoard()
- randomFreeCell учитывает и еду, и бонус, чтобы не наложить их
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Тап по полю во время игры ставит/снимает паузу.
- флаг paused; игровой цикл шагает только при !paused
- тап в detectTapGestures переключает паузу (старт/рестарт без изменений)
- оверлей «ПАУЗА» с подсказкой о продолжении
- reset() сбрасывает паузу; подсказка про паузу на стартовом экране
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
В момент съедания на месте еды расходится затухающее кольцо.
- Animatable popProgress (0->1 за один укус), запуск из step()
- отрисовка кольца в drawBoard() через drawCircle + Stroke,
радиус растёт, прозрачность падает с прогрессом
- цвет кольца — цвет еды
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Короткий звуковой эффект при съедании еды через SoundPool.
- res/raw/eat.wav — короткий синтезированный «блип» (PCM 16-bit моно)
- SoundPool с AudioAttributes USAGE_GAME, загрузка сэмпла один раз
- воспроизведение в step() при поедании еды
- освобождение SoundPool в DisposableEffect при уходе с экрана
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Рекорд теперь сохраняется между запусками приложения.
- ScoreStore.kt — обёртка над Preferences DataStore (Flow на чтение,
suspend saveBest на запись; работа с диском вне UI-потока)
- загрузка рекорда при старте экрана через LaunchedEffect
- сохранение нового рекорда из step() через scope.launch
- зависимость androidx.datastore:datastore-preferences:1.1.1
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Змейка ускоряется по мере роста счёта: задержка между шагами
уменьшается со 150 мс до 60 мс (по 6 мс за каждую съеденную еду).
- stepDelay(score) — пересчёт задержки в игровом цикле LaunchedEffect
- speedLevel(score) — уровень скорости для индикатора на экране
- в шапке добавлен показатель «Скорость»
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Простое Android-приложение для студентов: классическая «Змейка»
на одном экране (Compose Canvas + игровой цикл на корутине).
- управление свайпами, тап для рестарта
- сетка 20x30, рост змейки, счёт и рекорд за сессию
- стек: Kotlin, Jetpack Compose, AGP 8.13.2 / Gradle 8.13
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>