def check_horizontal(row, col1, col2, target_col, symbol, game_board):
    if game_board[row][col1] == game_board[row][col2] == symbol and game_board[row][target_col] == " ":
        game_board[row][target_col] = "O"
        return True
    return False

def check_vertical(col, row1, row2, target_row, symbol, game_board):
    if game_board[row1][col] == game_board[row2][col] == symbol and game_board[target_row][col] == " ":
        game_board[target_row][col] = "O"
        return True
    return False

def check_diagonal(pos1, pos2, target, symbol, game_board):
    r1, c1 = pos1
    r2, c2 = pos2
    tr, tc = target
    if game_board[r1][c1] == game_board[r2][c2] == symbol and game_board[tr][tc] == " ":
        game_board[tr][tc] = "O"
        return True
    return False

def placement_horizontal(row, col1, col2, target_col, symbol, game_board):
    if game_board[row][col1] == game_board[row][col2] == symbol and game_board[row][target_col] == " ":
        game_board[row][target_col] = "O"
        return True
    return False

def placement_vertical(col, row1, row2, target_row, symbol, game_board):
    if game_board[row1][col] == game_board[row2][col] == symbol and game_board[target_row][col] == " ":
        game_board[target_row][col] = "O"
        return True
    return False

def placement_diagonal(pos1, pos2, target, symbol, game_board):
    r1, c1 = pos1
    r2, c2 = pos2
    tr, tc = target
    if game_board[r1][c1] == game_board[r2][c2] == symbol and game_board[tr][tc] == " ":
        game_board[tr][tc] = "O"
        return True
    return False

def second_placement_horizontal(row, col1, col2, target_col, symbol, game_board):
    if game_board[row][col1] == "O" and game_board[row][col2] == symbol == game_board[row][target_col] == " ":
        game_board[row][col2] = "O"
        return True
    return False

def second_placement_vertical(col, row1, row2, target_row, symbol, game_board):
    if game_board[row1][col] == "O" and game_board[row2][col] == symbol == game_board[target_row][col] == " ":
        game_board[row2][col] = "O"
        return True
    return False

def second_placement_diagonal(pos1, pos2, target, symbol, game_board):
    r1, c1 = pos1
    r2, c2 = pos2
    tr, tc = target
    if game_board[r1][c1] == "O" and game_board[r2][c2] == symbol == game_board[tr][tc] == " ":
        game_board[r2][c2] = "O"
        return True
    return False

def defense(game_board):
    turn_played = False
    for x in range(3):
        if turn_played:
            break
        turn_played = (check_horizontal(x, 0, 1, 2, "X", game_board) or
                       check_horizontal(x, 0, 2, 1, "X", game_board) or
                       check_horizontal(x, 1, 2, 0, "X", game_board))

    # Vérifier les colonnes
    if not turn_played:
        for y in range(3):
            if turn_played:
                break
            turn_played = (check_vertical(y, 0, 1, 2, "X", game_board) or
                           check_vertical(y, 0, 2, 1, "X", game_board) or
                           check_vertical(y, 1, 2, 0, "X", game_board))

    # Vérifier les diagonales
    if not turn_played:
        for y in range(3):
            if turn_played:
                break
        turn_played = (check_diagonal((0, 0), (1, 1), (2, 2), "X", game_board) or
                       check_diagonal((0, 2), (1, 1), (2, 0), "X", game_board))
        
def attack(game_board):
    turn_played = False
    for x in range(3):
        if turn_played:
            break
        turn_played = (check_horizontal(x, 0, 1, 2, "O", game_board) or
                       check_horizontal(x, 0, 2, 1, "O", game_board) or
                       check_horizontal(x, 1, 2, 0, "O", game_board))

    # Vérifier les colonnes
    if not turn_played:
        for y in range(3):
            if turn_played:
                break
            turn_played = (check_vertical(y, 0, 1, 2, "O", game_board) or
                           check_vertical(y, 0, 2, 1, "O", game_board) or
                           check_vertical(y, 1, 2, 0, "O", game_board))

    # Vérifier les diagonales
    if not turn_played:
        for y in range(3):
            if turn_played:
                break
        turn_played = (check_diagonal((0, 0), (1, 1), (2, 2), "O", game_board) or
                       check_diagonal((0, 2), (1, 1), (2, 0), "O", game_board))
        
def placement(game_board):
    turn_played = False
    for x in range(3):
        if turn_played:
            break
        turn_played = (placement_horizontal(x, 0, 1, 2, " ", game_board) or
                       placement_horizontal(x, 0, 2, 1, " ", game_board) or
                       placement_horizontal(x, 1, 2, 0, " ", game_board))

    # Vérifier les colonnes
    if not turn_played:
        for y in range(3):
            if turn_played:
                break
            turn_played = (placement_vertical(y, 0, 1, 2, " ", game_board) or
                           placement_vertical(y, 0, 2, 1, " ", game_board) or
                           placement_vertical(y, 1, 2, 0, " ", game_board))

    # Vérifier les diagonales
    if not turn_played:
        for y in range(3):
            if turn_played:
                break
        turn_played = (placement_diagonal((0, 0), (1, 1), (2, 2), " ", game_board) or
                       placement_diagonal((0, 2), (1, 1), (2, 0), " ", game_board))

def second_placement(game_board):
    turn_played = False
    for x in range(3):
        if turn_played:
            break
        turn_played = (second_placement_horizontal(x, 0, 1, 2, " ", game_board) or
                       second_placement_horizontal(x, 0, 2, 1, " ", game_board) or
                       second_placement_horizontal(x, 1, 2, 0, " ", game_board))

    # Vérifier les colonnes
    if not turn_played:
        for y in range(3):
            if turn_played:
                break
            turn_played = (second_placement_vertical(y, 0, 1, 2, " ", game_board) or
                           second_placement_vertical(y, 0, 2, 1, " ", game_board) or
                           second_placement_vertical(y, 1, 2, 0, " ", game_board))

    # Vérifier les diagonales
    if not turn_played:
        for y in range(3):
            if turn_played:
                break
        turn_played = (second_placement_diagonal((0, 0), (1, 1), (2, 2), " ", game_board) or
                       second_placement_diagonal((0, 2), (1, 1), (2, 0), " ", game_board))
        

        

