将国际象棋引擎连接到使用Javascript制作的现有GUI
我编写了自己的GUI来玩和教国际象棋。 GUI的外观是用HTML编写的,而JavaScript是用来表示这些部分的行为。 目前该计划不遵循任何国际象棋规则。 用户要正确遵循国际象棋的规则。 这允许自由设置非法职位或多次移动同一方。 在为初学者教国际象棋时这非常有用。
我现在正在考虑将我的程序挂接到一个国际象棋引擎的想法。 我不知道如何去做这件事。 像StockFish或Rybka等大多数国际象棋引擎都使用UCI与GUI进行通信。 我不知道如何让我的程序UCI兼容。 我对编写自己的国际象棋引擎不感兴趣,我只想下载一个引擎,让它与我写的GUI交互。
我的棋盘由div标签组成,这些棋子只是PNG,可以独立于国际象棋规则,完全自由地拖放在棋盘上。 理想情况下,我希望能够在我的GUI上设置任意位置,并将该位置发送到引擎进行分析,并返回最佳移动建议。 我甚至不需要该程序来为我移动棋盘上的棋子,因为我可以自己做这些。
有没有人有我如何开始这个项目的想法?
您可以使用http://cinnamonchess.altervista.org/以及包含chessboard.js和chess.js的JS版本来实现您所需的所有特性。 你也可以改进系统。
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
命令(使用各种时间限制选项等)让引擎计算移动。
试图通过发送非法动作和/或通过相同颜色的多个连续动作(虽然我们在这个主题上也避免尝试发送非法的位置,例如黑色与白色一起玩),您可能冒着混淆引擎的风险。
只要你的代码通过停止任何正在进行的游戏来处理这些非法古怪事件,同时在发送合适位置开始新游戏之前发生非法操作,那么任何UCI引擎都应该处理得很好。
几乎所有可以想象的平台都有成千上万的UCI国际象棋引擎 - 其中许多是免费和/或开源的。 这个清单应该给你一个体面的开始:
http://computer-chess.org/doku.php?id=computer_chess:wiki:lists:chess_engine_list
我猜你的选择在某种程度上取决于你打算部署的操作系统(如果你的gui是html / js,那么我会猜测某个web服务器在某处,但是是LAMP,WAMP,ASP。网络,或者其他我可能从未听说过的品种!:-))
只要您可以加载AN引擎可执行文件,并通过命令和读取响应,通过您离开的标准I / O!
祝你好运 - 如果你将它部署在某个地方,请告诉我。 很高兴能够欺骗机器! :-)
链接地址: http://www.djcxy.com/p/14817.html上一篇: Connecting a Chess Engine to an Existing GUI made with Javascript