Rozdział 19 · Funkcje gry

Prędkość i wzrost złożoności

Każde jabłko nie tylko zwiększa wynik, ale też przelicza opóźnienie — gra stopniowo przyspiesza.

Gra przyspiesza wraz z wynikiem

Prawdziwe okno: wąż z pięcioma segmentami, wynik 450, jabłko na szczycie pola
Realne okno: przy wysokim wyniku calculate_delay() już zwrócił minimalną wartość – gra gra działa z maksymalną prędkością.

Rozdział 19.14 już pokazała formułę – tutaj łączy się ona z grą: po każdym Zjedzonego jabłka nie tylko przeliczany jest wynik, ale także opóźnienie kolejnego ticku:

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)

Nowa wartość delay_ms wejdzie w życie przy następnym wezwaniu _schedule_next_tick() — poprzedni tick został już zaplanowany z wcześniejszym opóźnieniem i to jest w porządku: prędkość zmienia się płynnie, bez szarpnięć.

min_ms jest świadomym ograniczeniem, a nie przypadkiem
Rozdział 19.14 już została wyjaśniona max(min_ms, ...) — tutaj widać, dlaczego jest to potrzebne w praktyce: bez niego wystarczająco długa gra prędzej czy później doprowadzi opóźnienie do zera.
Praktyka: Szybkość rośnie wraz z liczeniem
Automatyczne sprawdzanie – funkcja eat_food(): każdym jabłkiem przelicza zarówno liczbę, jak i opóźnienie
Otwórz praktykę →