From a19130bb8620c0c726b6271a0c120a9ef3f9a518 Mon Sep 17 00:00:00 2001 From: valen Date: Sun, 22 Jun 2025 23:28:05 +0200 Subject: [PATCH] loadGamesFromPgn() wurde erstellt saveAsPgn wurde erstellt --- .../informatik/chess/model/ChessEngine.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/ChessEngine.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/ChessEngine.java index e7d3c9f..64c9eb4 100644 --- a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/ChessEngine.java +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/ChessEngine.java @@ -1,4 +1,8 @@ package de.hs_mannheim.informatik.chess.model; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.logging.ConsoleHandler; @@ -10,7 +14,10 @@ import java.util.logging.SimpleFormatter; import com.github.bhlangonijr.chesslib.Board; import com.github.bhlangonijr.chesslib.Piece; import com.github.bhlangonijr.chesslib.Square; +import com.github.bhlangonijr.chesslib.game.Game; +import com.github.bhlangonijr.chesslib.game.GameResult; import com.github.bhlangonijr.chesslib.move.Move; +import com.github.bhlangonijr.chesslib.pgn.PgnHolder; public class ChessEngine { private Board board; @@ -187,4 +194,56 @@ public class ChessEngine { logger.info("ChessEngine wurde initialisiert."); } + public List loadGamesFromPgn(String path) throws IOException { + + PgnHolder pgnHolder = new PgnHolder(path); + try { + pgnHolder.loadPgn(); + } catch (Exception e) { + e.printStackTrace(); + } + List games = pgnHolder.getGames(); + return games; + } + + public void saveAsPgn(Game game, String path, String dateiname) { + String event = game.getRound().getEvent().getName(); + String site = game.getRound().getEvent().getSite(); + String round = "" + game.getRound().getNumber(); + String date = game.getRound().getEvent().getStartDate(); + String wName = game.getWhitePlayer().getName(); + String bName = game.getBlackPlayer().getName(); + String result = game.getResult().getDescription(); + + StringBuilder header = new StringBuilder(); + header.append("[Event \"" + event + "\"]\n"); + header.append("[Site \"" + site + "\"]\n"); + header.append("[Date \"" + date + "\"]\n"); + header.append("[Round \"" + round + "\"]\n"); + header.append("[White \"" + wName + "\"]\n"); + header.append("[Black \"" + bName + "\"]\n"); + header.append("[Result \"" + result + "\"]\n"); + header.append("\n"); + + StringBuilder sb = new StringBuilder(); + String[] sanArray = game.getHalfMoves().toSanArray(); + + for (int i = 0; i < sanArray.length; i++) { + if (i % 2 == 0) { + sb.append((i / 2 + 1)).append(". "); + } + sb.append(sanArray[i]).append(" "); + } + + sb.append(result); // Endergebnis muss auch am Ende stehen! + + String file = header.toString() + sb.toString(); + + try { + Files.writeString(Path.of(path, dateiname), file, StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + } + }