2012-03-04 57 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