将Chess Engine连接到使用Javascript创建的现有GUI

时间:2014-11-20 23:46:16

标签: user-interface interface chess uci

我已经编写了自己的GUI来播放和教授国际象棋。 GUI是使用HTML编写的外观,JavaScript是针对部分的行为编写的。目前该计划不遵守任何国际象棋规则。用户可以正确地遵守国际象棋的规则。这允许自由设置非法位置或多次移动同一侧。这在尝试向初学者教授国际象棋时非常有用。

我现在正在考虑我想将程序挂钩到国际象棋引擎的想法。我对如何解决这个问题一无所知。像StockFish或Rybka这样的大多数象棋引擎使用UCI与GUI进行通信。我不知道如何使我的程序UCI兼容。我对编写自己的国际象棋引擎不感兴趣,我只想下载引擎并让它与我编写的GUI进行交互。

我的棋盘由div标签组成,这些棋子只是PNG,可以在棋盘上拖放,完全自由,不受国际象棋规则的限制。理想情况下,我希望能够在我的GUI上设置任意随机位置,并将该位置发送到引擎进行分析,并返回最佳移动建议。我甚至都不需要程序来为我移动棋子,因为我可以自己动手。

有没有人知道如何开始这个项目?

2 个答案:

答案 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版本一起使用,以实现您需要的所有特性。您也可以改进系统。