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

0

В настоящее время я хочу создать простой драйвер протокола winboard, но я не знаю с чего начать. Я прочитал эту страницу (HG Muller Winboard Protocol Driver), но для меня это слишком сложно :(

Поэтому я ищу, как сделать очень простой код для связи с винтовым узлом и найти эту страницу (qaru.site/questions/1399664/.... Я понимаю, что основная идея состоит в том, чтобы получить некоторый вклад от винтовой доски и напечатать что-то, чтобы дать команде 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
        }

    }
}

но ничего не изменилось, когда я запускаю его, создавая ярлык для винтовой доски и простой файл exe протокола, мой код не перемещает ни одной шахматной фигуры.

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

Мой вопрос:

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

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

Теги:
io
protocols
chess

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню