2012-03-04 56 views
4

我只是在製作一個基本的國際象棋引擎。我能夠從http://web.archive.org/web/20070704121716/http://www.brucemo.com/compchess/programming/alphabeta.htm得到很多建議,但真正的網站已關閉,並且並非所有網頁都已歸檔。 (任何人都知道在哪裏可以找到完整版本的布魯斯網站?)與XBoard(國際象棋引擎)通信(C++/C)

但現在到了真正的問題:我如何與XBoard進行通信?我知道這是通過stdin和stdout,但我一直在代碼中遇到問題。基本上,上手的,我只是想

  1. 從XBoard接收輸入並打印到控制檯/屏幕
  2. 給硬編碼輸入的舉動XBoard並將它使移動
  3. 程序實用功能,並隨機選擇隨機移動棋。

之後,我可以開始實施真正的事情,如alpha-beta搜索。

我被困在現在的前兩件事上。這是我試圖寫/借的​​一些代碼。

#include <iostream> 
#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 
#define STR_BUFF 256 

using namespace std; 

int main (int argc, const char * argv[]) 
{ 
    char input[STR_BUFF]; 
    char output[STR_BUFF]; 
    while(true){ 
     fflush(stdout); 
     // read input 
     if (!fgets(input, STR_BUFF, stdin)){ 
      printf("terminated"); 
      return 0;; 
     } 

     printf("%s", input); 
    } 
    return 0; 
} 

我剛剛回到成C後約6個月破裂,這是我使用標準輸入/輸出管道與其他程序通信的第一個項目(上下浮動幾個基本程序),所以我將不勝感激任何幫助和任何解釋。我知道編程一個國際象棋引擎是一項艱鉅的任務,但我已經編制了國際象棋規則,而我能找到的布魯斯的網站絕對是驚人的。

+0

我可以建議你看http://chessprogramming.wikispaces.com/作爲布魯斯莫蘭德網站的替代品嗎? – 2012-03-08 19:19:13

回答

3

你這樣做幾乎是正確的:從得到來自XBoard的命令,然後報告移動printffflush。 (但有一點是錯誤的:您不需要'將命令打印到控制檯/屏幕';您沒有與控制檯/屏幕進行通信;您只能從XBoard讀取命令並將動作發送回XBoard)。

也許,從一些現有的代碼開始會更容易。嘗試閱讀GNU Chess的來源。或者下載支持XBoard協議的任何other chess engine的源代碼。

這裏還有其他關於國際象棋引擎編程的信息:「What are some good resources for writing a chess engine?」。

+0

真的很棒的回答! – 2012-03-06 00:25:43