From c3529f08a0500320c7e9dcdb4c275e8db0fdd566 Mon Sep 17 00:00:00 2001 From: george Date: Wed, 17 Jun 2026 18:06:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=AD=D1=82=D0=B0=D0=BF=206:=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Тап по полю во время игры ставит/снимает паузу. - флаг paused; игровой цикл шагает только при !paused - тап в detectTapGestures переключает паузу (старт/рестарт без изменений) - оверлей «ПАУЗА» с подсказкой о продолжении - reset() сбрасывает паузу; подсказка про паузу на стартовом экране Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 6 +++++- app/src/main/java/com/example/snake/SnakeGame.kt | 12 +++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ec19c40..f27dd9f 100644 --- a/README.md +++ b/README.md @@ -88,4 +88,8 @@ app/src/main/ расходится затухающее кольцо. Смотри `Animatable` (`popProgress` 0→1), запуск анимации в `step()` и отрисовку кольца в `drawBoard()`. -Идеи для следующих этапов: пауза, выбор размера поля, экран настроек. +- **`snake-stage-6`** — пауза: тап по полю во время игры ставит/снимает + паузу (свайпы по-прежнему рулят направлением). Смотри флаг `paused`, + условие в игровом цикле и оверлей «ПАУЗА». + +Идеи для следующих этапов: выбор размера поля, экран настроек, светлая тема. diff --git a/app/src/main/java/com/example/snake/SnakeGame.kt b/app/src/main/java/com/example/snake/SnakeGame.kt index c73a6ca..5e2cc36 100644 --- a/app/src/main/java/com/example/snake/SnakeGame.kt +++ b/app/src/main/java/com/example/snake/SnakeGame.kt @@ -82,6 +82,7 @@ fun SnakeGame() { var best by remember { mutableIntStateOf(0) } var started by remember { mutableStateOf(false) } var gameOver by remember { mutableStateOf(false) } + var paused by remember { mutableStateOf(false) } // этап 6: пауза // Этап 3: контекст и scope для работы с DataStore (рекорд хранится на диске) val context = LocalContext.current @@ -122,6 +123,7 @@ fun SnakeGame() { food = randomFreeCell(startSnake) score = 0 gameOver = false + paused = false } // Один шаг змейки @@ -164,7 +166,7 @@ fun SnakeGame() { LaunchedEffect(Unit) { while (true) { delay(stepDelay(score)) - if (started && !gameOver) step() + if (started && !gameOver && !paused) step() } } @@ -180,6 +182,8 @@ fun SnakeGame() { started = true } else if (!started) { started = true + } else { + paused = !paused // во время игры тап ставит/снимает паузу } } } @@ -223,11 +227,13 @@ fun SnakeGame() { .padding(top = 48.dp) ) - // Оверлеи: старт и проигрыш + // Оверлеи: старт, пауза и проигрыш if (!started) { - Overlay(title = "ЗМЕЙКА", subtitle = "Свайпни, чтобы начать", modifier = Modifier.align(Alignment.Center)) + Overlay(title = "ЗМЕЙКА", subtitle = "Свайпни, чтобы начать · тап — пауза", modifier = Modifier.align(Alignment.Center)) } else if (gameOver) { Overlay(title = "GAME OVER", subtitle = "Счёт: $score · тапни для рестарта", modifier = Modifier.align(Alignment.Center)) + } else if (paused) { + Overlay(title = "ПАУЗА", subtitle = "Тапни, чтобы продолжить", modifier = Modifier.align(Alignment.Center)) } } }