Глава 19 · Функции игры

Скорость и рост сложности

Каждое яблоко не только увеличивает счёт, но и пересчитывает задержку — игра постепенно ускоряется.

Игра ускоряется вместе со счётом

Реальное окно: змейка из пяти сегментов, счёт 450, яблоко в верхней части поля
Реальное окно: при высоком счёте calculate_delay() уже вернула минимальное значение — игра идёт на предельной скорости.

Раздел 19.14 уже показал формулу — здесь она подключается к самой игре: после каждого съеденного яблока пересчитывается не только счёт, но и задержка следующего тика:

speed_progression.py
if grow:
    state.score += FOOD_SCORE
    state.high_score = max(state.high_score, state.score)
    state.food = choose_food(state.snake, self.rng)
    state.delay_ms = calculate_delay(state.score)

Новое значение delay_ms вступит в силу на следующем вызове _schedule_next_tick() — предыдущий тик уже был запланирован со старой задержкой, и это нормально: скорость меняется плавно, не рывком.

min_ms — сознательный предел, а не случайность
Раздел 19.14 уже объяснял max(min_ms, ...) — здесь видно, зачем он нужен на практике: без него достаточно долгая игра рано или поздно довела бы задержку до нуля.
Практика: скорость растёт со счётом
Автоматическая проверка — функция eat_food(): каждое яблоко пересчитывает и счёт, и задержку
Открыть практику →