kann mir jemand weiter helfen?
"Im Moment programmiere ich ein Spiel auf der Website python-online.ch. Es ist Tic Tac Toe, und ich habe bereits das Spielfeld erstellt. Bei einem Mausklick erscheint ein Kreis und bei einem anderen ein Kreuz. Wie schaffe ich es jetzt anzuzeigen, dass jemand gewonnen hat? Ich bin noch Anfänger und würde mich über Antworten freuen."
1 Antwort
![](https://images.gutefrage.net/media/user/regex9/1455660989427_nmmslarge__0_13_270_270_615d5a3bc6888f4c1486ce2b4d9d8f60.png?v=1455660989000)
Du müsstest dir parallel zur Zeichenfläche den Stand deines Spielfeldes merken. Eine zweidimensionale Liste (oder eine Liste an Tupeln) wäre hierfür nützlich.
board = [
[ "-", "-", "-" ],
[ "-", "-", "-" ],
[ "-", "-", "-" ]
]
Jedes Element in diesen Listen steht für ein Feld. Der Bindestrich könnte unbesetzte Felder kennzeichnen, ansonsten gibt es den Status "X" oder "O".
Wenn der Spieler nun sein Symbol setzt, musst du (anhand der Mauskoordinaten) ermitteln, welches Feld gesetzt werden muss. Angenommen, er setzt ein X auf das erste Feld der zweiten Reihe, würde das Setzen so aussehen:
board[1][0] = "X"
Beachte, dass bei Listen die Indexzählung bei 0 beginnt. Daher hat die zweite Reihe den Index 1 und die erste Spalte den Index 0.
Nach jedem Zug könntest du nun das Spielfeld auf seinen Zustand prüfen. Entweder du prüfst immer pauschal das gesamte Feld oder du betrachtest explizit nur die Fälle, die betroffen sein können (bei obigem Fall wären beispielsweise nur die erste Spalte und die zweite Reihe von Interesse).
column = board[0][0] + board[1][0] + board[2][0]
if column == "XXX":
# X is winner, end the game
row = board[1][0] + board[1][1] + board[1][2]
if row == "XXX":
# X is winner, end the game
Sofern dir Funktionen bereits bekannt sind, könntest du den Code für die Prüfungen wesentlich verkürzen.
def has_won(column, row, symbol):
expected_state = symbol.ljust(3, symbol)
column = board[0][column] + board[1][column] + board[2][column]
if column == expected_state:
return true
row = board[row][0] + board[row][1] + board[row][2]
if row == expected_state:
return true
if (row == 1 or column == 1) and row != column:
return false
# otherwise check diagonal sequences here, too ...
return false
# usage:
if has_won(1, 0, "X"):
# X is winner, end the game