Verbesserung der Spielfeld Klasse um Einsatz im Programm zu ermöglichen als auch die Anforderungen zu erfüllen zwecks Ausgabe und Farben

feature/CSVReader
Leon Maximilian Löhle 2024-12-21 14:04:30 +01:00
parent 53b012f6a7
commit bb8a2ad265
1 changed files with 91 additions and 35 deletions

View File

@ -4,51 +4,107 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Map;
import java.util.Scanner;
import java.util.Random;
public class Spielfeld {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String folderPath = Paths.get("").toAbsolutePath() + File.separator + "src" + File.separator + "Spielfelder" + File.separator;
private int[][] feld;
private String[][] zustand; // "grau", "schwarz", "weiß"
Map<Integer, String> felder = Map.of(
1, "4x4.csv",
2, "5x5.csv",
3, "8x8_leicht.csv",
4, "8x8_medium.csv",
5, "10x10.csv",
6, "15x15.csv");
System.out.println("Verfügbare Spielfeldgrößen:");
felder.forEach((key, value) -> System.out.println(key + ": " + value.replace(".csv", "")));
System.out.println("Welche Spielfeldgröße wollen Sie bespielen?");
int wahl = sc.nextInt();
if (!felder.containsKey(wahl)) {
System.out.println("Ungültige Auswahl");
return;
}
String gewählteDatei = felder.get(wahl);
System.out.println("Sie haben die Spielfeldgröße '" + gewählteDatei.replace(".csv", "") + "' gewählt");
readCSVFile(folderPath + gewählteDatei);
public Spielfeld() {
}
public static void readCSVFile(String filePath) {
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
public void ladeSpielfeld(String dateiPfad) {
try (BufferedReader br = new BufferedReader(new FileReader(dateiPfad))) {
String line;
System.out.println("\nInhalt der Datei:");
int zeilenZaehler = 0;
while ((line = br.readLine()) != null) {
System.out.println(line);
zeilenZaehler++;
}
br.close();
feld = new int[zeilenZaehler][];
zustand = new String[zeilenZaehler][];
try (BufferedReader br2 = new BufferedReader(new FileReader(dateiPfad))) {
int row = 0;
while ((line = br2.readLine()) != null) {
String[] werte = line.split(",");
feld[row] = new int[werte.length];
zustand[row] = new String[werte.length];
for (int col = 0; col < werte.length; col++) {
feld[row][col] = Integer.parseInt(werte[col]);
zustand[row][col] = "grau";
}
row++;
}
}
} catch (IOException e) {
System.err.println("Fehler beim Lesen der Datei: " + e.getMessage());
System.err.println("Fehler beim Laden des Spielfelds: " + e.getMessage());
}
}
public void ladeZufaelligesSpielfeld(String ordnerPfad) {
File ordner = new File(ordnerPfad);
File[] dateien = ordner.listFiles((dir, name) -> name.endsWith(".csv"));
if (dateien != null && dateien.length > 0) {
Random random = new Random();
File zufallsDatei = dateien[random.nextInt(dateien.length)];
ladeSpielfeld(zufallsDatei.getAbsolutePath());
} else {
System.err.println("Keine CSV-Dateien im Verzeichnis gefunden!");
}
}
public void setzeZustand(int x, int y, String neuerZustand) {
if (istImBereich(x, y)) {
zustand[x][y] = neuerZustand;
} else {
System.err.println("Koordinaten außerhalb des Spielfelds!");
}
}
public String getZustand(int x, int y) {
if (istImBereich(x, y)) {
return zustand[x][y];
} else {
System.err.println("Koordinaten außerhalb des Spielfelds!");
return null;
}
}
public int getWert(int x, int y) {
if (istImBereich(x, y)) {
return feld[x][y];
} else {
System.err.println("Koordinaten außerhalb des Spielfelds!");
return -1;
}
}
public void reset() {
for (int i = 0; i < zustand.length; i++) {
for (int j = 0; j < zustand[i].length; j++) {
zustand[i][j] = "grau";
}
}
}
public int getBreite() {
return feld[0].length;
}
public int getHoehe() {
return feld.length;
}
private boolean istImBereich(int x, int y) {
return x >= 0 && x < feld.length && y >= 0 && y < feld[0].length;
}
}