Rozdział 19 · Zasady gry

Zderzenie z samym sobą

Musisz sprawdzić ciało po przeprowadzce, a nie przed nim – w przeciwnym razie legalne wejście do klatki pustego ogona zostanie błędnie uznane za kolizję.

Wjechnięcie w klatkę tylną nie zawsze kończy się kolizją

Klasyczna zasada „wężyk”: jeśli wąż nie rośnie, ogon w tym samym takcie zwalnia swoją komórkę — jazda tam głową jest legalna. Jeśli rośnie — ogon nigdzie się nie rusza, i ta sama komórka jest już zajęta.

is_self_collision.py
def is_self_collision(new_head, body_after_move):
    # body_after_move — ciało PO move_snake(), bez samej głowy
    return new_head in body_after_move
Musisz sprawdzić ciało PO ruchu, nie przed nim
Jeśli sprawdzisz new_head in snake[1:] na liście OLD (do move_snake()), komórka starego ogona nadal będzie na liście — i legalny wjazd w nią błędnie zostanie policzony jako kolizja. Poprawne sprawdzenie odbywa się wobec move_snake(...)[1:] jest ciało takim, jakim stanie się PO tej turze, a nie taką, jaka była przed nim.
Sytuacjais_self_collision()
Głowa wjeżdża do klatki starego ogona, wąż nie rośnieFalse — ogon już zwolnił komórkę
Głowa wjeżdża w kratkę starego ogona, wąż rośnieTrue — ogon nigdzie nie zniknął
Głowa wsuwa się do klatki na środku ciałaTrue prawdziwy konflikt
Praktyka: Zderzenie z własnym ciałem
Automatyczna kontrola – funkcja is_self_collision(): wjeżdżania w klatkę tylną, powiedzmy, na środku kadłuba – nie
Otwórz praktykę →