class Play: def __init__(self, AIModel, playerRole, inputter=DefaultInputter, displayer=DefaultDisplayer): self.aiModel = AIModel self.playerRole = playerRole self.inputter = inputter self.displayer = displayer def Start(self): self.game = Game() while not self.game.IsFull(): self.displayer(self.game) if self.playerRole == self.game.GetCurrentPlayer(): while True: inputPos = self.inputter() x, y = self.game.PosToXY(inputPos) if self.game.IsEmpty(x, y): break else: print("Place already taken up") continue else: x, y = Train.GetNextBestMove(self.aiModel, self.game) self.game.Play(self.game.GetCurrentPlayer(), x, y) if self.game.GetWinner() != Game.EMPTY: self.displayer(self.game) print("Player %s wins ! " % Game.PLAYER_ATTR[self.game.GetWinner()]['name']) break elif self.game.IsFull(): self.displayer(self.game) print("It's a tie !") break
def PlayGame(self, game : Game, cb = None): winner = game.GetWinner() steps = 1 while not game.IsFull(): winner = game.GetWinner() if winner != Game.EMPTY: break if game.GetCurrentPlayer() == Game.O: x, y = self.GetNextBestMove(self.modelO, game) else: x, y = self.GetNextBestMove(self.modelX, game) game.Play(game.GetCurrentPlayer(), x, y) steps += 1 if cb: cb(game.clone()) return winner, steps