2015-05-04 41 views
-3

我想將我的C++程序與國際象棋引擎連接起來,以便讓敵人擁有AI。 在我的C++程序中 - >用戶會做出一個動作(比如A2A3) - >我會把這個字符串傳給棋盤引擎 - >引擎會更新棋盤 - >引擎會啓動AI來計算敵方移動 - >引擎會給敵人的移動作爲字符串(例如A7A6)到我的C++程序 - >等用C++ GUI程序連接國際象棋引擎

我讀到,爲了讓我的程序與國際象棋引擎進行交互,我必須啓動chess_engine.exe文件並交換命令它通過標準輸入/輸出。

你能告訴我,我的Visual Studio程序代碼如何啓動一個exe文件並與它交換命令?任何示例?

預先感謝您。

+0

哪個操作系統?或者你使用C++ 11還是Boost?對於Windows,請參閱https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499%28v=vs.85%29.aspx – sashoalm

+0

您應該使用UCI國際象棋界面,它基本上使用管道stdio/stdout在前端和引擎之間交換信息。 – trojanfoe

+0

是的,據我所知UCI是一套規則/命令來交換我的應用程序和國際象棋引擎。所以我需要通過我的應用程序打開.exe引擎,然後通過std I/O與引擎交換命令或者我可以使用現成的代碼,它允許我指定國際象棋引擎文件,然後使用就緒函數,如 - > pass_command(a2a3)? – mariosbikos

回答

0

爲此,您需要使用引擎啓動新的線程或進程。通常情況下,您將通過啓動一個新的流程來完成此任務,其中引擎的主要功能將成爲新流程的起點。

現在,您將在應用程序中擁有兩個進程。您的GUI應用程序是父進程,而引擎本身將是子進程。您需要通過標準的國際象棋UCI協議與引擎進行通信。您可以管理輸入和輸出到子進程(這是引擎)。

比方說,你想開始一個新的遊戲。您將發出以下UCI命令:

isready 
ucinewgame 

請仔細閱讀UCI規範。你可以在Google上找到它。