Biblioteca Java para analisador PGN

9

Gostaria de encontrar uma biblioteca Java que me permita ler um arquivo PGN que possa conter vários jogos de xadrez, provavelmente com comentários inseridos também. Mas, não será usado para gerar jogadas ou jogá-las em um tabuleiro. Eu só quero ler o pgn e obter a seção de cabeçalho e mover seção, e despejar tudo em um banco de dados.

Qualquer luz que me leve ao caminho certo é realmente apreciada. Eu só preciso do analisador e segmentar as informações do pgn e depois executarei o dumping no banco de dados.

Agradecemos antecipadamente por qualquer ajuda.

Chale CS
fonte

Respostas:

9

Depois de ler um monte de código-fonte aberto, descobri que a maioria deles conta com o Chesspresso, uma sólida biblioteca Java Chess que pode lidar com validação de movimento, analisador PGN (o que eu estava procurando), renderização de tabuleiro de xadrez, etc.

O código está bem documentado e fácil de entender. Levei cerca de 30 minutos para ler o código e iniciar o teste. Muito feliz com esta biblioteca.

Você pode baixar o código-fonte do sourceforge: Código-fonte do Chesspresso

Código de exemplo: (este é um fragmento da classe Game, eu só preciso adicionar mais detalhes para a seção do cabeçalho e estarei pronto para despejar cada jogo pgn no meu banco de dados).

    public String getHeaderString(int line)
{
    if (line == 0) {
        StringBuffer sb = new StringBuffer();
        sb.append(getWhite());
        if (getWhiteElo() != 0) sb.append(" [").append(getWhiteElo()).append("]");
        sb.append(" - ").append(getBlack());
        if (getBlackElo() != 0) sb.append(" [").append(getBlackElo()).append("]");
        sb.append("  ").append(getResultStr()).append("  (").append(getNumOfMoves()).append(")");
        return sb.toString();
    } else if (line == 1) {
        StringBuffer sb = new StringBuffer();
        sb.append(getEvent()).append(", ").append(getSite()).append(", ").append(getDate());
        sb.append("  [").append(getRound()).append("]");
        return sb.toString();
    } else if (line == 2) {
        return getECO();
    } else {
        throw new RuntimeException("Only 3 header lines supported");
    }
}
Chale CS
fonte
3

Você poderia usar chesslib .

No arquivo LEIA - ME, há um exemplo de como carregar e percorrer todas as jogadas de todos os jogos no arquivo PGN:

    PgnHolder pgn = new PgnHolder("/opt/games/linares_2002.pgn");
    pgn.loadPgn();
    for (Game game: pgn.getGame()) {
        game.loadMoveText();
        MoveList moves = game.getHalfMoves();
        Board board = new Board();
        //Replay all the moves from the game and print the final position in FEN format
        for (Move move: moves) {
            board.doMove(move);
        }
        System.out.println("FEN: " + board.getFen());
    }
Ben-Hur Langoni Junior
fonte
1

Como uma dica geral: veja os jogos de xadrez Android de código aberto. Como o DroidFish ( https://github.com/peterosterlund2/droidfish ) Talvez você possa encontrar lá o que está procurando ou pelo menos usá-lo como ponto de partida.

Peter M
fonte