From 6515ea54c4d64ae6df2e437db0b47dca3c1725b3 Mon Sep 17 00:00:00 2001 From: Vickvick2002 Date: Fri, 3 Jan 2025 15:25:12 +0100 Subject: [PATCH] BoardLoader Klasse erstellt und Spielfelder implementiert --- .../java/PR2/HitoriSpiel/GUI/BoardLoader.java | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Hitori/src/main/java/PR2/HitoriSpiel/GUI/BoardLoader.java diff --git a/Hitori/src/main/java/PR2/HitoriSpiel/GUI/BoardLoader.java b/Hitori/src/main/java/PR2/HitoriSpiel/GUI/BoardLoader.java new file mode 100644 index 0000000..1d383f8 --- /dev/null +++ b/Hitori/src/main/java/PR2/HitoriSpiel/GUI/BoardLoader.java @@ -0,0 +1,100 @@ +package PR2.HitoriSpiel.GUI; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class BoardLoader { + + + /* + * Gibt eine Liste aller verfügbaren Spielfeld-Dateien im Package zurück. + * @return Eine Liste von relativen Pfaden zu CSV-Dateien. + */ + /*public static List loadBoardsAsList() { + // Harte Kodierung der bekannten Dateien + return List.of( + "Hitori4x4_leicht.csv", + "Hitori5x5leicht.csv", + "Hitori8x8leicht.csv", + "Hitori8x8medium.csv", + "Hitori10x10medium.csv", + "Hitori15x15_medium.csv" + ); + }*/ + + public static List loadBoardsAsList() { + List boardFiles = new ArrayList<>(); + try { + // Lade das Verzeichnis aus dem Klassenpfad + File directory = new File(BoardLoader.class.getResource("/persistent/Hitori_Spielfelder/").toURI()); + + // Überprüfen, ob das Verzeichnis existiert und es sich um ein Verzeichnis handelt + if (directory.exists() && directory.isDirectory()) { + for (File file : directory.listFiles()) { + if (file.isFile() && file.getName().endsWith(".csv")) { + boardFiles.add(file.getName()); + } + } + } else { + throw new IOException("Das Verzeichnis existiert nicht oder ist kein Verzeichnis."); + } + } catch (Exception e) { + System.err.println("Fehler beim Laden der Spielfelder: " + e.getMessage()); + } + return boardFiles; + } + + + + public static int[][] loadBoard(String resourcePath) throws IOException { + List rows = new ArrayList<>(); + + try (InputStream inputStream = BoardLoader.class.getResourceAsStream(resourcePath); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) { + + if (inputStream == null) { + throw new IOException("Ressourcendatei nicht gefunden: " + resourcePath); + } + + System.out.println("Lade Datei: " + resourcePath); + + String line; + int rowCount = 0; // Zähler für die gelesenen Zeilen + + // Lies die Zeilen bis zur Spielfeldgröße (n Zeilen) + while ((line = reader.readLine()) != null) { + if (line.trim().isEmpty() || line.startsWith("//")) { + continue; // Ignoriere leere Zeilen oder Kommentare + } + + System.out.println("Gelesene Zeile: " + line); + + String[] values = line.split(","); + int[] row = new int[values.length]; + for (int i = 0; i < values.length; i++) { + try { + row[i] = Integer.parseInt(values[i].trim()); + } catch (NumberFormatException e) { + throw new IOException("Ungültiger Wert in der Datei: " + values[i]); + } + } + + rows.add(row); + rowCount++; + + // Beende das Lesen, wenn die gewünschte Anzahl von Zeilen erreicht ist + if (rowCount == values.length) { + break; + } + } + } + + if (rows.isEmpty()) { + throw new IOException("Die Datei " + resourcePath + " enthält keine Daten."); + } + + // Konvertiere die Liste von Zeilen in ein 2D-Array + return rows.toArray(new int[0][0]); + } +}