2014-11-20 69 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讀取響應,你就不在了!

好運 - 如果您將它部署在某處,請告訴我。很高興能夠欺騙機器! :-)