1
0
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

80 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🐍 Змейка на Jetpack Compose
Учебный пример простого Android-приложения для студентов: классическая игра
«Змейка» на одном экране. Цель примера — показать, как устроено реальное
Android-приложение на современном стеке (Kotlin + Jetpack Compose) без лишней
сложности.
## Что внутри
- Игровое поле-сетка 20×30
- Управление **свайпами** (вверх/вниз/влево/вправо)
- Змейка растёт, когда съедает еду; ведётся счёт и рекорд за сессию
- Столкновение со стеной или с собой = Game Over, **тап** — рестарт
- Вся отрисовка — через Compose `Canvas`, игровой цикл — на корутине
## Стек
| Что | Версия |
|-----|--------|
| Язык | Kotlin 2.0.20 |
| UI | Jetpack Compose (BOM 2024.10.01, Material 3) |
| Android Gradle Plugin | 8.13.2 |
| Gradle | 8.13 |
| compileSdk / minSdk | 36 / 24 |
## Как запустить
### Вариант 1: Android Studio (рекомендуется)
1. Открыть папку проекта в Android Studio (**File → Open**).
2. Дождаться Gradle Sync.
3. Подключить телефон по USB (с включённой *отладкой по USB*) или запустить эмулятор.
4. Нажать ▶ **Run**.
### Вариант 2: командная строка
```bash
# нужен JDK 17+ и установленный Android SDK
./gradlew installDebug # соберёт и поставит приложение на подключённое устройство
```
> Файл `local.properties` с путём к SDK создаётся автоматически Android Studio
> и **не** хранится в репозитории — у каждого свой путь.
## Структура проекта
```
app/src/main/
├── java/com/example/snake/
│ ├── MainActivity.kt # точка входа: ComponentActivity + setContent { SnakeGame() }
│ └── SnakeGame.kt # вся игра: состояние, игровой цикл, отрисовка, управление
├── res/values/themes.xml # тема приложения
└── AndroidManifest.xml
```
👉 **Главный файл для изучения — [`SnakeGame.kt`](app/src/main/java/com/example/snake/SnakeGame.kt).**
Там по шагам видно идеи Compose:
- состояние через `remember { mutableStateOf(...) }` — UI сам перерисовывается при его изменении;
- игровой цикл через `LaunchedEffect { while(true) { delay(); step() } }`;
- ввод через `Modifier.pointerInput { detectTapGestures / detectDragGestures }`;
- рисование через `Canvas { drawRoundRect / drawLine }`.
## Управление
| Действие | Жест |
|----------|------|
| Начать игру | свайп или тап |
| Повернуть | свайп ↑ ↓ ← → |
| Рестарт после проигрыша | тап по экрану |
## Этапы (ветки)
Проект задуман как серия этапов — каждый в своей ветке, чтобы можно было
сравнивать версии:
- **`snake-stage-1`** — базовая рабочая игра.
- **`snake-stage-2`** — ускорение: змейка ускоряется с каждой съеденной едой
(задержка шага 150 → 60 мс), на экране индикатор «Скорость». Смотри
функции `stepDelay()` / `speedLevel()` и игровой цикл в `SnakeGame.kt`.
Идеи для следующих этапов: сохранение рекорда через `DataStore`,
экранные кнопки-стрелки, анимации, звук.