Seite 1 von 1

Dynamisch erzeugtes TicTacToe-Feld

Verfasst: Sonntag 5. Juli 2009, 18:04
von snafu
Hi,

ein anderer Thread hat mich dazu angeregt, auch mal ein TicTacToe-Spiel zu implementieren. Ich habe angefangen mit einer Klasse, die ein quadratisches Feld mit beliebig großer Seitenlänge erstellt und schon weiß, welche Felderkombinationen zum Sieg führen können: Also alle Horizontalen, Vertikalen und bei den Diagonalen diejenigen, die durch's komplette Spielfeld verlaufen.

Das ganze funktioniert zwar, jedoch bin ich vom Code nicht ganz begeistert. Da ich bisher relativ wenige mathematische Sachen mit Python gemacht habe, kann ich mir vorstellen, dass noch die eine oder andere Optimierung möglich ist. Der Thread ist also als Feedback-Request gedacht. ;) Würde mich freuen, ein paar Anregungen zu erhalten. :)

Code

Verfasst: Sonntag 5. Juli 2009, 19:13
von BlackJack
Also die Diagonalen sind suboptimal. Es gibt genau zwei und die kann man auch problemlos direkt bestimmen ohne dass man alles mögliche ausprobieren muss.

Letztlich würde ich das aber nicht vorberechnen. Irgendwann braucht man die Daten um die Felder zu testen und da könnte man auch gleich die Indices beim Testen erzeugen. Der Speicherverbrauch wiegt den Laufzeitgewinn, den man *vielleicht* hat, IMHO nicht auf.

Verfasst: Montag 6. Juli 2009, 21:59
von sma
Vorschlag:

Code: Alles auswählen

class Square:
    def __init__(self, n):
        self.n, self.fields = n, [0] * (n * n)
    
    def __getitem__(self, (x, y)):
        return self.fields[x + y * self.n]
    
    def row(self, y):
        for x in range(self.n): yield self[x, y]
        
    def col(self, x):
        for y in range(self.n): yield self[x, y]
    
    def dia(self, other):
        for x in range(self.n):
            yield self[self.n - x - 1 if other else x, x]
Stefan