lehrkraefte:blc:informatik:ffprg1-2020:klassen

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Last revision Both sides next revision
lehrkraefte:blc:informatik:ffprg1-2020:klassen [2020/03/23 17:22]
Ivo Blöchliger [Aufgaben]
lehrkraefte:blc:informatik:ffprg1-2020:klassen [2020/03/23 18:03]
Ivo Blöchliger [Aufgaben]
Line 112: Line 112:
  
 </code> </code>
 +
 +<hidden Lösungsvorschlag>
 +<code python tictactoe.py>
 +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()
 +</code>
 +</hidden>
 +
   * 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 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.   * 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.
  • lehrkraefte/blc/informatik/ffprg1-2020/klassen.txt
  • Last modified: 2020/04/15 13:03
  • by Ivo Blöchliger