回答:
一連のオープンソースコードを読んだ後、それらのほとんどが、移動検証、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");
}
}
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());
}
一般的なヒントとして、オープンソースのAndroidチェスゲームを見てください。DroidFish(https://github.com/peterosterlund2/droidfish)のように、探しているものが見つかるか、少なくとも出発点として使用できます。