Rozdział 19 · Model gry

Czas, prędkość i opóźnienie

delay_ms — nie dokładny czas, ale przybliżony odstęp między tyknięciami, który zmniejsza się wraz ze wzrostem wyniku.

delay_ms nie jest gwarancją, lecz prośbą

screen.ontimer(game_tick, 120) oznacza "wołanie game_tick po około 120 milisekundach od zdarzenia będzie w stanie to zrobić" — a nie "dokładnie w 120 000 ms." Jeśli pętla zdarzeń jest teraz zajęta coś innego (np. przerysowanie), połączenie będzie nieco opóźnione. Jak na mecz takiej skali Różnica jest zwykle niezauważalna, ale nie warto obiecywać dokładnej godziny.

delay_msSensation
200wolno — wygodne na pierwsze zapoznanie się z zarządzaniem
140normalna prędkość to wartość domyślna (BASE_DELAY_MS)
120szybkość po zdobyciu 100 punktów – gra jest już zauważalnie szybsza
70szybki – wymaga precyzyjnych i szybkich reakcji
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() — obowiązkowa ochrona przed zerem i ujemnym opóźnieniem
Bez max(min_ms, ...) wystarczająco wysoki wynik prędzej czy później doprowadziłby do opóźnienia równego zero lub liczby ujemnej. screen.ontimer(callback, 0) formalnie nie spadnie, ale gra stanie się niegrywalna szybko; wartość ujemna to zachowanie, którego nie powinno się testować w praktyce. min_ms to twarda dolna granica prędkości.
Praktyka: opóźnienie liczenia
Automatyczna kontrola – funkcja calculate_delay(): opóźnienie spada wraz z wynikiem i nie spada poniżej minimalnego poziomu
Otwórz praktykę →