Для реализации режима force (когда движок просто следит за игрой и не анализирует сам) и последующей команды go в python-chess используется метод engine.analysis() или перевод движка в режим анализа.
В библиотеке
python-chess управление протоколом XBoard автоматизировано, поэтому вам не нужно вручную отправлять текстовые команды "force" или "go".Вот готовый пример кода, который делает именно то, что вы описали:
Как это работает под капотом библиотеки:
- Режим Force: Пока вы просто делаете
board.push(move)в своем коде, движок WinBoard не нагружает процессор.python-chessпередает ему ходы в фоновом режиме, удерживая его в состоянии готовности. - Команда Go: Метод
engine.play()дает движку команду рассчитать лучший ход для текущей позиции на доске. Для XBoard-движка библиотека сама отправит нужные сигналы, чтобы вывести его из режима ожидания, получить ход и вернуть его вам.
Если вам нужно, чтобы движок во время ожидания кнопки всё-таки думал в фоне (режим постоянного анализа/анализа по кнопке), или если вы хотите визуализировать этот процесс в GUI, дайте знать — я дополню код.
Вот простой и корректный код на C, который реализует минимальную поддержку протокола WinBoard (XBoard/CECP).
Этот код корректно обрабатывает перевод в режим
force (чтобы ничего не слать в ответ на ходы) и по команде go мгновенно печатает ход move a2a3.Важные технические детали:
setbuf(stdout, NULL): Самая важная строка для шахматных движков на C. Без неё Windows/Linux будут копить вывод в буфере,python-chessзависнет в ожидании ответа, и программа «замерзнет».- Формат ответа: По протоколу WinBoard движок должен отвечать на команду
goстрокой, начинающейся со словаmove, например:move a2a3\n. - Игнорирование неизвестного: Так как
python-chessшлет служебные команды (например,ping,level,new,post/nopost), этот код безопасно пропускает их, реагируя только на ключевые (xboard,protover,force,go,quit).
Если вам потребуется добавить в этот си-код парсинг входящих ходов (чтобы движок понимал, какая сейчас позиция на доске до нажатия кнопки
go), скажите, я допишу функции разбора строк ходов.
Комментариев нет:
Отправить комментарий