Шахматы с 3D-режимом
2D-режим:
Шахматная доска построена циклом с использованием fillRect для отрисовки клеток с чередованием цвета; также использован вывод текста (fillText) для обозначения координатной системы доски (буквы и цифры по краям).
Шахматные фигуры отрисованы с помощью графических примитивов lineTo, ellipse, arc и bezierCurveTo. Для фигур с вырезом (короля) применён метод заливки с правилом evenodd, позволяющий корректно вырезать внутренние области силуэта.
Отрисовка доски и фигур реализована отдельными функциями: каждая фигура рисуется в единой локальной системе координат с помощью трансформаций translate и scale, что позволяет масштабировать её под любой размер клетки.
3D-режим:
Трёхмерная сцена построена на Three.js. Доска состоит из мешей BoxGeometry (рамка и клетки) с материалами MeshStandardMaterial. Координатные метки создаются через canvas-текстуры и накладываются на плоскости.
Фигуры смоделированы вручную в Blender, после чего их геометрия экспортирована в виде массивов координат вершин и нормалей. Эти массивы преобразуются в BufferGeometry и используются для создания мешей. Материалы фигур — MeshStandardMaterial с разными цветами для белых и чёрных. Камера управляется через OrbitControls, сцена освещена ambient- и directional-светом с тенями.
Помимо графики, в коде реализована полноценная шахматная логика:
генерация допустимых ходов для всех типов фигур;
рокировка (короткая и длинная);
взятие на проходе;
превращение пешки;
определение шаха, мата и пата.
Логика работает одинаково в обоих режимах. Выделение выбранной фигуры, подсветка возможных ходов и индикация шаха синхронизированы между 2D и 3D. Переключение режимов выполняется одной кнопкой без потери текущего состояния партии.
