@Programmir

Где можно найти алгоритм шахмат?

Делаю игру, наподобие шахмат. Где можно найти подробный алгоритм? Например, как делается шах? То есть, мы просчитываем все фигуры соперника, и если король окажется на траектории одной из фигур, то даем шах? А мат получаем, типа просчетом того, что король не может куда-то отойти или фигура союзника не может взять фигуру противника, которая дает шах или встать на траектории вражеской фигуры, прикрыв короля?
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 2
@maximsemin23
Надо использовать stockfish
Ответ написан
trapwalker
@trapwalker
Программист, энтузиаст
В общем случае такие задачи решаются перебором. Для этого строится дерево возможных состояний доски начиная с текущего состояния. Потомки текущего состояния в этом дереве - это результаты всех возможных ходов очередного игрока. Это сильно ветвящееся дерево, а значит буквально через несколько ходов количество элементов в нём станет слишком большим, чтобы перебирать и оценивать их по очереди. Тут и речи не жёт о спуске по дереву до финальных (листовых) состояний, по которым можно однозначно удить о выигрыше.
Очевидно, что дерево можно усекать и не рассматривать заведомо проигрышные или слишком затратные ходы, можно сравнивать состояния с определёнными предварительно просчитанными ситуациями. Чем их больше в БД, тем быстрее будет работать ваш алгоритм.
В любом случае более менее эффективно играть в шахматы компьютеры научились только недавно и для этого нужны очень мощные компьютеры, большая БД и нетривиальные алгоритмы распознавания типовых паттернов на доске.
Нельзя просто так взять и переделать готовый хороший шахматный алгоритм под себя. Вернее можно, но сложно.
Зато попробовать написать что-то своё - это хорошее упражнение для мозгов.

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

На всякий случай скажу, что в шахматы я играть не умею, знаю лишь правила и могу играть только на дилетантском уровне, так что могу нести чушь. Просто рассказываю ка кподходил бы к решению здачи наивно с нуля. При серьёзном решении этой задачи наука давно перешагнула далеко за порог сложности для самого талантливого новичка.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы