Rozdział 17 · Model i zasady

Poprawny algorytm ruchu

Jeden ze sposobów wykonania ruchu – szach, ruch, zasady, zmiana gracza.

Jaki jest ważny ruch?

attempt_move(index) - Jedna ścieżka dla myszy i klawiatury (Rozdział 17.24). Przeanalizujmy to w dwóch etapach: najpierw filtr ważności, potem co się dzieje po tym, jak przeprowadzka już została podjęta.

Diagram 1 – Filtr Poprawności Tury

kliknij / włączindex komórkakoniec gry?TAKruch jest ignorowanyNIEklatka jest zajęta?TAKruch jest ignorowanyNIEPRAWIDŁOWY RUCH
Oba „nie” muszą zostać wykonane, aby ruch dotarł do diagramu 2.
Nieprawidłowy ruch NIE zmienia gracza
To częsty błąd (Debug Lab 7, sekcja 17.29): jeśli kliknięcie zostanie zignorowane, tura musi pozostać taka sama. Gracz zmienia tylko PO udanym ruchu.

Diagram 2 – Co się dzieje po prawidłowym ruchu

WAŻNY RUCH (zdiagramy 1)board[index] =current_playerfind_winner(board)istniejezwycięzcą?TAKTERMINAL: zwycięstwo —render()NIEall(board)pełna?TAKTERMINAL: losowanie —render()NIEzmienić zawodnikówrender()
Zobowierz się do modelu, sprawdź zasady (Rozdział 17.17) i dopiero wtedy zmień gracza.

Widoczny rezultat poprawnego ruchu

Puste pole przed pierwszym ruchem
Prawdziwe okno kanonicznej aplikacji przed ruchem: model board zawiera dziewięć pustych linii.
X zajął centralną klatkę, zwrot poszedł do O
To samo rzeczywiste zastosowanie po attempt_move(4): zapisanie znaku do modelu, a potem render() zaktualizowane pole i status.

Przełączanie gracza — trzy równoważne sposoby

smena_igroka_razvernuto.py
if current_player == "X":
    current_player = "O"
else:
    current_player = "X"
smena_igroka_kratko.py
current_player = "O" if current_player == "X" else "X"
Najpierw czytelność, potem zwięzłość
Obie wersje robią to samo. Rozszerzona wersja wyraźnie brzmi "if/otherwise" — łatwiej zacząć od niej. Krótka wersja (warunkowa, rozdział 9; często nazywana operatorem ternarnym) nie jest "mądrzejsza", po prostu bardziej zwarta, gdy czytasz ją już pewnie.
Praktyka: logika jednego ruchu
Automatyczny test – walidacja tur i przełączanie zawodnika na czyste funkcje
Otwórz praktykę →