Как сгенерировать FEN-строку и отправить ее в Stockfish? - PullRequest
0 голосов
/ 01 мая 2018

Я создаю шахматный графический интерфейс, который должен общаться с Stockfish. Я слышал, что мне нужно сгенерировать FEN-строку, чтобы рассказать Stockfish о проделанной работе. Итак, вопрос в том, как мне это сделать? Я действительно зашел в тупик ... Я использую Eclipse IDE.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018
0 голосов
/ 02 мая 2018

Я не уверен, что вы сделали или на каком языке программирования, но, поскольку вы используете Eclipse IDE, я полагаю, что это Java.

Горячие советы по запуску Stockfish можно найти в этом видео: https://www.youtube.com/watch?list=PLQV5mozTHmacMeRzJCW_8K3qw2miYqd0c&v=vuvTFNreykk

Stackoverflow, связанный с видео: Использование универсального шахматного интерфейса

Итак, для решения вашего вопроса:

Итак, вопрос в том, как мне это сделать?

Ну, простое решение - искать уже реализованные проекты, создающие FEN-строки. Я знаю, что их много. Если вы хотите простой, , но неуклюжий способ создания FEN-строки в Java, я сделал вам следующее:

Примечание: эта реализация считает, что у вас вся доска в строке [] [] (я не затруднялся, делая ее более продвинутой в эти поздние часы)

Примечание 2: Он не создает всю строку FEN. В нем отсутствует активный цвет, доступность Castling, En passant, часы Halfmove и число Fullmove, но я уверен, что вы сможете реализовать это легко

Выход:

rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR

private final String RANK_SEPARATOR = "/";

private String[][] board = {
        {"r","n","b","q","k","b","n","r"},
        {"p","p","p","p","p","p","p","p"},
        {"","","","","","","",""},
        {"","","","","","","",""},
        {"","","","","","","",""},
        {"","","","","","","",""},
        {"P","P","P","P","P","P","P","P"},
        {"R","N","B","Q","K","B","N","R"}
};

public String translateBoardToFEN(String[][] board) {
    String fen = "";
    for (int rank = 0; rank < board.length; rank++) {
        // count empty fields
        int empty = 0;
        // empty string for each rank
        String rankFen = "";
        for (int file = 0; file < board[rank].length; file++) {
            if(board[rank][file].length() == 0) {
                empty++;
            } else {
                // add the number to the fen if not zero.
                if (empty != 0) rankFen += empty;
                // add the letter to the fen
                rankFen += board[rank][file];
                // reset the empty
                empty = 0;
            }
        }
        // add the number to the fen if not zero.
        if (empty != 0) rankFen += empty;
        // add the rank to the fen
        fen += rankFen;
        // add rank separator. If last then add a space
        if (!(rank == board.length-1)) {
            fen += RANK_SEPARATOR;
        } else {
            fen += " ";
        }
    }
    return fen;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...