与XBoard(国际象棋引擎)通信(C++/C)

4
我只是在制作一个基本的棋类引擎。我从http://web.archive.org/web/20070704121716/http://www.brucemo.com/compchess/programming/alphabeta.htm获得了很多建议,但真正的网站已经关闭,并且不是所有页面都被存档。(有人知道在哪里可以找到Bruce网站的完整版本吗?)
现在,问题来了:我该如何与XBoard通信?我理解是通过stdin和stdout,但我在代码中遇到了问题。基本上,为了开始,我只想:
1. 从XBoard接收输入并将其打印到控制台/屏幕上 2. 给XBoard提供硬编码输入的移动并让它进行移动 3. 编写实用程序函数并拥有一个选择随机走法的随机棋类AI。
之后,我可以开始实施真正的东西,例如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个月的休息。这是我第一次使用stdin/stdout管道与另一个程序进行通信(除了一些基本程序),所以我希望能得到任何帮助和解释。我知道编写一个象棋引擎是一项艰巨的任务,但我已经编写过棋类规则,并且我在Bruce网站上找到的东西绝对令人惊叹。


我可以建议您查看http://chessprogramming.wikispaces.com/作为Bruce Moreland网站的替代品吗? - Mathieu Pagé
2个回答

3
您做得几乎正确:使用fgets从XBoard获取命令,然后使用printffflush报告移动。(但有一件事是错误的:您不需要“将命令打印到控制台/屏幕上”;您没有与控制台/屏幕通信;您只从XBoard读取命令并将移动发送回XBoard)。
可能更容易的方法是从现有代码开始。尝试阅读GNU Chess源代码。或者下载支持XBoard协议的任何其他棋类引擎的源代码。
这里还有另一个关于棋类引擎编程的问题,提供了大量信息:“编写棋类引擎的好资源有哪些?”。

1

是的,我也使用了pipe()。这也是XBoard的实现方式。 - ABCD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接