В настоящее время я хочу сделать простой драйвер протокола Winboard, но я не знаю, с чего начать. Я прочитал эту страницу (H.G. Muller Драйвер протокола Winboard), но это слишком сложно для меня 🙁
Поэтому я ищу, как сделать очень простой код для связи с winboard, и нашел эту страницу (Связь с XBoard (шахматный движок) (C ++ / C) Stackoverflow). Я понимаю, что основная идея состоит в том, чтобы получить информацию от winboard и напечатать что-нибудь, чтобы дать команду winboard. Я также попробовал код, созданный Эриком Тома на этой странице, с некоторыми изменениями.
#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 и исполняемый файл простого протокола, мой код не перемещает никакие шахматные фигуры.
C:\WinBoard-4.7.3\WinBoard\winboard.exe -cp -fcp C:\WinBoard-4.7.3\WinBoard\testdriver.exe -scp "GNUChess"
Мой вопрос:
Спасибо, прежде чем ..
Я только что искал справку по использованию Winboard Protocol и наткнулся на эту ветку. После того, как я скомпилировал код с помощью gcc в командной строке cmd (Win8) (4 предупреждения), я открыл диалоговое окно запуска Winboard 4.8 (игра с движком или совпадение с двумя двигателями). Затем я загрузил свой .exe в качестве первого шахматного движка, и Winboard сделал паузу с «запуском первой шахматной программы». Через некоторое время он загрузился и позволил мне выполнить ход (1.e4). Тогда черный двигатель FairyMax не получил ответа, и после 5-минутного контроля мой двигатель, поскольку белые были объявлены победителями в срок!
Так что я не уверен, почему второй движок FairyMax не может выводить свои ходы? Я буду смотреть и думать об этом больше, но если кто-нибудь может сказать мне, я был бы благодарен за объяснение. Я надеюсь, что вам удалось продвинуться вперед с этим, поскольку прошло много времени с тех пор, как вы впервые разместили сообщение, и это единственный ответ. Удачного шахматного программирования 🙂
Других решений пока нет …