Rozdział 21 · Projekt: kosmiczny strzelec
Jak wzrasta trudność gry
Trzy formuły niezależne od wyniku – z limitem od góry i dołu, bez ostrych skoków.
Stała trudność szybko staje się albo zbyt łatwa, albo zbyt trudna. Ostateczna wersja zwiększa trudność stopniowo, przez trzy niezależne czyste funkcje od aktualnego wyniku.
fragment_difficulty.py
def interval_poyavleniya_vraga(score):
return max(MIN_SPAWN_INTERVAL, BASE_SPAWN_INTERVAL - score * SPAWN_INTERVAL_SCORE_FACTOR)
def mnozhitel_skorosti_vraga(score):
return 1.0 + min(MAX_ENEMY_SPEED_BONUS, score * ENEMY_SPEED_SCORE_FACTOR)
def veroyatnost_istrebitelya(score):
return min(MAX_FIGHTER_PROBABILITY, score * FIGHTER_PROBABILITY_SCORE_FACTOR)
| Funkcja | Rośnie wraz z wynikiem | Ograniczone do góry/dołu |
|---|---|---|
| interval_poyavleniya_vraga | Spadki – Wrogowie pojawiają się częściej | Nie niżej niż MIN_SPAWN_INTERVAL |
| mnozhitel_skorosti_vraga | Zwiększa się – przeciwnicy są szybsi | Nie wyżej niż 1,0 + MAX_ENEMY_SPEED_BONUS |
| veroyatnost_istrebitelya | Więcej wojowników | Nie wyżej niż MAX_FIGHTER_PROBABILITY |
Dolne i górne granice nie są przypadkowe
Bez
max()/min() odstęp pojawiania się wrogów przy bardzo wysokim wyniku mógłby dojść do zera lub liczby ujemnej. Wtedy while self.spawn_timer <= 0.0: w sekcji 21.14 nigdy by się nie skończyło: dodanie niedodatniego przedziału nie mogło podnieść timera powyżej zera, a pętla generowałaby wrogów w nieskończoność na tej samej klatce. Ograniczenia chronią formuły przed ich własnym wzrostem.
Liczba falowa – tylko interfejs
fragment_wave.py
WAVE_SCORE_STEP = 500
def nomer_volny(score):
return 1 + score // WAVE_SCORE_STEP
Wave nie jest osobnym systemem z własnymi zasadami, lecz wygodnym sposobem na pokazanie Postęp gracza: raz na 500 punktów liczba fali wzrasta o HUD, choć sama trudność wzrasta Nieustannie, bez nagłych skoków w tej chwili.
Praktyka: Formuły złożoności
Zeskanowanie bezpośrednio w przeglądarce – nie wymaga instalacji Pygame
Praktyka kursuje lokalnie