Kółko, krzyżyk – do uzupełnienia

Dokończyć (lub napisać od nowa) program do gry w kółko krzyżyk.

Należy dodać przede wszystkim:
1. Sprawdzenie, czy uzupełniane pole jest puste.
2. Sprawdzenie, czy gra została zakończona.
3. Możliwość definiowania własnej wielkości planszy.
4. Możliwość definiowania liczby potrzebnych symboli (do wygranej).

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
class Plansza:
    def __init__(self, wielkosc=3):
        self.__plansza = [["-" for x in range(wielkosc)] for x in range(wielkosc)]
        self.__symbol = False # True - X, False - O
 
    def wyswietl(self):
        print("==========")
        print("Plansza:")
 
        for wiersz in self.__plansza:
            for krotka in wiersz:
                print(krotka, end=" ")
            print()
        print("==========")
 
    def __dajSymbol(self):
        if self.__symbol:
            return "X"
        return "O"
 
    def __sprawdzPole(self, wiersz, kolumna):
        if len(self.__plansza)<wiersz:
            return False
        if len(self.__plansza[wiersz])<kolumna:
            return False
        # Dodać sprawdzenie, czy pole nie jest już uzupełnione
        return True
 
    def zagraj(self, wiersz, kolumna):
        if not self.__sprawdzPole(wiersz, kolumna):
            print("Błędne pole")
            return -1 #-1, jako błąd programu (błędne pole)
 
        self.__symbol = not self.__symbol
        self.__plansza[wiersz][kolumna]=self.__dajSymbol()
 
        # Dodać sprawdzenie wygranej
 
        return 0 #0, jako popeawne działanie programu (grać dalej)
        # należy dodać 1, jako koniec gry (wygrana lub remis), ewentualnie
        # 1 - wygrana X, 2 - wygrana ), 3 - remis.
 
 
p = Plansza(3)
p.wyswietl()
 
p.zagraj(1, 2)
p.wyswietl()
 
p.zagraj(7, 7)
p.wyswietl()
 
p.zagraj(0, 0)
p.wyswietl()