Video Thumbnail

♟️ Chess Special Moves - Prevent & Checkmate! - 3/3 [Unity tutorial 2021][C#]

Mercenary Camp42:22
https://www.youtube.com/watch?v=rSntP8EC4kY

Содержание

Краткое резюме

В этом видео показывается, как реализовать логику предотвращения шаха и выявления матовых позиций в шахматной игре на примере разработки кода. Автор объясняет процесс симуляции ходов, чтобы проверить, не окажется ли король под ударом после хода, и реализует автоматическое определение условия окончания игры — шах и мат. Видео включает детальный разбор алгоритмов предотвращения шаха, моделирования ходов и проверки позиций, что позволяет создавать реалистичную шахматную игру с обязательными правилами защиты короля.


Реализация предотвращения хода, ставящего короля под шах

Основная идея

Чтобы игрок не мог сделать ход, который поставит собственного короля под шах, необходимо симулировать каждый потенциальный ход и проверить, будет ли после него король под угрозой.

«В шахматах нельзя делать ход, который приведёт к тому, что твой король окажется под шахом.»

Логика работы функции preventCheck

  • Получается текущая позиция короля игрока.
  • Для каждой возможной позиции хода симулируется перемещение фигуры на эту позицию на копии доски.
  • Если после хода король оказывается под ударом фигур соперника, такой ход запрещается (удаляется из списка доступных ходов).
  • Алгоритм исключает не только прямые угрозы, но и ситуации, когда перемещение фигуры открывает линию атаки на короля.

Копирование доски и симуляция ходов

Так как реальные данные не должны изменяться, создаётся копия массива, представляющего расстановку фигур. На этой копии моделируются ходы:

  • Исходная клетка, с которой уходит фигура, очищается.
  • Фигура перемещается на новую позицию.
  • Убираются захваченные фигуры соперника.
  • Проверяется, не попадает ли король под угрозу после такого изменения.

Обнаружение угрозы королю

  • Извлекаются все вражеские фигуры, которые при текущем положении могут атаковать короля.
  • Составляется список всех возможных ходов вражеских фигур.
  • Если среди этих ходов присутствует позиция короля, ход запрещается.

Проверка окончания игры — мат

Алгоритм проверки шаха и мата после хода

После совершения хода необходимо проверить, находится ли противник в шахе и есть ли у него возможные ходы:

  1. Определение команды, которой принадлежит король, подвергшийся проверке, через последний сделанный ход.
  2. Получение списка всех атакующих фигур и своих защитников.
  3. Проверка, под атакой ли король и есть ли у защитников хоть один ход, чтобы спасти короля (снять шах).
  4. Если нет ни одного возможного защитного хода — объявляется мат.

Детали реализации

  • Сначала получаем список всех фигур соперника и все их возможные ходы.
  • Проверяем, входит ли позиция короля в список атакуемых клеток.
  • Если король в шахе, перебираем ходы своих фигур, симулируя каждый с помощью ранее описанной симуляции.
  • Если хоть один ход снимает шах — мат отсутствует.
  • Иначе функция возвращает true, что означает шах и мат, и вызывается функция завершения игры.

Важные моменты и особенности

Особые случаи

  • Король не может наступать на клетку, где подвергается шаху.
  • Фигуры, которые блокируют линию атаки (например, слон или ладья), не могут быть сняты с этой позиции, если это открывает шах.
  • Функция preventCheck вызывается до хода для ограничения возможных ходов.
  • Функция checkForCheckmate вызывается после хода, чтобы проверить состояние игры.

Параллели и повторения

  • Модуль симуляции ходов переиспользуется и при предотвращении шаха, и при проверке мата.
  • Копирование и симуляция на копии доски — ключевой аспект при определении корректности ходов.
  • Работа с фигурами и списками ходов строится через универсальные структуры — списки векторов с координатами.

Практическое применение: тестирование на примерах

  • Автор демонстрирует, как игрок не может сделать запрещённый ход (например, вражеский ферзь угрожает, и ход запрещён).
  • Показано, что если защита убрала угрозу (например, пешка встала между королём и атакующей фигурой), ранее запретные ходы становятся доступными.
  • В конце автор демонстрирует реальную ситуацию с шахом и матом, где у игрока нет ходов для защиты, и игра заканчивается по правильному условию.

Итоги и планы развития

  • Реализована и протестирована система полного предотвращения ходов, ведущих к шаху своему королю.
  • Добавлена логика автоматического определения шаха и мата.
  • Следующий этап — внедрение мультиплеера и дополнительных правил (превращение пешек, шахматная нотация).
  • Автор делится планами расширения функционала, в том числе добавления визуализации ходов и улучшенной системы нотации.

«Теперь у нас есть настоящая шахматная игра с соблюдением всех важных правил!»


Заключение

В видео на примере написания кода разборчиво показано, как реализовать ключевые шахматные правила: запрет ходов, ставящих короля под шах, и обнаружение матовых ситуаций. Автор уделяет особое внимание симуляции ходов на копии доски для предсказания последствий каждого возможного хода, демонстрируя важность предварительной проверки безопасности позиции короля. Такой подход обеспечивает корректность ходов и позволяет автоматически завершать игру в случае шаха и мата, что является фундаментом для любой полноценной шахматной программы.