Implemented game serialization to the PGN format #16
@ -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"));
|
||||
}
|
||||
|
Reference in New Issue
Block a user