7 Commits

Author SHA1 Message Date
george
50e6677989 Этап 7: бонус-еда с таймером
Иногда при поедании обычной еды появляется золотая бонус-еда на
ограниченное время и даёт больше очков.

- bonusFood/bonusStepsLeft; шанс выката 1 из 4 при обычном поедании
- бонус живёт BONUS_LIFETIME_STEPS шагов (таймер в шагах -> учитывает паузу)
- съеденный бонус даёт BONUS_POINTS очков, звук выше тоном, вспышка
- отрисовка золотой клетки + дуга-таймер (drawArc) в drawBoard()
- randomFreeCell учитывает и еду, и бонус, чтобы не наложить их

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 18:20:02 +03:00
george
c3529f08a0 Этап 6: пауза
Тап по полю во время игры ставит/снимает паузу.

- флаг paused; игровой цикл шагает только при !paused
- тап в detectTapGestures переключает паузу (старт/рестарт без изменений)
- оверлей «ПАУЗА» с подсказкой о продолжении
- reset() сбрасывает паузу; подсказка про паузу на стартовом экране

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 18:06:54 +03:00
george
da783d9f0d Этап 5: анимация поедания еды
В момент съедания на месте еды расходится затухающее кольцо.

- Animatable popProgress (0->1 за один укус), запуск из step()
- отрисовка кольца в drawBoard() через drawCircle + Stroke,
  радиус растёт, прозрачность падает с прогрессом
- цвет кольца — цвет еды

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 18:00:07 +03:00
george
05d65eab14 Этап 4: звук при поедании еды
Короткий звуковой эффект при съедании еды через 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>
2026-06-17 17:44:46 +03:00
george
d8efaa53a6 Этап 3: сохранение рекорда через DataStore
Рекорд теперь сохраняется между запусками приложения.

- 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>
2026-06-17 17:07:42 +03:00
george
6a1719c148 Этап 2: ускорение змейки
Змейка ускоряется по мере роста счёта: задержка между шагами
уменьшается со 150 мс до 60 мс (по 6 мс за каждую съеденную еду).

- stepDelay(score) — пересчёт задержки в игровом цикле LaunchedEffect
- speedLevel(score) — уровень скорости для индикатора на экране
- в шапке добавлен показатель «Скорость»

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 16:54:52 +03:00
george
1ccb52cfb5 Этап 1: Змейка на Jetpack Compose
Простое 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>
2026-06-17 16:41:06 +03:00