from gpanel import * class TicTacToe: # Konstruktur, wird bei der Kreation der Instanz aufgerufen def __init__(self): # leeres Feld, bestehend aus 3 Arrays mit 3 Einträgen self.feld = [[0,0,0] for i in range(3)] def handler(x,y): self.onKlick(x,y) makeGPanel(0, 2.99, 0, 2.99, mousePressed = handler) def draw(self): clear() for i in range(1,3): line(i,0,i,3) line(0,i,3,i) for x in range(3): for y in range(3): if self.feld[x][y]==1: move(x+0.5, y+0.5) circle(0.4) elif self.feld[x][y]==2: line(x+0.1, y+0.1, x+0.9, y+0.9) line(x+0.1, y+0.9, x+0.9, y+0.1) def onKlick(self,x,y): x = int(x) y = int(y) if (self.feld[x][y]==0): self.set(x,y,1) self.draw() # Setze alle Einträge auf 0 def clear(self): for x in range(3): for y in range(3): self.feld[x][y] = 0 # Standard-Methode zur Umwandlung in einen String, wird von print verwendet def __str__(self): symbols = [" ", "O", "X"] res = "" for y in range(3): for x in range(3): res += " "+symbols[self.feld[x][y]]+" " if (x<2): res += "|" res += "\n" if (y<2): res += "---+---+---\n" return res # Setzt ein Feld, wenn es leer ist def set(self,x,y,what): if (self.feld[x][y]==0): self.feld[x][y] = what else: raise RuntimeError("Feld (%d, %d) ist schon mit %d belegt!" % (x,y,self.feld[x][y])) def isEmpty(self,x,y): return self.feld[x][y]==0 # Initialierung einer Instanz t = TicTacToe() # Ruft automatisch __str__ auf, zur Umwandlung in einen String print(t) t.set(1,1,1); print(t) t.set(0,0,2); print(t) t.draw()