1
0

Этап 9: сквозь границы (тор)

Змейка проходит сквозь край поля и появляется с противоположной стороны.

- координаты головы считаются по модулю: (x+dx+COLS)%COLS, (y+dy+ROWS)%ROWS
- столкновение с краем больше не убивает; смерть только от себя/препятствий

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
george 2026-06-17 18:34:45 +03:00
parent 03ed41118a
commit e84ffa754d
2 changed files with 14 additions and 4 deletions

View File

@ -104,4 +104,9 @@ app/src/main/
В шапке — «Уровень». Смотри `obstacles`/`level`, `addObstacles()`, проверку В шапке — «Уровень». Смотри `obstacles`/`level`, `addObstacles()`, проверку
коллизий и повышение уровня в `step()`. коллизий и повышение уровня в `step()`.
Идеи для следующих этапов: режим «сквозь стены», два игрока, выбор размера поля. - **`snake-stage-9`** — сквозь границы (тор): змейка проходит сквозь край
поля и появляется с противоположной стороны; смерть остаётся только от
самой себя и от препятствий. Реализовано %-арифметикой по координатам
головы в `step()`.
Идеи для следующих этапов: два игрока, выбор размера поля, экран настроек.

View File

@ -166,10 +166,15 @@ fun SnakeGame() {
fun step() { fun step() {
dir = nextDir dir = nextDir
val head = snake.first() val head = snake.first()
val nh = Cell(head.x + dir.x, head.y + dir.y) // этап 9: граница экрана «телепортирует» на противоположную сторону (тор).
// %-арифметика с + COLS/ROWS, чтобы корректно обрабатывать выход за 0.
val nh = Cell(
(head.x + dir.x + COLS) % COLS,
(head.y + dir.y + ROWS) % ROWS
)
val hitWall = nh.x < 0 || nh.y < 0 || nh.x >= COLS || nh.y >= ROWS // смерть теперь только от самой себя или от препятствия (не от края)
if (hitWall || snake.contains(nh) || nh in obstacles) { if (snake.contains(nh) || nh in obstacles) {
gameOver = true gameOver = true
return return
} }