Глава 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(): задержка падает со счётом и не опускается ниже минимума