Подключение шахматного движка к существующему графическому интерфейсу, сделанному с помощью Javascript
Я написал свой собственный графический интерфейс для игры и обучения шахматам. Графический интерфейс был написан с использованием HTML для внешнего вида и JavaScript для поведения частей. В настоящее время программа не соответствует ни одному из правил шахмат. Пользователь должен правильно следовать правилам шахмат. Это дает свободу устанавливать нелегальные позиции или перемещать одну и ту же сторону несколько раз. Это очень полезно при попытке научить шахматам начинающих.
Сейчас я смотрю на идею, что я хотел бы подключить свою программу к шахматному движку. Я понятия не имею, как это сделать. Большинство шахматных движков, таких как StockFish или Rybka, используют UCI для связи с GUI. Я не знаю, как сделать мою программу совместимой с UCI. Я не заинтересован в написании своего собственного шахматного движка, я просто хотел бы скачать движок и заставить его взаимодействовать с написанным мной графическим интерфейсом.
Моя доска состоит из тегов div, фигуры - это просто PNG, которые можно перетаскивать на доске с полной свободой, независимо от шахматных правил. В идеале я хотел бы иметь возможность установить любую произвольную позицию в моем графическом интерфейсе и отправить эту позицию в двигатель для анализа с возвращением лучших рекомендаций по перемещению. Мне даже не нужна программа для перемещения фигур на доске, потому что я могу сделать это сам.
Кто-нибудь имеет представление о том, как я мог бы начать этот проект?
2 ответа
Вы можете использовать http://cinnamonchess.altervista.org/ с JS-версией, которая включает chessboard.js и chess.js, которые реализуют все необходимые вам характеристики. Также вы можете улучшить систему.
Спецификация протокола UCI находится здесь:
http://wbec-ridderkerk.nl/html/UCIProtocol.html
Как высокий уровень он определяет набор команд для отправки из графического интерфейса в движок и наоборот.
Вы можете видеть, что вы можете использовать протокол, чтобы установить любую позицию с position
команда, за которой следует строка FEN (доступны другие варианты).
В качестве примера команда:
position fen rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2
Даст двигателю положение после 1 е4 с6
Затем вы можете использовать go
команда (с различными вариантами ограничений по времени и т. д.), чтобы двигатель вычислял ход.
Вы можете рискнуть запутать движок, пытаясь отправить недопустимые ходы и / или несколько последовательных ходов одного и того же цвета (пока мы находимся на этой теме, также избегайте попыток отправить недопустимую позицию, например, чек в черный цвет с игрой белых).
До тех пор, пока ваш код обрабатывает эти недопустимые странности в конце графического интерфейса (или в некотором промежуточном уровне), останавливая любую текущую игру, в то время как незаконные маневры происходят перед отправкой результирующей позиции для начала новой игры, любой движок UCI должен нормально справляться.
Существуют тысячи шахматных движков UCI практически для любой мыслимой платформы - многие из них бесплатные и / или с открытым исходным кодом. Этот список должен дать вам достойное начало:
http://computer-chess.org/doku.php?id=computer_chess:wiki:lists:chess_engine_list
Я предполагаю, что ваш выбор будет зависеть, в некоторой степени, от операционной системы, на которой вы собираетесь ее развернуть (если ваш графический интерфейс - html/js, то я бы предположил, что где-то на каком-то веб-сервере это LAMP, WAMP, ASP). Чистая, или любая другая разновидность, о которой я, вероятно, никогда не слышал!:-))
До тех пор, пока вы можете загрузить исполняемый файл движка AN и передать команды и прочитать ответы через стандартный ввод-вывод, вы ушли!
Удачи - дай мне знать, если ты его где-нибудь развернешь. Было бы неплохо, чтобы можно было обмануть машины!:-)