Как сделать простой протокол для Winboard?

В настоящее время я хочу сделать простой драйвер протокола 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"

Мой вопрос:

  1. извините, если я выгляжу здесь как-то нелепо
  2. Как я могу просто сделать простой ход, не делая весь движок (не обдумывая и не анализируя движения пользователя)? что бы пользователь ни сдвинул шахматную фигуру, я просто сделаю 1 ход, например, a7a5. это просто, чтобы я знал, как протекает этот протокол winboard.

Спасибо, прежде чем ..

0

Решение

Я только что искал справку по использованию Winboard Protocol и наткнулся на эту ветку. После того, как я скомпилировал код с помощью gcc в командной строке cmd (Win8) (4 предупреждения), я открыл диалоговое окно запуска Winboard 4.8 (игра с движком или совпадение с двумя двигателями). Затем я загрузил свой .exe в качестве первого шахматного движка, и Winboard сделал паузу с «запуском первой шахматной программы». Через некоторое время он загрузился и позволил мне выполнить ход (1.e4). Тогда черный двигатель FairyMax не получил ответа, и после 5-минутного контроля мой двигатель, поскольку белые были объявлены победителями в срок!
Так что я не уверен, почему второй движок FairyMax не может выводить свои ходы? Я буду смотреть и думать об этом больше, но если кто-нибудь может сказать мне, я был бы благодарен за объяснение. Я надеюсь, что вам удалось продвинуться вперед с этим, поскольку прошло много времени с тех пор, как вы впервые разместили сообщение, и это единственный ответ. Удачного шахматного программирования 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]