Этап 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:
parent
03ed41118a
commit
e84ffa754d
@ -104,4 +104,9 @@ app/src/main/
|
||||
В шапке — «Уровень». Смотри `obstacles`/`level`, `addObstacles()`, проверку
|
||||
коллизий и повышение уровня в `step()`.
|
||||
|
||||
Идеи для следующих этапов: режим «сквозь стены», два игрока, выбор размера поля.
|
||||
- **`snake-stage-9`** — сквозь границы (тор): змейка проходит сквозь край
|
||||
поля и появляется с противоположной стороны; смерть остаётся только от
|
||||
самой себя и от препятствий. Реализовано %-арифметикой по координатам
|
||||
головы в `step()`.
|
||||
|
||||
Идеи для следующих этапов: два игрока, выбор размера поля, экран настроек.
|
||||
|
||||
@ -166,10 +166,15 @@ fun SnakeGame() {
|
||||
fun step() {
|
||||
dir = nextDir
|
||||
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
|
||||
return
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user