Rozdział 19 · Model gry

Kierunek jako wektor

Kierunek to nie łańcuch znaków porównywany w if/elif, lecz dane: para liczb (dx, dy).

Od czterech if/elif do jednego słownika

Pierwszy prototyp definiował ruch głowy za pomocą czterech gałęzi if/elif (Rozdział 19.4) — czytelna, ale gdy dodana jest nowa logika (na przykład ruch diagonalny w inna gra) musiałaby powtórzyć strukturę. Wskazówki można przedstawić inaczej — Jak to zrobić wektor przemieszczenia:

UP
(0, +STEP)
DOWN
(0, −STEP)
LEFT
(−STEP, 0)
RIGHT
(+STEP, 0)
direction_vectors.py
DIRECTION_VECTORS = {
    Direction.UP: (0, STEP),
    Direction.DOWN: (0, -STEP),
    Direction.LEFT: (-STEP, 0),
    Direction.RIGHT: (STEP, 0),
}

def next_head(head, direction):
    dx, dy = DIRECTION_VECTORS[direction]
    return (head[0] + dx, head[1] + dy)
if/elif kontra słownik wektorów
Jawnie, ale rośnie wraz z liczbą kierunków
if napravlenie == "up":
    golova.sety(golova.ycor() + RAZMER_SHAGA)
elif napravlenie == "down":
    golova.sety(golova.ycor() - RAZMER_SHAGA)
# ... I tak dla left, right
Jedna słownik, jedna formuła
dx, dy = DIRECTION_VECTORS[direction]
new_x, new_y = x + dx, y + dy
Co używać dzisiaj: Obie opcje dają taki sam wynik dla czterech kierunków. Różnica pojawia się w tym, jak kod rośnie: słownik — to dane, a nie rozgałęzienie, więc testowanie i rozwijanie jest łatwiejsze, bez zmieniania samej formuły ruchu.
Praktyka: kierunek jako wektor
Automatyczna kontrola — funkcja next_head() dla wszystkich czterech kierunków
Otwórz praktykę →