我已经编写了自己的GUI来播放和教授国际象棋。 GUI是使用HTML编写的外观,JavaScript是针对部分的行为编写的。目前该计划不遵守任何国际象棋规则。用户可以正确地遵守国际象棋的规则。这允许自由设置非法位置或多次移动同一侧。这在尝试向初学者教授国际象棋时非常有用。
我现在正在考虑我想将程序挂钩到国际象棋引擎的想法。我对如何解决这个问题一无所知。像StockFish或Rybka这样的大多数象棋引擎使用UCI与GUI进行通信。我不知道如何使我的程序UCI兼容。我对编写自己的国际象棋引擎不感兴趣,我只想下载引擎并让它与我编写的GUI进行交互。
我的棋盘由div标签组成,这些棋子只是PNG,可以在棋盘上拖放,完全自由,不受国际象棋规则的限制。理想情况下,我希望能够在我的GUI上设置任意随机位置,并将该位置发送到引擎进行分析,并返回最佳移动建议。我甚至都不需要程序来为我移动棋子,因为我可以自己动手。
有没有人知道如何开始这个项目?
答案 0 :(得分:2)
UCI协议规范可在此处找到:
http://wbec-ridderkerk.nl/html/UCIProtocol.html
作为一个高级别,它定义了一组从GUI发送到引擎的命令,反之亦然。
您可以看到,您可以使用该协议设置position
命令后跟FEN字符串的任何位置(其他变体可用)。
作为示例命令:
position fen rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2
在1 e4 c6之后将发动机放置位置
然后,您可以使用go
命令(具有各种时间限制选项等)让引擎计算移动。
你可能会冒着混淆引擎的风险,试图通过相同的颜色发送非法移动和/或多次连续移动(虽然我们在这个主题上也避免尝试发送非法位置,例如黑色与白色检查播放)。
只要您的代码在gui端(或某些中间层)通过停止正在进行的游戏处理这些非法怪物,而在发送结果位置开始新游戏之前发生非法操作,那么任何UCI引擎都应该应对很好。
几乎任何可以想象的平台都有成千上万的UCI国际象棋引擎 - 其中许多都是免费和/或开源的。这份清单应该给你一个不错的开始:
http://computer-chess.org/doku.php?id=computer_chess:wiki:lists:chess_engine_list
我猜你的选择在某种程度上取决于你打算在其上部署的操作系统(如果你的gui是html / js那么我猜想某些网络服务器在哪里,但是LAMP,WAMP,ASP.Net,或者我可能从未听说过的任何其他品种!:-))
只要您可以加载AN引擎可执行文件并传入命令&通过标准I / O阅读回复!
祝你好运 - 如果你把它部署在某个地方,请告诉我。很高兴能够欺骗机器! : - )
答案 1 :(得分:2)
您可以将http://cinnamonchess.altervista.org/与包含chessboard.js和chess.js的JS版本一起使用,以实现您需要的所有特性。您也可以改进系统。