Implemented game serialization to the PGN format #16

Merged
CyB3RC0nN0R merged 9 commits from f/pgn_save into master 2019-12-11 07:53:46 +01:00
Showing only changes of commit 1fd1540d60 - Show all commits

View File

@ -82,29 +82,31 @@ public class PGNGame {
// Insert newline if tags were printed
if (!tagPairs.isEmpty()) pw.println();
// Collect SAN moves
Board clone = new Board(board, true);
List<String> chunks = new ArrayList<>();
while (clone.getLog().hasParent()) {
Move move = clone.getLog().getLast().move;
clone.revert();
String chunk = clone.getLog().getLast().activeColor == Color.WHITE ? String.format(" %d. ", clone.getLog().getLast().fullmoveCounter)
: " ";
chunk += move.toSAN(clone);
chunks.add(chunk);
}
Collections.reverse(chunks);
// Write movetext
String line = "";
for (String chunk : chunks)
if (line.length() + chunk.length() <= 80) line += chunk;
else {
// Flush line
pw.println(line);
line = "";
if (!board.getLog().isEmpty()) {
// Collect SAN moves
Board clone = new Board(board, true);
List<String> chunks = new ArrayList<>();
boolean flag = true;
while (flag) {
Move move = clone.getLog().getLast().move;
flag = clone.getLog().hasParent();
clone.revert();
String chunk = clone.getLog().getActiveColor() == Color.WHITE ? String.format(" %d. ", clone.getLog().getFullmoveNumber()) : " ";
chunk += move.toSAN(clone);
chunks.add(chunk);
}
Collections.reverse(chunks);
// Write movetext
String line = "";
for (String chunk : chunks)
if (line.length() + chunk.length() <= 80) line += chunk;
else {
pw.println(line);
line = "";
}
if (!line.isEmpty()) pw.println(line);
}
// Write game termination marker
pw.print(tagPairs.get("Result"));
}