我只是在制作一个基本的国际象棋引擎。我能够从http://web.archive.org/web/20070704121716/http://www.brucemo.com/compchess/programming/alphabeta.htm获得很多建议,但真实网站已关闭,并非所有网页都已归档。 (任何人都知道在哪里可以找到Bruce网站的完整版本?)
但现在谈到真正的问题:我如何与XBoard沟通?我理解它是通过stdin和stdout,但我在代码中遇到了问题。基本上,要开始,我只想
之后,我可以开始实现像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;
}
我刚刚休息了大约6个月后回到C,这是我使用stdin / stdout管道与另一个程序(减去一些基本程序)进行通信的第一个项目,所以我将不胜感激任何帮助和任何解释。我知道编写一个国际象棋引擎是一项艰巨的任务,但我之前已经编写了国际象棋规则,而我能找到的布鲁斯网站绝对令人惊叹。
答案 0 :(得分:3)
您的操作几乎是正确的:使用fgets
从XBoard获取命令,然后使用printf
和fflush
报告移动。 (但有一件事是错的:你不需要'将命令打印到控制台/屏幕';你没有与控制台/屏幕通信;你只是从XBoard读取命令并将移动发送回XBoard。) / p>
可能从一些现有代码开始会更容易。尝试阅读GNU Chess的来源。或者下载支持XBoard协议的任何other chess engine的源代码。
以下是关于国际象棋引擎编程的大量信息的另一个问题:“What are some good resources for writing a chess engine?”。
答案 1 :(得分:1)
我认为你正在寻找包含在unistd.h中的pipe()。请查看Can popen() make bidirectional pipes like pipe() + fork()?以获取有关实施的说明。