Rozdział 17 · Rundy i mecze

New Round vs New Match

Czy „Nowa Gra”

Dwa różne „resety”

New Round (nowa runda)New Match (nowy mecz)
Czyści pole bieżącego gracza, game_over, winner, winning_lineRobi dokładnie to samo, co New Round
ZAPISUJE wynik (score_x, score_o, draws)I DODATKOWO zeruje wynik
Ogłoszony po każdym meczuWywoływane, gdy mecz jest całkowicie zakończony
new_round_vs_new_match.py
def new_round(self):
    self.state.board = [""] * 9
    self.state.current_player = "X"
    self.state.game_over = False
    self.state.winner = None
    self.state.winning_line = None
    self.render()

def new_match(self):
    self.state.score_x = 0
    self.state.score_o = 0
    self.state.draws = 0
    self.new_round()   #New Match w pełni obejmuje New Round
Mylenie ich to prawdziwy błąd (Debug Lab 12, Rozdział 17.29)
Jeśli przycisk "Nowa gra" wywoła resetowanie wyniku, gracze tracą wynik turniejowy po każdej grze. Jeśli przycisk "Nowy mecz" nie zresetuje wyniku, stary wynik jest przeciągany do nowego turnieju. Nazwy funkcji powinny jednoznacznie odzwierciedlać tę różnicę.
Po New Round pole jest puste, a konto X:1 zapisane
Rzeczywiste okno pełnej wersji po new_round(): stan rundy został zresetowany, wynik meczu zapisany. Kod powyżej — fragment metod pełnej aplikacji.
Po New Match pole jest puste, a cały wynik wynosi zero
Prawdziwe okno pełnej wersji po new_match(): resetuje zarówno rundę, jak i wynik X/O/draws. Powyższy kod jest fragmentem pełnych metod aplikacji.

Opcjonalna ekspansja: zapisz wynik meczu w JSON

Poniżej znajduje się tylko fragment — ciało funkcji save_scores() z tic_tac_toe.py. Pełny plik już zawiera niezbędne import json, from pathlib import Path i definicja GameState – tutaj się nie powtarzają.

fragment save_scores() z tic_tac_toe.py
SCORES_PATH = Path("tic_tac_toe_scores.json")   # w stosunku do bieżącego katalogu roboczego

def save_scores(state):
    with SCORES_PATH.open("w", encoding="utf-8") as f:
        json.dump({"x": state.score_x, "o": state.score_o, "draws": state.draws}, f,
                  ensure_ascii=False, indent=2)
Opcjonalne w pierwszej wersji gry
Trwałe Relacje – Miłe rozszerzenie (Rozdział 15: pathlib + JSON), ale NIE wymóg dla działającej gry. W tic_tac_toe.py jest to możliwe przez wyraźną flagę persist_scores=True — domyślnie wyłączone.
Praktyka: New Round, New Match i zapisywanie konta
Automatyczna weryfikacja — semantyka resetu rundy/meczu i zachowanie JSON w wirtualnym systemie plików przeglądarki
Otwórz praktykę →