Как сгенерировать FEN-строку и отправить ее в Stockfish?

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

2 ответа

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

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

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

Итак, чтобы решить ваш вопрос:

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

Ну, простое решение - искать уже реализованные проекты, создающие 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;
}
Другие вопросы по тегам