Мы продолжаем написание шахматных алгоритмов. На этом уроке мы будем защищать короля от ШАХа.
Дата отправки отчёта:
15 июня 2024 г.
Задание выполнено: за
7 час. 8 мин.
Чему научился:
Прогнал через дебагер игру и сейчас получается, что из-за проверки на шах и потенциального хода, который запускает функцию Move, а та в свою очередь запускает конструктор NextBoard, где задаются жизненно важные для игры состояния помимо самой доски, доска, а следовательно и все остальное пересоздается перед каждой проверкой любого потенциального хода из ранее оставшихся. Странно, что программа вообще работает, там ведь и генерация FEN и цвет игрока и номер хода и много чего ещё. Выглядит так себе.
Научился: Подготовил FEN для тестирования;
Дописал функцию Chess().YieldValidMoves();
Реализовал функции IsCheckAfterMove(), CanEatKing(), FindBadKing() и IsCheck() в классе Board();
Доработал функцию Moves().CanKingCastle();
Создал конструктор FigureMoving() для пустого хода;
Протестировал работу до мата. Трудности: Ничего. Ждем большого тестирования =)
Научился: Оказалось, что проверка на шах ломает введённое копирование параметров из board в nextBoard, так что пока вернул ресурсоёмкую генерацию всех параметров при пересоздании доски, но позже вернусь к этому вопросу.
Ещё нашёл и исправил ошибку с упущенными скобками, которые не позволяли ладье совершить рокировку. Ничто так не позволяет понять строение проекта, как дебаггинг :)