diff --git a/PR2Projekt/.classpath b/PR2Projekt/.classpath index 5c5b866..c9dc6a4 100644 --- a/PR2Projekt/.classpath +++ b/PR2Projekt/.classpath @@ -1,6 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -32,4 +78,8 @@ + + + + diff --git a/PR2Projekt/pom.xml b/PR2Projekt/pom.xml index fe7a4d4..fd43d06 100644 --- a/PR2Projekt/pom.xml +++ b/PR2Projekt/pom.xml @@ -61,7 +61,7 @@ -src.main.java.de.hs_mannheim.informatik.mvn.domain.HitoriMain +src.main.java diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/.DS_Store b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/.DS_Store new file mode 100644 index 0000000..15a23f7 Binary files /dev/null and b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/.DS_Store differ diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java index 34f2395..a6ddcf9 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java @@ -23,6 +23,7 @@ import javax.swing.JPanel; import de.hs_mannheim.informatik.mvn.gui.GameGUI; import de.hs_mannheim.informatik.mvn.gui.MenuGUI; + public class HitoriMain extends JFrame implements ActionListener{ private static String[] filepath = {"", ""}; diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain2.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain2.java new file mode 100644 index 0000000..ed3ff36 --- /dev/null +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain2.java @@ -0,0 +1,234 @@ +package de.hs_mannheim.informatik.mvn.domain; + +import java.awt.CardLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Scanner; +import java.util.Stack; +import java.io.File; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; + +import de.hs_mannheim.informatik.mvn.gui.*; + +public class HitoriMain2 extends JFrame implements ActionListener{ + + private static String[] filepath = {"", ""}; + + public static void main(String[] args) throws FileNotFoundException{ + new MenuGUI(); + } + + public static void ablauf(CardLayout cl, JPanel main, String[] filepath) throws FileNotFoundException { + Stack madeMoves = new Stack<>(); + String[][] data = getData(filepath[0], Integer.parseInt(filepath[1])); + String[][] colors = makeColorArray(data.length); + JButton[][] buttons = makeButtonArray(data); + GameGUI.paintGame(cl, main, filepath, buttons, colors, madeMoves, data); + } + + public static ArrayList readFromFile(String path){ + ArrayList lines = new ArrayList<>(); + try (BufferedReader reader = new BufferedReader(new FileReader(path))) { + String line; + while ((line = reader.readLine()) != null) { + lines.add(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + return lines; + } + + public static String[][] getData(String filepath, int rows) throws FileNotFoundException{ + Scanner sc = new Scanner(new File(filepath)); + String[][] data = new String[rows][rows]; + int rowInt = 0; + while (sc.hasNextLine() && rowInt < rows) { + String line = sc.nextLine(); + data[rowInt] = line.split(","); + rowInt++; + } + sc.close(); + return data; + } + + + public static String[][] makeColorArray(int size){ + String[][] colors = new String[size][size]; + for(int i=0;i filteredData = getSolution(path, result); + String[][] ergebnis1 = getErgebnisArray(result, filteredData); + int count = 0; + for(int i=0;i madeMoves,String[][] data) throws FileNotFoundException{ + madeMoves.clear(); + for(int i = 0; i getSolution(String path, String[][] result) throws FileNotFoundException{ + Scanner sc = new Scanner(new File(path)); + ArrayList filteredData = new ArrayList<>(); + boolean isUnderComment = false; + while (sc.hasNextLine()) { + String line = sc.nextLine().trim(); + if (line.equals("//Lösung (schwarze Felder)")) { + isUnderComment = true; + continue; + } + if (isUnderComment && !line.isEmpty()) { + String[] lineArray = line.split(","); + int num1 = Integer.parseInt(lineArray[0]); + int num2 = Integer.parseInt(lineArray[1]); + String newNum1 = String.valueOf(num1-1); + String newNum2 = String.valueOf(num2-1); + String newLine = newNum1+","+newNum2; + filteredData.add(newLine); + } + } + sc.close(); + return filteredData; + } + + public static String[][] getErgebnisArray(String[][] result, ArrayList filteredData){ + String[][] ergebnis = new String[result.length][result.length]; + for(int i=0;i= 0 && row < ergebnis.length && col >= 0 && col < ergebnis[row].length) { + ergebnis[row][col] = "B"; + } + } + return ergebnis; + } + + public static void sortByTime(String path) throws FileNotFoundException, IOException{ + File file = new File(path); + ArrayList highscores = new ArrayList<>(); + + try (BufferedReader br = new BufferedReader(new FileReader(file))) { + String line; + while ((line = br.readLine()) != null) { + String[] parts = line.split(" ", 2); + String timeStr = parts[0]; + String name = parts.length > 1 ? parts[1] : ""; + + String[] timeParts = timeStr.split(":"); + int hour = Integer.parseInt(timeParts[0]); + int minute = Integer.parseInt(timeParts[1]); + LocalTime time = LocalTime.of(hour, minute); + + highscores.add(new HighscoreEintrag(time, name)); + } + } + + highscores.sort(Comparator.comparing(e -> e.time)); + + try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { + for (HighscoreEintrag e : highscores) { + String formattedTime = String.format("%02d:%02d", e.time.getHour(), e.time.getMinute()); + bw.write(formattedTime + " " + e.name); + bw.newLine(); + } + } + } + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + + } +} + +class HighscoreEintrag { + LocalTime time; + String name; + + HighscoreEintrag(LocalTime time, String name) { + this.time = time; + this.name = name; + } +} diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/LogHighscores.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/LogHighscores.java index 196e0f9..195db73 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/LogHighscores.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/domain/LogHighscores.java @@ -27,6 +27,9 @@ public class LogHighscores { } sc.close(); /* +======= + +>>>>>>> 15dab1e2b216c70c296840fbf16efc309c9504cf try (BufferedWriter writer = new BufferedWriter(new FileWriter(filepath, true))) { String eintrag = timePart + " " + username; logger.info("Neuer Eintrag: {}", eintrag); diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/GameGUI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/GameGUI.java index 57c48e2..540319c 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/GameGUI.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/GameGUI.java @@ -1,5 +1,9 @@ +<<<<<<< HEAD package de.hs_mannheim.informatik.mvn.gui; +======= +package de.hs_mannheim.informatik.mvn.gui; +>>>>>>> 15dab1e2b216c70c296840fbf16efc309c9504cf import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; @@ -19,8 +23,12 @@ import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingUtilities; +<<<<<<< HEAD import de.hs_mannheim.informatik.mvn.domain.HitoriMain; import de.hs_mannheim.informatik.mvn.domain.LogHighscores; +======= +import de.hs_mannheim.informatik.mvn.domain.*; +>>>>>>> 15dab1e2b216c70c296840fbf16efc309c9504cf public class GameGUI extends JFrame implements ActionListener { @@ -41,7 +49,7 @@ public class GameGUI extends JFrame implements ActionListener { b.setFocusPainted(false); b.setBackground(Color.WHITE); gameGrid.add(b); - String[] pos = HitoriMain.getCords(i,j); + String[] pos = HitoriMain2.getCords(i,j); b.addActionListener(e -> {paintButton(cl, main, b, pos, colors , madeMoves);}); } } @@ -58,7 +66,7 @@ public class GameGUI extends JFrame implements ActionListener { b1.addActionListener(e -> {backOneStep(cl, main, madeMoves, buttons, colors, gameGrid);}); JButton b2 = new JButton("Zurücksetzen"); b2.addActionListener(e -> {try { - HitoriMain.totalResetButton(cl, main, buttons, colors, madeMoves, data); + HitoriMain2.totalResetButton(cl, main, buttons, colors, madeMoves, data); } catch (FileNotFoundException e1) { e1.printStackTrace(); }}); @@ -71,7 +79,7 @@ public class GameGUI extends JFrame implements ActionListener { topGrid.add(timeLabel); topGrid.revalidate(); topGrid.repaint(); - boolean isOkay = HitoriMain.abgabeMöglich(path, data, colors); + boolean isOkay = HitoriMain2.abgabeMöglich(path, data, colors); levelFinished[0] = isOkay; Timer timer = new Timer(); startTimer(); @@ -96,7 +104,7 @@ public class GameGUI extends JFrame implements ActionListener { b3.addActionListener(e -> { try { - levelFinished[0] = HitoriMain.abgabeMöglich(path, data, colors); + levelFinished[0] = HitoriMain2.abgabeMöglich(path, data, colors); System.out.println("0000: " + levelFinished[0]); } catch (FileNotFoundException e1) { e1.printStackTrace(); diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/HighscoreGUI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/HighscoreGUI.java index 0d57ab7..7765dde 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/HighscoreGUI.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/HighscoreGUI.java @@ -1,4 +1,8 @@ +<<<<<<< HEAD package de.hs_mannheim.informatik.mvn.gui; +======= +package de.hs_mannheim.informatik.mvn.gui; +>>>>>>> 15dab1e2b216c70c296840fbf16efc309c9504cf import java.awt.BorderLayout; import java.awt.CardLayout; @@ -16,7 +20,11 @@ import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; +<<<<<<< HEAD import de.hs_mannheim.informatik.mvn.domain.HitoriMain; +======= +import de.hs_mannheim.informatik.mvn.domain.*; +>>>>>>> 15dab1e2b216c70c296840fbf16efc309c9504cf public class HighscoreGUI extends JFrame implements ActionListener { @@ -38,12 +46,12 @@ public class HighscoreGUI extends JFrame implements ActionListener { b0.addActionListener(e -> { int j = count[0]; String[] paths = { - "resources/Hitori_Highscores/Hitori4x4_leicht.txt", - "resources/Hitori_Highscores/Hitori5x5leicht.txt", - "resources/Hitori_Highscores/Hitori8x8leicht.txt", - "resources/Hitori_Highscores/Hitori8x8medium.txt", - "resources/Hitori_Highscores/Hitori10x10medium.txt", - "resources/Hitori_Highscores/Hitori15x15_medium.txt" + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori4x4_leicht.txt", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori5x5leicht.txt", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8leicht.txt", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8medium.txt", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori10x10medium.txt", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori15x15_medium.txt" }; try { showHighscores(cl, main, paths[j]); @@ -69,21 +77,22 @@ public class HighscoreGUI extends JFrame implements ActionListener { } public static void showHighscores(CardLayout cl, JPanel main, String path) throws FileNotFoundException, IOException{ - HitoriMain.sortByTime(path); + HitoriMain2.sortByTime(path); JPanel mainPanel = new JPanel(new BorderLayout()); File file = new File(path); int i = 0; try (Scanner scanner = new Scanner(file)) { while (scanner.hasNextLine()) { - scanner.nextLine(); + if(scanner.nextLine() != "") { i++; + } } } catch (FileNotFoundException e) { e.printStackTrace(); } JPanel highscorePanel = new JPanel(new GridLayout(i,1,10,10)); if(i>0){ - ArrayList lines = HitoriMain.readFromFile(path); + ArrayList lines = HitoriMain2.readFromFile(path); for(String s: lines){ JLabel text = new JLabel(s); highscorePanel.add(text); diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/MenuGUI.java b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/MenuGUI.java index fbd94bc..f814fb4 100644 --- a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/MenuGUI.java +++ b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/gui/MenuGUI.java @@ -1,4 +1,8 @@ +<<<<<<< HEAD package de.hs_mannheim.informatik.mvn.gui; +======= +package de.hs_mannheim.informatik.mvn.gui; +>>>>>>> 15dab1e2b216c70c296840fbf16efc309c9504cf import java.awt.BorderLayout; import java.awt.CardLayout; @@ -13,7 +17,11 @@ import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; +<<<<<<< HEAD import de.hs_mannheim.informatik.mvn.domain.HitoriMain; +======= +import de.hs_mannheim.informatik.mvn.domain.*; +>>>>>>> 15dab1e2b216c70c296840fbf16efc309c9504cf public class MenuGUI extends JFrame implements ActionListener { @@ -42,13 +50,16 @@ public class MenuGUI extends JFrame implements ActionListener { String currentDirectory = Paths.get("").toAbsolutePath().toString(); System.out.println("Current Working Directory: " + currentDirectory); String[] paths = { - "resources/Hitori_Spielfelder/Hitori4x4_leicht.csv", - "resources/Hitori_Spielfelder/Hitori5x5leicht.csv", - "resources/Hitori_Spielfelder/Hitori8x8leicht.csv", - "resources/Hitori_Spielfelder/Hitori8x8medium.csv", - "resources/Hitori_Spielfelder/Hitori10x10medium.csv", - "resources/Hitori_Spielfelder/Hitori15x15_medium.csv" + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Spielfelder/Hitori4x4_leicht.csv", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Spielfelder/Hitori5x5leicht.csv", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Spielfelder/Hitori8x8leicht.csv", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Spielfelder/Hitori8x8medium.csv", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Spielfelder/Hitori10x10medium.csv", + "src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Spielfelder/Hitori15x15_medium.csv" }; + // /Users/beratkocak/git/PR2Projekt/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn + + for (String path : paths) { File file = new File(path); if (file.exists()) { @@ -62,7 +73,7 @@ public class MenuGUI extends JFrame implements ActionListener { filepath[0] = paths[j]; filepath[1] = num[0]; try{ - HitoriMain.ablauf(cl, main, filepath); + HitoriMain2.ablauf(cl, main, filepath); } catch (FileNotFoundException s){ System.out.println("Fehler: " + s.getMessage()); } diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/.DS_Store b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/.DS_Store new file mode 100644 index 0000000..02cb564 Binary files /dev/null and b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/.DS_Store differ diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori10x10medium.txt b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori10x10medium.txt index 06d7405..8d758ca 100644 Binary files a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori10x10medium.txt and b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori10x10medium.txt differ diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8leicht.txt b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8leicht.txt index 06d7405..71e55d1 100644 Binary files a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8leicht.txt and b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8leicht.txt differ diff --git a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8medium.txt b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8medium.txt index 06d7405..8d758ca 100644 Binary files a/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8medium.txt and b/PR2Projekt/src/main/java/de/hs_mannheim/informatik/mvn/resources/Hitori_Highscores/Hitori8x8medium.txt differ diff --git a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/HitoriTest.java b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/HitoriTest.java index f8099f8..39f5249 100644 --- a/PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/HitoriTest.java +++ b/PR2Projekt/src/test/java/de/hs_mannheim/informatik/mvn/test/HitoriTest.java @@ -4,6 +4,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; +import de.hs_mannheim.informatik.mvn.domain.HitoriMain2; +import de.hs_mannheim.informatik.mvn.gui.GameGUI; + +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; import java.io.FileNotFoundException; import java.util.Arrays; @@ -21,7 +28,7 @@ class HitoriTest{ {"W", "W", "W"}, {"W", "W", "W"} }; - assertTrue(Arrays.deepEquals(array3x3, HitoriMain.makeColorArray(3))); + assertTrue(Arrays.deepEquals(array3x3, HitoriMain2.makeColorArray(3))); } @Test @@ -30,7 +37,7 @@ class HitoriTest{ {"W", "W", "W"}, {"W", "W", "W"}, }; - assertFalse(Arrays.deepEquals(array3x2, HitoriMain.makeColorArray(3))); + assertFalse(Arrays.deepEquals(array3x2, HitoriMain2.makeColorArray(3))); } @Test @@ -52,7 +59,7 @@ class HitoriTest{ {"B", "W", "W", "B"}}; String path = "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Highscores/Hitori4x4_leicht.txt"; try { - assertFalse(HitoriMain.abgabeMöglich(path, data, colors)); + assertFalse(HitoriMain2.abgabeMöglich(path, data, colors)); } catch (FileNotFoundException e) { e.printStackTrace(); } @@ -72,7 +79,7 @@ class HitoriTest{ {"B", "W", "W", "B"}}; String path = "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori4x4_leicht.csv"; try { - assertTrue(HitoriMain.abgabeMöglich(path, data, colors)); + assertTrue(HitoriMain2.abgabeMöglich(path, data, colors)); } catch (FileNotFoundException e) { e.printStackTrace(); } @@ -94,7 +101,7 @@ class HitoriTest{ {"W", "B", "W", "W", "W"}}; String path = "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori5x5_leicht.csv"; try { - assertFalse(HitoriMain.abgabeMöglich(path, data, colors)); + assertFalse(HitoriMain2.abgabeMöglich(path, data, colors)); } catch (FileNotFoundException e) { e.printStackTrace(); } @@ -116,7 +123,7 @@ class HitoriTest{ {"B", "W", "W", "W", "B"}}; String path = "C:/Users/Berat/Desktop/hitoriNew/src/main/java/de/hs_mannheim/informatik/mvn/Hitori_Spielfelder/Hitori5x5_leicht.csv"; try { - assertTrue(HitoriMain.abgabeMöglich(path, data, colors)); + assertTrue(HitoriMain2.abgabeMöglich(path, data, colors)); } catch (FileNotFoundException e) { e.printStackTrace(); } @@ -125,12 +132,12 @@ class HitoriTest{ @Test void test8() { String[] array = {"3", "4"}; - assertFalse(Arrays.deepEquals(array, HitoriMain.getCords(3, 3))); + assertFalse(Arrays.deepEquals(array, HitoriMain2.getCords(3, 3))); } @Test void test9() { String[] array = {"3", "4"}; - assertTrue(Arrays.deepEquals(array, HitoriMain.getCords(3, 4))); + assertTrue(Arrays.deepEquals(array, HitoriMain2.getCords(3, 4))); } }