2

我编写了自己的用于下棋和教学的 GUI。GUI 使用 HTML 编写外观,使用 JavaScript 编写片段行为。目前该程序不遵循任何国际象棋规则。正确遵循国际象棋规则取决于用户。这允许自由设置非法位置或多次移动同一侧。这在尝试向初学者教授国际象棋时非常有用。

我现在正在考虑将我的程序连接到国际象棋引擎的想法。我不知道该怎么做。大多数国际象棋引擎,如 StockFish 或 Rybka 使用 UCI 与 GUI 通信。我不知道如何使我的程序 UCI 兼容。我对编写自己的国际象棋引擎不感兴趣,我只想下载一个引擎并让它与我编写的 GUI 交互。

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

有谁知道我如何开始这个项目?

4

2 回答 2

3

您可以将http://cinnamonchess.altervista.org/与包含 chessboard.js 和 chess.js 的 JS 版本一起使用,它们实现了您需要的所有特性。您还可以改进系统。

于 2014-12-07T17:03:55.360 回答
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。网,或任何其他我可能从未听说过的品种!:-))

只要您可以加载一个引擎可执行文件并通过标准 I/O 传递命令并读取响应,您就可以离开了!

祝你好运——如果你把它部署在某个地方,请告诉我。能欺骗机器就好了!:-)

于 2014-12-02T23:02:07.540 回答