используя классы
Класс Tttbboard: def в этом (Я): self.cells = [” “, “ “, ” “, “ “, ” “, “ “, ” “, “ “, “*”]
def __str__(self): s = self.cells[0] + self.cells[1] + self.cells[2] + "\n" s += self.cells[3] + self.cells[4] + self.cells[5] + "\n" s += self.cells[6] + self.cells[7] + self.cells[8] + "\n" return s def make_move(self, player, posn): posn = int(posn) player = str(player) if 0 <= posn <= 8 and self.cells[posn] == "*": self.cells[posn] = player return ("True: move made") elif posn > 8 or posn < 0: return ("False: posn should be between 1 and 8") elif self.cells[posn] != "*": return ("posn occupied") def has_won(self, player): # 3 in a row/column/diagonal if self.cells[0] == player and self.cells[1] == player and self.cells[ 2] == player: return True elif self.cells[3] == player and self.cells[ 4] == player and self.cells[5] == player: return True elif self.cells[6] == player and self.cells[ 7] == player and self.cells[8] == player: return True #columns elif self.cells[0] == player and self.cells[ 3] == player and self.cells[6] == player: return True elif self.cells[1] == player and self.cells[ 4] == player and self.cells[7] == player: return True elif self.cells[2] == player and self.cells[ 5] == player and self.cells[8] == player: return True #diagonals elif self.cells[0] == player and self.cells[ 4] == player and self.cells[8] == player: return True elif self.cells[2] == player and self.cells[ 4] == player and self.cells[6] == player: return True else: return False def game_over(self): if self.has_won("X") == True or self.has_won("O") == True: return True else: return False def check(i): if i == "*": return True y = list(filter(check, self.cells)) if len(y) == 0: result = True return result else: return False def clear(self): self.cells = ["*", "*", "*", "*", "*", "*", "*", "*", "*"] return print(self)
def play_tic_tac_toe () -> Нет: «» «« Использует ваш класс для воспроизведения тиктактирования »
def is_int(maybe_int: str): """Returns True if val is int, False otherwise Args: maybe_int - string to check if it's an int Returns: True if maybe_int is an int, False otherwise """ try: int(maybe_int) return True except ValueError: return False brd = TTTBoard() players = ["X", "O"] turn = 0 while not brd.game_over(): print(brd) move: str = input(f"Player {players[turn]} what is your move? ") if not is_int(move): raise ValueError( f"Given invalid position {move}, " "position must be integer between 0 and 8 inclusive") if brd.make_move(players[turn], int(move)): turn = not turn print(f"\nGame over!\n\n{brd}") if brd.has_won(players[0]): print(f"{players[0]} wins!") elif brd.has_won(players[1]): print(f"{players[1]} wins!") else: print(f"Board full, that's game!")
Если Имя == » Главная «: # Вот некоторые тесты. Это совсем не исчерпывающие тесты. Вы будете # Определенно нужно написать еще несколько тестов, чтобы убедиться, что ваш класс TTTBOBLE # ведет себя правильно. () brd.make_move (“x”, 8) brd.make_move (“O”, 7)
assert brd.game_over() == False brd.make_move("X", 5) brd.make_move("O", 6) brd.make_move("X", 2) assert brd.has_won("X") == True assert brd.has_won("O") == False assert brd.game_over() == True brd.clear() assert brd.game_over() == False brd.make_move("O", 3) brd.make_move("O", 4) brd.make_move("O", 5) assert brd.has_won("X") == False assert brd.has_won("O") == True assert brd.game_over() == True print("All tests passed!") # uncomment to play! # play_tic_tac_toe()
Оригинал: “https://dev.to/erickwithack/tic-tac-toe-game-14kf”