PGNパーサー用のJavaライブラリ


9

おそらくコメントも挿入された複数のチェスゲームを含む可能性のあるPGNファイルを読み取ることができるJavaライブラリを見つけたいと思います。ただし、ボードでの動きの生成や動きの再生には使用されません。私はpgnを読み取ってヘッダーセクションと移動セクションを取得し、すべてをデータベースにダンプしたいだけです。

私を正しい道に導くどんな光でも本当に感謝しています。パーサーが必要で、pgnからの情報をセグメント化して、データベースにダンプします。

助けてくれてありがとう。

回答:


9

一連のオープンソースコードを読んだ後、それらのほとんどが、移動検証、PGNパーサー(私が探していたもの)、チェスボードレンダラーなどを処理できる堅固なJava ChessライブラリであるChesspressoに依存していることがわかりました。

コードは十分に文書化されており、理解しやすいです。コードを読んでテストを開始するのに約30分かかりました。このライブラリにはかなり満足しています。

ソースコードはsourceforgeからダウンロードできます:Chesspresso Source Code

サンプルコード:(これはGameクラスのフラグメントです。ヘッダーセクションの詳細を追加するだけで、各pgnゲームをデータベースにダンプする準備ができます)。

    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");
    }
}

3

chesslibを使用できます。

READMEファイルをロードし、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());
    }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.