Piece: Данный класс описывает шахматную фигуру. В конструкторе определяются следующие свойства фигуры: цвет, позиция, направление хода, флаг о том, был ли ход данной фигурой ранее, и история ходов.
Метод get_possible_moves возвращает список возможных ходов для данной фигуры на доске.
Метод can_move проверяет, возможен ли заданный ход для данной фигуры.
Метод move перемещает фигуру на заданную позицию и обновляет историю ходов.
Метод undo_move отменяет последний ход фигуры.
Метод is_opponent проверяет, является ли данная фигура оппонентом текущей фигуры.
Методы get_possible_straight_line_moves и get_possible_diagonal_moves возвращают возможные ходы для фигуры в соответствующих направлениях.
Класс не реализует все методы для каждой фигуры, но определяет базовые свойства и методы, которые могут быть унаследованы дочерними классами для более специфических фигур, таких как пешка, конь, слон, ладья, ферзь и король. Классы для отдельных фигур я описывать не буду, они двигаются по обычным правилам. Также реализована Королева-паук(она может перемещаться как королева, но также может прыгать на расстояние до трех клеток по диагонали, через другие фигуры), Пешка-скакун (может двигаться только на одну или две клетки вперед и на одну клетку вправо или влево) и Корабль(перемещается на любое количество пустых клеток в любом направлении (вертикально, горизонтально или диагонально), но только если между начальной и конечной клетками нет других фигур). Chessboard: В конструкторе init создается пустая доска размером 8 на 8, после чего на нее устанавливаются фигуры в начальной расстановке. Конкретно, на 1 и 6 ряды устанавливаются пешки для белых и черных соответственно, а на оставшиеся ряды - ладьи, кони, слоны, королевы и короли в соответствии с правилами игры. Помимо этого, класс содержит несколько методов, таких как get_all_pieces (возвращает все фигуры на доске), get_curr_player_pieces (возвращает фигуры текущего игрока), get_poss_moves_for (возвращает возможные ходы для заданной фигуры), move_piece (выполняет ход фигурой), get_castle_moves_for_curr_player (возвращает возможные ходы для рокировки) и т.д. Game: Он использует библиотеку pygame, чтобы создать игровой интерфейс и обработать ввод пользователя. Класс Game инициализирует игру, создает доску, отображает ее и управляет игровым процессом. Методы класса включают отрисовку доски и бокового меню, получение кликов пользователя, вычисление возможных ходов для фигуры и обработку перемещения фигур. Если шахматная партия заканчивается, игра выводит на экран сообщение о чекмейте и победителе.