gpt4 book ai didi

c++ - 如何为Winboard制作一个简单的协议(protocol)?

转载 作者:行者123 更新时间:2023-11-30 17:38:40 24 4
gpt4 key购买 nike

目前我想制作一个简单的winboard协议(protocol)驱动程序,但我不知道从哪里开始。我已阅读此页( H.G. Muller Winboard Protocol Driver ),但它对我来说太复杂了:(

所以我搜索如何编写一个非常简单的代码来与 winboard 进行通信并找到了此页面( Communicating with XBoard (chess engine) (C++/C) Stackoverflow) 。我理解主要思想是从 winboard 获取一些输入并打印一些内容来给 winboard 一个命令。我也尝试了 Eric Thoma 在该页面中编写的代码,并进行了一些更改。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// four different constants, with values for WHITE and BLACK that suit your engine
#define WHITE 1
#define BLACK 2
#define NONE 0
#define ANALYZE 3

#define DEFAULT_FEN "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"

int main(int argc, const char * argv[]){
int stm; // side to move
int engineSide=NONE; // side played by engine
int i, score;
char inBuf[80], command[80];

while(1){
fflush(stdout);
if (stm == engineSide){
printf("move %s\n", "a7a5");
// change the stm?
continue;
}

fflush(stdout);
if (!fgets(inBuf, 80, stdin)) continue;

sscanf(inBuf, "%s", command);

if(!strcmp(command, "quit")){
break; // breaks out of infinite loop
}

if(!strcmp(command, "force")){
engineSide = NONE;
continue;
}

if(!strcmp(command, "go")){
engineSide = stm;
continue;
}

if(!strcmp(command, "exit")){
engineSide = NONE;
continue;
}

if(!strcmp(command, "new")){
engineSide = BLACK;
// change the stm?
continue;
}

if(!strcmp(command, "setboard")){
engineSide = NONE;
// change the stm?
continue;
}

if(!strcmp(command, "protover")){
printf("feature ping=1 setboard=1 colors=0 usermove=1 debug=1");
printf("feature done=1");
continue;
}

if(!strcmp(command, "ping")){
printf("pong%s", inBuf+4);
continue;
}

if(!strcmp(command, "usermove")){
//whatever
//i just want to try to move the chess piece
}

}
}

但没有任何变化,当我通过创建 winboard 和简单协议(protocol)的 exe 文件的快捷方式来运行它时,我的代码没有移动任何棋子。

C:\WinBoard-4.7.3\WinBoard\winboard.exe -cp -fcp C:\WinBoard-4.7.3\WinBoard\testdriver.exe -scp "GNUChess"

我的问题是:

  1. 抱歉,如果我在这里看起来很荒谬:(我的代码正确吗?
  2. 我怎样才能只做一个简单的 Action 而不制作整个引擎(不思考和分析用户的 Action )?无论用户如何移动棋子,我都会只移动 1 步,例如 a7a5。只是为了让我了解这个winboard协议(protocol)的流程。

先谢谢了..

最佳答案

我刚刚在寻找使用 Winboard 协议(protocol)的帮助并偶然发现了这个线程。在 cmd 提示符 (Win8) 中使用 gcc 编译代码后(4 个警告),我打开了 Winboard 4.8 启动对话框(对战引擎或匹配 2 引擎选项)。然后我加载 .exe 作为第一个国际象棋引擎,Winboard 暂停并“启动第一个国际象棋程序”。过了一会儿,它加载并允许我下棋(1.e4)。然后黑色引擎 FairyMax 没有任何响应,5 分钟后控制我的引擎,因为白方被宣布按时赢得了比赛!所以我不知道为什么FairyMax第二引擎无法输出它的 Action ?我会对此进行更多研究和思考,但如果有人能告诉我,我将很感激能得到解释。我希望您能够继续前进,因为自从您第一次发帖以来已经很长时间了,这是唯一的回复。快乐的国际象棋编程:-)

关于c++ - 如何为Winboard制作一个简单的协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com