Tworzymy pętle!
W tej chwili program kończy swoją pracę w momencie, w którym wyświetli tablicę z zaznaczonym Twoim znacznikiem w odpowiednim polu w tablicy.Żeby grać cały czas, musimy tworzyć pętle. Pozwalają one na zapętlenie działania programu, aż do momentu, w którym gra stwierdzi, że warunek zakończenia został spełniony.
Za takie rozwiązanie Pythonie odpowiada funkcja while
, którą tutaj zastosujemy.
W funkcji def playgame():
po wyświetleniu tablicy display_board()
dodaj funkcję while. Nazwijmy ją game_still_going
i poprzez dodanie tabulatora przed uruchomieniem funkcji handle_turn()
spowodujemy dodanie go do tej pętli. W funkcji handle_turn
w nawiasie dodaj, current_player
, żeby dla systemu było jasne, że dotyczy to aktualnego gracza. Potem do tego wrócimy. Powinno to wyglądać tak:

Następnie w naszej pętli sprawdzimy, czy gra się zakończyła. Czy, jest przegrana. Więc dodajemy wywołanie funkcji, którą nazwijmy check_if_game_over()
pod funkcją handle_turn(current_player)
.
Następnie jeżeli gra nie będzie zakończona, wywołamy funkcję flip_player(), która będzie odpowiadała, za zmianę użytkownika. Cała Twoja pętla w tej chwili powinna wyglądać tak:

Dodajmy też na początku naszego kodu, po naszej zmiennej tablicy zmienną game_still_going = true

Zaraz sobie zdefiniujemy te funkcje, które dopisaliśmy, bo na razie nasza gra nie ma się do czego odwołać, ale postaram Ci się w skrócie wytłumaczyć, jak to działa.
Pętla while game_still_going
wywoła funkcję check_if_game_over()
, w której umieścimy warunku i instrukcje warunkowe, które już znasz z poprzednich lekcji. Jeżeli warunek nie zostanie spełniony odwoła się do funkcji flip_player()
i zatoczy koło. I tak do momentu aż, funkcja check_if_game_over
nie zostanie uznana za wykonaną i Twoja gra nie wykryje, że jeden z graczy przegrał, lub nie będzie remisu.
Cały kod powinien wyglądać tak:

Do zdefiniowania, tych funkcji wrócimy odrobinę później. Teraz stworzymy kilka zmiennych.