Связь с XBoard (шахматный движок) (C ++ / C) - PullRequest
4 голосов
/ 04 марта 2012

Я просто занимался созданием базового шахматного движка.Мне удалось получить много советов от http://web.archive.org/web/20070704121716/http://www.brucemo.com/compchess/programming/alphabeta.htm,, но реальный сайт не работает, и не все страницы заархивированы.(Кто-нибудь знает, где найти полную версию сайта Брюса?)

Но теперь реальный вопрос: как мне общаться с XBoard?Я понимаю, что это через stdin и stdout, но у меня были проблемы в коде.По сути, для начала я просто хочу

  1. получить входные данные от XBoard и распечатать их на консоли / экране
  2. Передать жестко запрограммированный ввод в XBoard и получить егосделать функции полезности программы move
  3. и иметь случайные шахматы ai, которые выбирают случайные ходы.

После этого я могу приступить к реализации реальных вещей, таких как альфа-бета-поиск.

Я застрял на первых двух вещах прямо сейчас.Вот некоторый код, который я пытался написать / заимствовать.

#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;
}

Я только возвращаюсь в C после примерно 6-месячного перерыва, и это первый проект, в котором я использовал конвейеры stdin / stdout для связи сдругая программа (за исключением нескольких основных программ), поэтому я был бы признателен за любую помощь и любые объяснения.Я знаю, что программирование шахматного движка - очень сложная задача, но я уже запрограммировал правила шахмат раньше, и то, что я могу найти на сайте Брюса, просто поразительно.

Ответы [ 2 ]

3 голосов
/ 04 марта 2012

Вы делаете это почти правильно: получите команду от XBoard с fgets, затем сообщите о перемещении с printf и fflush. (Однако одно неверно: вам не нужно «печатать команду на консоли / экране»; вы не общаетесь с консолью / экраном; вы только читаете команды из XBoard и отправляете ходы обратно в XBoard).

Вероятно, было бы легче начать с некоторого существующего кода. Попробуйте прочитать источники для GNU Chess . Или загрузите исходные коды для любого другого шахматного движка , поддерживающего протокол XBoard.

А вот еще один вопрос с большим количеством информации о программировании шахматного движка: « Какие есть хорошие ресурсы для написания шахматного движка? ».

1 голос
/ 04 марта 2012

Я думаю, что вы ищете pipe (), включенный в unistd.h.Взгляните на Может ли popen () создавать двунаправленные каналы, такие как pipe () + fork ()? , для заметок по реализации.

...