Tic Tac Toe?


01.03.2021, 16:28
Ich hab mal weiter gemacht:
class  Board:
    def __init__(self):
        self.state = [0, 0, 0, 0, 0, 0, 0, 0, 0,]

        def make_turn(self, cell, player):
          if   self.is_valid_turn(cell)
            self.state[cell] =  player.symbol
                return True
            return  False

def is_valid_turn(self, cell):
    if state[cell] == 0:
        return  True
    else:
        return False

    def check_win(self, player):
     s = player.symbol
        if self.state[0] == s and self.state[1] == s and self.state[2] == s:
            return  True

    def sign_to_printable(self, sign):
        if sign == 0:
            return " "
        elif sign == 1:
            return "X"
        else:
            return "O"
    def print_board(self):

        print(" " + self.sign_to_printable(self.state[0]) + " | " + self.sign_to_printable(self.state[1]) + " | " + self.sign_to_printable(self.state[2]) + " \n" +
              " " + self.sign_to_printable(self.state[3]) + " | " + self.sign_to_printable(self.state[4]) + " | " + self.sign_to_printable(self.state[5]) + " \n" +
              " " + self.sign_to_printable(self.state[6]) + " | " + self.sign_to_printable(self.state[7]) + " | " + self.sign_to_printable(self.state[8]) + "  \n" +)
 class Player:
     def __init__(self, symbol):
         self.symbol = symbol

         if __name__ == ' __main__':
             Player_a = Player(1)
             Player_b = Player(-1)
             board = board()
             active_player = player_a
            while not board.is_full():
                board.print_board()
                try:
                cell = int(input("In whitch field do you like to set? [0-1"))
                 except ValueError:
                    continue
                cell = cell - 1
                if cell < 0 or cell > 8:
                    print("this is not a nuber to set please try again.With a nuber betwenn one and nine")
        continue
      if not  board.make_turn(cell, active_player)
         print ("Invalid Move")
          continue
        board.check_win(active_player)
        if active_player == player_a:
        active_player = player_b
else:
active_player = player_a


Jetzt habe ich 50 fehler was habe ich falsch gemacht langsam verzwifle ich

2 Antworten

Ja, da sind einige Fehler, die du anhand der Fehlermeldungen eigentlich auch selbst finden könntest.

Ich gehe nun einmal nur auf die Syntaxfehler aus deinem letzten Snippet ein.

1) Die komplette Methode make_turn ist falsch eingerückt.

2) Zeil 6: Der Doppelpunkt am Ende der Zeile fehlt.

if self.is_valid_turn(cell):

Das gilt auch für Zeile 54.

3) Die erste Zeile in check_win ist falsch eingerückt.

def check_win(self, player):
  s = player.symbol
  # if, etc. ...

4) In Zeile 33 hast du am Ende des Arguments noch ein Plus angehängt, als wolltest du noch einen String konkatenieren. Das tust du aber nicht.

Der letzte Plusoperator in der Zeile muss also weg.

5) Deine komplette Klasse Player ist mitsamt ihren Zeilen falsch einrückt.

Da du so viele Einrückungsfehler hast, einmal grundsätzlich zu diesem Thema:

Jeder neue Code-Block wird um vier Leerzeichen eingerückt. Wenn er beendet wird, geht es wieder um vier Leerzeichen nach vorn.

Beispiel:

dividend = int(input("Dividend:"))
divisor = int(input("Divisor:"))

if divisor == 0:
    print('No valid input')
else:
    quotient = dividend / divisor
    print(str(quotient))

Wenn du in einer IDE arbeitest und die Tabulatortaste verwenden möchtest, schau in die Einstellungen deines Programms. Der Tab muss von diesen in vier Leerzeichen transformiert werden.

6) Python ist case-sensitive. In dieser Zeile:

board = board()

wird der rechtsseitige Wert nicht aufgelöst werden können, denn deine Klasse heißt Board, nicht board.

Im Bezug zu deinem ersten Versuch wäre zu empfehlen, stets möglichst eindeutige Bezeichner zu wählen. Nach Konvention beginnen Klassennamen daher mit einem Groß- und Variablen mit einem Kleinbuchstaben. So treten Namenskollisionen u.ä. erst gar nicht auf.