Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
lehrkraefte:blc:informatik:ffprg1-2020:klassen [2020/03/02 08:13] Ivo Blöchliger [Aufgaben] |
lehrkraefte:blc:informatik:ffprg1-2020:klassen [2020/03/23 18:03] Ivo Blöchliger [Aufgaben] |
||
---|---|---|---|
Line 113: | Line 113: | ||
</ | </ | ||
+ | <hidden Lösungsvorschlag> | ||
+ | <code python tictactoe.py> | ||
+ | from gpanel import * | ||
+ | |||
+ | class TicTacToe: | ||
+ | # Konstruktur, | ||
+ | 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, | ||
+ | self.onKlick(x, | ||
+ | | ||
+ | makeGPanel(0, | ||
+ | | ||
+ | |||
+ | def draw(self): | ||
+ | clear() | ||
+ | for i in range(1,3): | ||
+ | line(i, | ||
+ | line(0, | ||
+ | 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 = int(x) | ||
+ | y = int(y) | ||
+ | if (self.feld[x][y]==0): | ||
+ | self.set(x, | ||
+ | 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 = [" ", " | ||
+ | res = "" | ||
+ | for y in range(3): | ||
+ | for x in range(3): | ||
+ | res += " " | ||
+ | if (x<2): | ||
+ | res += " | ||
+ | res += " | ||
+ | if (y<2): | ||
+ | res += " | ||
+ | return res | ||
+ | |||
+ | |||
+ | |||
+ | | ||
+ | # Setzt ein Feld, wenn es leer ist | ||
+ | def set(self, | ||
+ | if (self.feld[x][y]==0): | ||
+ | self.feld[x][y] = what | ||
+ | else: | ||
+ | raise RuntimeError(" | ||
+ | |||
+ | def isEmpty(self, | ||
+ | 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, | ||
+ | print(t) | ||
+ | t.set(0, | ||
+ | print(t) | ||
+ | t.draw() | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * Fügen Sie eine weitere Instanz-Variable hinzu, die speichert, wer gerade an der Reihe ist, damit mit der Maus abwechslungsweise ein Kreis und ein Kreuz gesetzt werden kann. | ||
+ | * Fügen Sie eine Überprüfung hinzu, ob jemand schon gewonnen hat. Sie sollten dazu möglichst wenig Code kopieren. Idee: Eine Funktion, die Start-Koordinaten und einen Vektor bekommt, in welche Richtung 3 Felder überprüft werden sollen. |