Tic Tac Toe
Die untentstehenden Aufgaben bauen aufeinander auf und erweitern den folgenden Code. Probieren Sie folgenden Code aus und studieren Sie diesen:
- tictactoe.py
from gpanel import * feld = [] for i in range(3): linie = [] for j in range(3): linie.append(" ") feld.append(linie) # Oder in einer Zeile: feld = [[" " for i in range(3)] for j in range(3)] # Zeichnet das feld def ausgabe(feld): clear() # Fenster loeschen for i in range(1,len(feld)): # Raster line(0,i,3,i) line(i,0,i,3) for x in range(len(feld)): for y in range(len(feld[x])): if (feld[x][y]=="x"): 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) elif (feld[x][y]=="o"): move(x+0.5, y+0.5) circle(0.4) # Modifiziert das Feld def onMousePressed(x, y): global feld x = int(x) y = int(y) if feld[x][y]==" ": feld[x][y] = "x" elif feld[x][y]=="x": feld[x][y] = "o" else: feld[x][y]=" " ausgabe(feld) makeGPanel(0,len(feld)-0.001, 0,len(feld[0])-0.001,mousePressed = onMousePressed) lineWidth(5) ausgabe(feld)
Aufgabe 1
Fügen Sie eine neue globale Variable “spieler” am Anfang des Programms hinzu. Sie soll den Spieler enthalten, der an der Reihe ist. Je nachdem soll dann in der Funktion “onMousePressed” ein Kreuz oder ein Kreis gesetzt werden.
Aufgabe 2
Es soll nur auf leere Felder gesetzt werden können.
Aufgabe 3
Wenn das Feld voll ist, soll beim nächsten Klick das feld “geleert” werden.
Aufgabe 4 (*)
Überprüfen Sie, ob jemand gewonnen hat.
Aufgabe 5 (*)
Wenn jemand gewinnt, sollen die Felder entsprechend markiert werden.
Aufgabe 6 (**)
Die Überprüfung soll allgemein auch für grössere Felder und längere Linien funktionieren (z.B. 4 oder 5 in einer Reihe nötig für den Gewinn). Beachten Sie dass len(feld)
die Anzahl Felder in $x$-Richtung und len(feld[0])
die Anzahl Felder in $y$-Richtung ergibt.
Aufgabe 7 (***)
Programmieren Sie einen Computergegner.