Berat Kocak 2024-12-26 12:05:55 +01:00
commit b2d94176da
14 changed files with 352 additions and 29 deletions

View File

@ -1,6 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21">
<!-- JRE System Library -->
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<!-- JUnit Library -->
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
<!-- Main Source Folder -->
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<!-- Test Source Folder -->
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<!-- Test Resources -->
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="test" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<!-- Maven Dependencies -->
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<!-- Output Folder -->
<classpathentry kind="output" path="target/classes"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
@ -32,4 +78,8 @@
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5"/>
<classpathentry kind="lib" path="src/main/java/de/hs_mannheim/informatik/mvn/domain/HitoriMain.java"/>
<classpathentry kind="output" path="bin"/>
</classpathentry>
</classpath>

View File

@ -61,7 +61,7 @@
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>src.main.java.de.hs_mannheim.informatik.mvn.domain.HitoriMain</mainClass>
<mainClass>src.main.java</mainClass>
</transformer>
</transformers>
</configuration>

View File

@ -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 = {"", ""};

View File

@ -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<String> 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<String> readFromFile(String path){
ArrayList<String> 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<size;i++){
for(int j=0;j<size;j++){
colors[i][j] = "W";
}
}
return colors;
}
public static JButton[][] makeButtonArray(String[][] data){
JButton[][] buttons = new JButton[data.length][data.length];
for(int i=0;i<data.length;i++){
for(int j=0;j<data.length;j++){
String number = data[i][j];
JButton b = new JButton(number);
buttons[i][j] = b;
}
}
return buttons;
}
public static boolean abgabeMöglich(String path, String[][] data, String[][] colors) throws FileNotFoundException{
boolean abgabeMöglich = false;
String[][] result = getResult(data, colors);
ArrayList<String> filteredData = getSolution(path, result);
String[][] ergebnis1 = getErgebnisArray(result, filteredData);
int count = 0;
for(int i=0;i<result.length;i++){
for(int j=0;j<result.length;j++){
if(result[i][j].equals(ergebnis1[i][j])){
} else {
count--;
}
}
}
if(count <0){
abgabeMöglich = false;
} else {
abgabeMöglich = true;
}
return abgabeMöglich;
}
public static String[] getCords(int i, int j){
String yKoordinate = String.valueOf(i);
String xKoordinate = String.valueOf(j);
String[] pos = {yKoordinate, xKoordinate};
return pos;
}
public static void totalResetButton(CardLayout cl, JPanel main, JButton[][] buttons, String[][] colors,Stack<String> madeMoves,String[][] data) throws FileNotFoundException{
madeMoves.clear();
for(int i = 0; i<data.length;i++){
for(int j = 0; j<data.length;j++){
colors[i][j] = "W";
buttons[i][j] = null;
}
JButton[][] buttons0 = makeButtonArray(data);
GameGUI.paintGame(cl, main, filepath, buttons0, colors, madeMoves, data);
}
}
public static String[][] getResult(String[][] data, String[][] colors){
String[][] result = new String[data.length][data.length];
for(int i=0;i<data.length;i++){
for(int j=0;j<data.length;j++){
String farben = colors[i][j];
String lastColor = String.valueOf(farben.charAt(farben.length() - 1));
if(lastColor.equals("G")){
lastColor = "W";
}
result[i][j] = lastColor;
}
}
return result;
}
public static ArrayList<String> getSolution(String path, String[][] result) throws FileNotFoundException{
Scanner sc = new Scanner(new File(path));
ArrayList<String> 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<String> filteredData){
String[][] ergebnis = new String[result.length][result.length];
for(int i=0;i<result.length;i++){
for(int j=0;j<result.length;j++){
ergebnis[i][j] = "W";
}
}
for (String index : filteredData) {
String[] parts = index.split(",");
int row = Integer.parseInt(parts[0].trim());
int col = Integer.parseInt(parts[1].trim());
if (row >= 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<HighscoreEintrag> 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;
}
}

View File

@ -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);

View File

@ -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();

View File

@ -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<String> lines = HitoriMain.readFromFile(path);
ArrayList<String> lines = HitoriMain2.readFromFile(path);
for(String s: lines){
JLabel text = new JLabel(s);
highscorePanel.add(text);

View File

@ -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());
}

View File

@ -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)));
}
}