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)) } } }