xboard chess gui不发送第二个用户移动

时间:2018-04-26 02:19:18

标签: c++ unix protocols chess

我正在尝试为xboard制作一个国际象棋引擎。在用户进行第一次移动后,我的国际象棋引擎回复,然后xboard不会发送用户进行的下一步移动。

我记录了任何xboard发送到我的引擎。以下是我的引擎使用e2e4回复move e7e6的代码示例:

#include <iostream>
#include <fstream>
#include <unistd.h>

std::ofstream f("xboardtoeng.txt");
std::ofstream f2("engtoxboard.txt");

int main(int argc, char** argv){  

    while (true){
        std::string s;
        std::cin>>s;
        f<<s<<std::endl;
        if (s=="protover"){
            std::cout<<"feature done=1"<<std::endl;
            f2<<"feature done=1"<<std::endl;
        }else if (s=="e2e4"){
            usleep(100000);
            std::cout<<"move e7e6"<<std::endl;
            f2<<"move e7e6"<<std::endl;
        }
    }
    f.close();
}

编译完成后,我运行了xboard -fcp $PWD/a.out。然后,我将e2e4作为用户在GUI中移动。在我的引擎回复之后,我做了另一个动作(例如,e4e5)。这是我在xboardtoeng.txt中得到的:

xboard
protover 2
accepted usermove
accepted myname
accepted done
new
random
level 40 5 0
post
hard
time 30000
otim 30000
usermove e2e4

在这里,xboard确实将第一个动作发送到我的引擎。但是,不会发送下一个用户移动。知道我哪里做错了吗?

我使用的是xboard版本4.8.0

1 个答案:

答案 0 :(得分:1)

我有同样的问题,这是因为Xboard发送SIGINT和SIGTERM信号。添加代码signal(SIGINT, SIG_IGN)可以解决我的问题。

source 1 source 2