2014-11-20 67 views
2

我已经编写了我自己的图形用户界面(GUI)供玩和教国际象棋。 GUI的外观是用HTML编写的,而JavaScript是用来表示这些部分的行为。目前该计划不遵循任何国际象棋规则。用户要正确遵循国际象棋的规则。这允许自由设置非法职位或多次移动同一方。在为初学者教国际象棋时这非常有用。将国际象棋引擎连接到用Javascript制作的现有图形用户界面

我现在正在考虑将我的程序绑定到国际象棋引擎的想法。我不知道如何去做这件事。像StockFish或Rybka等大多数国际象棋引擎都使用UCI与GUI进行通信。我不知道如何让我的程序UCI兼容。我对编写自己的国际象棋引擎不感兴趣,我只想下载一个引擎,让它与我写的GUI交互。

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

有没有人有我如何开始这个项目的想法?

回答

1

的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读取响应,你就不在了!

好运 - 如果您将它部署在某处,请告诉我。很高兴能够欺骗机器! :-)