Глава 19 · Модель игры

Время, скорость и задержка

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

delay_ms — не гарантия, а просьба

screen.ontimer(game_tick, 120) означает «вызови game_tick примерно через 120 миллисекунд, когда цикл событий сможет это сделать» — не «ровно через 120.000 мс». Если в этот момент цикл событий занят чем-то ещё (например, перерисовкой), вызов немного задержится. Для игры такого масштаба разница обычно незаметна, но обещать точное время не стоит.

delay_msОщущение
200медленно — удобно для первого знакомства с управлением
140нормальная скорость — значение по умолчанию (BASE_DELAY_MS)
120скорость после 100 очков — игра уже заметно подгоняет
70быстро — требует точных и быстрых реакций
calculate_delay.py
def calculate_delay(score, *, base_ms=140, min_ms=60, step_score=50, step_ms=10):
    steps = score // step_score
    return max(min_ms, base_ms - steps * step_ms)
max() — обязательная защита от нуля и отрицательной задержки
Без max(min_ms, ...) достаточно высокий счёт рано или поздно довёл бы задержку до нуля или отрицательного числа. screen.ontimer(callback, 0) формально не упадёт, но игра станет неиграбельно быстрой; отрицательное значение — и вовсе поведение, которое не стоит проверять на практике. min_ms — жёсткая нижняя граница скорости.
Практика: задержка тика по счёту
Автоматическая проверка — функция calculate_delay(): задержка падает со счётом и не опускается ниже минимума
Открыть практику →