Загрузка данных


import pyautogui

# Задержка между действиями pyautogui (в секундах)
pyautogui.PAUSE = 0.05


def square_to_screen_coords(square_str, roi, is_black=False):
    """
    Преобразует шахматную нотацию ('e2') в физические пиксели (X, Y) на экране.
    """
    col_file = square_str[0]  # Буква ('a' - 'h')
    row_rank = square_str[1]  # Цифра ('1' - '8')

    col_idx = ord(col_file) - ord('a')
    row_idx = 8 - int(row_rank)

    # Если играем за чёрных, доска перевёрнута на 180°
    if is_black:
        col_idx = 7 - col_idx
        row_idx = 7 - row_idx

    cell_w = roi["width"] / 8.0
    cell_h = roi["height"] / 8.0

    # Вычисляем центр нужной клетки
    center_x = int(roi["left"] + (col_idx + 0.5) * cell_w)
    center_y = int(roi["top"] + (row_idx + 0.5) * cell_h)

    return center_x, center_y


def execute_move(move_uci, roi, is_black=False):
    """
    Выполняет клики мышкой по доске для совершения хода.
    """
    if not move_uci or len(move_uci) < 4:
        return

    from_sq = move_uci[0:2]
    to_sq = move_uci[2:4]

    # Вычисляем координаты начальной и конечной клеток
    x_from, y_from = square_to_screen_coords(from_sq, roi, is_black)
    x_to, y_to = square_to_screen_coords(to_sq, roi, is_black)

    # 1. Клик по исходной фигуре
    pyautogui.click(x_from, y_from)
    
    # 2. Клик по целевой клетке
    pyautogui.click(x_to, y_to)

    # 3. Обработка превращения пешки (если ход из 5 символов, напр. 'e7e8q')
    if len(move_uci) == 5:
        promotion_piece = move_uci[4].lower()
        if promotion_piece == 'q':
            pyautogui.click(x_to, y_to)