2012-03-04 2 views
4

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

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

  1. получают вход от XBoard и распечатать его на консоль/экран
  2. Дайте ход жесткого кодировкой ввода в XBoard и он делает шаг
  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 трубопроводов для связи с другой программой (минус несколько основных программ), так что я был бы признателен за любые помощь и любые объяснения. Я знаю, что программирование шахматного движка - задача геркулеса, но я уже заранее программировал правила шахмат, и что я могу найти на сайте Брюса, просто потрясающе.

+0

Могу ли я предложить вам ознакомиться с http://chessprogramming.wikispaces.com/ в качестве замены для сайта Брюса Мореланда? –

ответ

3

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

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

И вот другой вопрос с большим количеством информации о программировании шахматных двигателей: «What are some good resources for writing a chess engine?».

+0

Действительно отличный ответ! –

Смежные вопросы