Thư viện Java cho trình phân tích cú pháp PGN


9

Tôi muốn tìm một thư viện Java cho phép tôi đọc tệp PGN có thể chứa một số trò chơi cờ vua, có thể có cả các bình luận được chèn vào. Nhưng, nó sẽ không được sử dụng để tạo ra các bước di chuyển hoặc chơi các bước di chuyển trong một bảng. Tôi chỉ muốn đọc pgn và lấy phần tiêu đề và di chuyển phần, và đổ mọi thứ vào cơ sở dữ liệu.

Bất kỳ ánh sáng nào sẽ đưa tôi đến đúng con đường thực sự được đánh giá cao. Tôi chỉ cần trình phân tích cú pháp và phân đoạn thông tin từ pgn và sau đó tôi sẽ thực hiện việc đổ vào cơ sở dữ liệu.

Cảm ơn trước sự giúp đỡ nào.

Câu trả lời:


9

Sau khi đọc một loạt mã nguồn mở, tôi phát hiện ra rằng hầu hết trong số họ đang dựa vào Chesspresso , một thư viện Java Chess vững chắc có thể xử lý xác thực di chuyển, trình phân tích PGN (những gì tôi đang tìm kiếm), kết xuất bàn cờ, v.v.

Các mã được tài liệu tốt và dễ hiểu. Tôi mất khoảng 30 phút để đọc mã và bắt đầu thử nghiệm. Khá hài lòng với thư viện này.

Bạn có thể tải xuống mã nguồn từ sourceforge: Mã nguồn Chesspresso

Mã mẫu: (Đây là một đoạn từ lớp Trò chơi, tôi chỉ cần thêm chi tiết cho phần tiêu đề và tôi sẽ sẵn sàng để đổ từng trò chơi pgn vào cơ sở dữ liệu của mình).

    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

Bạn có thể sử dụng cờ vua .

Trong tệp README có một ví dụ về cách tải và duyệt qua tất cả các di chuyển từ tất cả các trò chơi trong tệp 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());
    }

1

Như một gợi ý chung: Nhìn vào các trò chơi cờ vua nguồn mở Android. Giống như DroidFish ( https://github.com/peterosterlund2/droidfish ) Có lẽ bạn có thể tìm thấy ở đó những gì bạn đang tìm kiếm hoặc ít nhất sử dụng nó như một điểm khởi đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.