首页 > 解决方案 > xboard 国际象棋 gui 不发送第二个用户移动

问题描述

我正在尝试为 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

标签: c++unixprotocolschess

解决方案


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

来源 1 来源 2


推荐阅读