コード例 #1
0
ファイル: play.py プロジェクト: hanayashiki/TicTacToe
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
コード例 #2
0
    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