1
0

🐍 Змейка на 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: командная строка

# нужен 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. Там по шагам видно идеи Compose:

  • состояние через remember { mutableStateOf(...) } — UI сам перерисовывается при его изменении;
  • игровой цикл через LaunchedEffect { while(true) { delay(); step() } };
  • ввод через Modifier.pointerInput { detectTapGestures / detectDragGestures };
  • рисование через Canvas { drawRoundRect / drawLine }.

Управление

Действие Жест
Начать игру свайп или тап
Повернуть свайп ↑ ↓ ← →
Рестарт после проигрыша тап по экрану

Этапы (ветки)

Проект задуман как серия этапов — каждый в своей ветке, чтобы можно было сравнивать версии:

  • snake-stage-1 — базовая рабочая игра (этот код).

Идеи для следующих этапов: ускорение с ростом счёта, сохранение рекорда через DataStore, экранные кнопки-стрелки, анимации.

Zdes' byl Irakli :)

Description
Учебный пример: Змейка на Jetpack Compose (Android)
Readme 176 KiB
Languages
Kotlin 100%