Этап 6: пауза
Тап по полю во время игры ставит/снимает паузу. - флаг paused; игровой цикл шагает только при !paused - тап в detectTapGestures переключает паузу (старт/рестарт без изменений) - оверлей «ПАУЗА» с подсказкой о продолжении - reset() сбрасывает паузу; подсказка про паузу на стартовом экране Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
da783d9f0d
commit
c3529f08a0
@ -88,4 +88,8 @@ app/src/main/
|
||||
расходится затухающее кольцо. Смотри `Animatable` (`popProgress` 0→1),
|
||||
запуск анимации в `step()` и отрисовку кольца в `drawBoard()`.
|
||||
|
||||
Идеи для следующих этапов: пауза, выбор размера поля, экран настроек.
|
||||
- **`snake-stage-6`** — пауза: тап по полю во время игры ставит/снимает
|
||||
паузу (свайпы по-прежнему рулят направлением). Смотри флаг `paused`,
|
||||
условие в игровом цикле и оверлей «ПАУЗА».
|
||||
|
||||
Идеи для следующих этапов: выбор размера поля, экран настроек, светлая тема.
|
||||
|
||||
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user