Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 与XBoard(国际象棋引擎)通信(C+;+;/C)_C++_C_Io_Chess - Fatal编程技术网

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

C++ 与XBoard(国际象棋引擎)通信(C+;+;/C),c++,c,io,chess,C++,C,Io,Chess,我只是在玩弄一个基本的象棋引擎。我从中得到了很多建议,但真正的网站已经关闭,并不是所有的页面都被归档了。(有人知道哪里可以找到布鲁斯网站的完整版本吗?) 但现在要问真正的问题:我如何与XBoard通信?我知道这是通过stdin和stdout实现的,但我在代码方面遇到了问题。基本上,为了开始,我只想 从XBoard接收输入并将其打印到控制台/屏幕 将硬编码输入移动到XBoard,并让其移动 程序的实用功能,并有一个随机棋ai选择随机移动 在那之后,我可以开始实现真正的东西,比如alpha-beta

我只是在玩弄一个基本的象棋引擎。我从中得到了很多建议,但真正的网站已经关闭,并不是所有的页面都被归档了。(有人知道哪里可以找到布鲁斯网站的完整版本吗?)

但现在要问真正的问题:我如何与XBoard通信?我知道这是通过stdin和stdout实现的,但我在代码方面遇到了问题。基本上,为了开始,我只想

  • 从XBoard接收输入并将其打印到控制台/屏幕
  • 将硬编码输入移动到XBoard,并让其移动
  • 程序的实用功能,并有一个随机棋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;
    }
    
    #包括
    #包括
    #包括
    #包括
    #定义STR_BUFF 256
    使用名称空间std;
    int main(int argc,const char*argv[]
    {
    字符输入[STR_BUFF];
    字符输出[STR_BUFF];
    while(true){
    fflush(stdout);
    //读取输入
    如果(!fgets(输入,STR_BUFF,stdin)){
    printf(“终止”);
    返回0;;
    }
    printf(“%s”,输入);
    }
    返回0;
    }
    

    在大约6个月的休息后,我刚刚回到C,这是我第一个使用标准输入/标准输出管道与另一个程序(减去一些基本程序)进行通信的项目,因此我希望得到任何帮助和解释。我知道编写国际象棋引擎是一项艰巨的任务,但我以前已经编写了国际象棋规则,我在Bruce的网站上找到的东西绝对令人惊讶。

    我想你正在寻找unistd.h中包含的pipe()。查看有关实现的注释。

    您做得几乎正确:使用
    fgets
    从XBoard获取命令,然后使用
    printf
    fflush
    报告移动。(但有一点是错误的:您不需要“将命令打印到控制台/屏幕”;您没有与控制台/屏幕通信;您只从XBoard读取命令并将移动发送回XBoard)

    也许,从一些现有代码开始会更容易。试着去读一些资料。或下载任何支持XBoard协议的源代码

    这里还有一个关于国际象棋引擎编程的问题:“。

    是的,我还使用了pipe()。这也是XBoard的实现方式。我可以建议您将其作为Bruce Moreland网站的替代品吗?