Czas na remis!
Jesteśmy już na ostatnim etapie tworzenia naszej gry w Pythonie. Brakuje nam jednak jeszcze definicji funkcji, która sprawdzi czy finał naszej gry to remis. Przecież nie zawsze musi być jeden zwycięzca.
Więc musimy sprawdzić czy na naszej tablicy występuje jakiś “-” jeżeli żaden nie występuje a nie nastąpiło zakończenie gry z powodu wygranej oznacza to, że mamy remis.
Jak to zrobić? Wcześniej stworzyliśmy funkcję i zostawiliśmy pustą jej definicję, która nazywa się def check_if_tie()
. To ona będzie odpowiedzialna za szukanie remisu.
Pora na jej zdefiniowanie:

Wszystkie te elementy już znasz. Importujemy poprzez global naszą zmienną game_still_going
, tworzymy instrukcję warunkową która oznacza że jeśli na naszej tablicy nie ma “-” (myślnika) to game_still_going
przyjmuje wartość False. To powinno być jasne.
Możesz teraz odpalić swoją grę i sprawdzić czy zadziała jak wypełnisz całą tablicę! Powinno wyświetlić na końcu tekst “Remis!” zgodnie z naszą wcześniej stworzoną instrukcją warunkową:

Działa!? Super! Więc gra prawie skończona! Technicznie już wszystko powinno działać poprawnie, teraz to tylko dopracujemy!
Komunikacja gry z graczami
Gra już działa całkiem poprawnie, ale fajnie byłoby do niej dodać komunikację samego programu z użytkownikiem. Żeby to zrobić przejdźmy do naszego def_handle_turn(player)
. Możemy tam dodać powiadomienia systemowe, które będą informować, do którego z graczy należy aktualna tura. Dodaj poniższy fragment kodu:

To dość prosty fragment kodu, który powinieneś rozumieć. Odnosimy się w nim do zmiennej player a następnie wyświetlamy tekst “twoja kolej”.
Następnie musimy zadbać o informację, o podaniu przez użytkownika w naszym inpucie innego znaku lub znaków niż od 1 do 9, bo w tej chwili jak ktoś poda np. 11 to wyskakuje błąd w naszej konsoli. Nie wierzysz? Sprawdź.
Zrobimy to w poniższy sposób:

Sprawdzamy czy zmienna position przyjmowana przez input nie wynosi żadnej z podanych numerów. Wyświetlamy tekst “Błędna wartość. Wybierz pozycję w przedziale 1-9: “. Zrozumienie tego nie powinno Ci sprawić problemów. Jednak taka metoda jest w stanie sprawdzić się tylko w sytuacji w której mamy mało wartości do sprawdzenia. Gdyby nasza tablica składała się z dziesiątek słów, albo z setek wyrażeń trudno byłoby nam to sprawdzić w ten sposób. Od tego są inne funkcje, które możesz poznać na naszym bootcampie z Pythona.
W tej chwili po wpisaniu błędnego numeru system wyświetli naszą informację ale jeżeli kolejny raz ktoś wpisze błędna liczbę, to gra wyświetli błąd. Więc musimy skorzystać z pętli. Wystarczy, że podmienisz swoja funkcję if
na funkcję while
. Teraz system będzie pytał za każdym razem kiedy pojawi się błędna wartość. Cały Twój kod powinien wyglądać mniej więcej tak:

Twoja gra jest już skończona! Gratulacje udało Ci się dotrzeć do końca.
Zadanie dodatkowe!
Jak pewnie zauważyłeś w grze występuje możliwość nadpisania przez jednego z graczy, wcześniejszego wyboru drugiego gracza. Wykorzystaj zdobyta wiedzę i dopisz skrypt, który uniemożliwi nadpisywanie wyboru na tablicy.
Musimy w nim zmienić nasz “X” na zmienną player. Czyli będzie to wyglądać tak:
