Impressum
< Index

Tic-Tac-Toe Stufe 4 - Siege erkennen

Wir erweitern unsere Klasse um ein privates Attribut ende, das wir mit False initialisieren.
Dieses Attribute soll True werden, wenn das Spiel gewonnen wurde. Ist sie True, so soll kein weiteres Kreuz und kein weiterer Kreis mehr gesetzt werden können.
Zusätzlich erstellen wir eine private Methoden sieg() und voll().
Die Methode sieg() gibt True zurück, wenn gewonnen wurde (sonst False).
Die Methode voll() gibt True zurück, wenn alle Feldpositionen belegt sind (meist bei einem Unentschieden).
TTT
-feld:int[][]
-player:int
+TTT()
+paint()
+klick(e:Event)
+sieg()
+voll()

Die Methode klick()

Die Methode klick() muss erweitert werden.
Code der Methode Klick
def klick(self, e):
# NEU:
        if self.__ende or self.__voll():
            self.neu()
            return
# ALT:
        x = e.x//100
        y = e.y//100
        if 0<=x<=2 and 0<=y<=2:
            if self.__feld[x][y]==0:
                self.__feld[x][y] = self.__player
                self.__player = -self.__player
                self.paint()
# NEU: 
                if self.__sieg():
                    messagebox.showinfo(message='Sieg')
                    self.__ende = True
messagebox.showinfo() ist von tkinter und zeigt einen kleinen Dialog an.

Die Methode voll

Die Methode voll geht über alle Feldpositionen und prüft ob diese 0 ist. Wenn sie 0 ist kann sofort False zurückgegeben werden.
Nach dem Überprüfen aller Felder wird True zurückgegeben, da ja keine 0 gefunden wurde. Hier ein Struktogramm:
Struktogramm der Methode voll

Die Methode sieg

Die Methode Sieg muss erkennen ob in einer Zeile, Spalte oder Diagonale drei gleiche Symbole sind (also 1 oder -1).
Dies kann man entweder mit einem if je Zeile, Spalte und Diagonale machen oder man summiert die Werte zeilenweise (bzw. spaltenweise) auf und prüft ob diese Summe 3 oder -3 ist.
Im Falle eines Sieges wird True zurückgegeben.
Liegt kein Sieg vor wird False zurückgegeben.
Das schaffen sie auch ohne Struktogramm oder weiter Hilfen - ich glaube an sie.