Example #1
0
def check_lose(board, moves, play_sym):
    temp_board = Board()
    for move in moves:
        temp_board.board = [row[:] for row in board.board]
        temp_board.add_move(*move, play_sym)
        if temp_board.check_winner()[0]:
            return move
Example #2
0
def get_best_move(board, comp_sym, play_sym):
    best_score, best_move = -10, None
    temp_board = Board()
    for move in get_open_squares(board):
        temp_board.board = [row[:] for row in board.board]
        temp_board.add_move(*move, comp_sym)
        score = minimax(temp_board, False, comp_sym, play_sym, 1)
        if score > best_score:
            best_score = score
            best_move = move
    return best_move
Example #3
0
def minimax(board, maximizing, comp_sym, play_sym, depth):
    if board.check_winner() == (True, comp_sym): #computer wins
        return 1 / depth
    elif board.check_winner()[0]: #player wins
        return -1 / depth
    elif len(get_open_squares(board)) == 0: #draw
        return 0

    moves = get_open_squares(board)
    scores = []
    temp_board = Board()
    for move in moves:
        temp_board.board = [row[:] for row in board.board]
        if maximizing:
            player = comp_sym
        else:
            player = play_sym
        temp_board.add_move(*move, player)
        scores.append(minimax(temp_board, not maximizing, comp_sym, play_sym, depth + 1))
    if maximizing:
        return max(scores)
    return min(scores)
 def test_check_diags_no_winner(self):
     myBoard = Board()
     myBoard.board = [['O', '_', 'X'], ['_', 'O', '_'], ['O', 'X', '_']]
     self.assertEqual(myBoard.check_diags(), 0)
 def test_has_winner_None(self):
     myBoard = Board()
     myBoard.board = [['X', 'O', 'X'], ['O', 'X', '_'], ['_', '_', '_']]
     self.assertEqual(myBoard.has_winner(), 0)
 def test_check_diags_0_in_pos_diag(self):
     myBoard = Board()
     myBoard.board = [['_', '_', 'O'], ['_', 'O', '_'], ['O', '_', '_']]
     self.assertEqual(myBoard.check_diags(), 2)
 def test_check_diags_X_in_neg_diag(self):
     myBoard = Board()
     myBoard.board = [['X', '_', '_'], ['_', 'X', '_'], ['_', '_', 'X']]
     self.assertEqual(myBoard.check_diags(), 1)
 def test_check_cols_0_in_cols_2(self):
     myBoard = Board()
     myBoard.board = [['_', '_', 'O'], ['_', '_', 'O'], ['_', '_', 'O']]
     self.assertEqual(myBoard.check_cols(), 2)
 def test_check_cols_X_in_cols_0(self):
     myBoard = Board()
     myBoard.board = [['X', '_', '_'], ['X', '_', '_'], ['X', '_', '_']]
     self.assertEqual(myBoard.check_cols(), 1)
 def test_check_rows_O_in_row_2(self):
     myBoard = Board()
     myBoard.board = [['_', '_', '_'], ['_', '_', '_'], ['O', 'O', 'O']]
     self.assertEqual(myBoard.check_rows(), 2)