Compare commits

...

3 Commits

4 changed files with 42 additions and 11 deletions

View File

@ -2,3 +2,6 @@ Ioana,25,Hitori4x4_leicht.csv,0
test,22,Hitori4x4_leicht.csv,0 test,22,Hitori4x4_leicht.csv,0
Test2,72,Hitori5x5_leicht.csv,0 Test2,72,Hitori5x5_leicht.csv,0
Test3,100,Hitori8x8_medium.csv,0 Test3,100,Hitori8x8_medium.csv,0
Test4,200,Hitori15x15_medium.csv,10
IOANA VERSUCH 156,105,Hitori5x5_leicht.csv,0
IOANA VERSUCH 439,44,Hitori5x5_leicht.csv,0

View File

@ -1,8 +1,8 @@
package PR2.HitoriSpiel.Fassade; package PR2.HitoriSpiel.Fassade;
import PR2.HitoriSpiel.Domain.Action; import PR2.HitoriSpiel.Domain.Action;
import PR2.HitoriSpiel.Domain.HitoriValidator;
import PR2.HitoriSpiel.Domain.HitoriBoard; import PR2.HitoriSpiel.Domain.HitoriBoard;
import PR2.HitoriSpiel.Domain.HitoriValidator;
import PR2.HitoriSpiel.Domain.HitoriCell; import PR2.HitoriSpiel.Domain.HitoriCell;
import PR2.HitoriSpiel.GUI.PauseMenu; import PR2.HitoriSpiel.GUI.PauseMenu;
import PR2.HitoriSpiel.GUI.StartMenu; import PR2.HitoriSpiel.GUI.StartMenu;

View File

@ -1,9 +1,7 @@
package PR2.HitoriSpiel.Fassade; package PR2.HitoriSpiel.Fassade;
import java.io.*; import java.io.*;
import java.util.ArrayList; import java.util.*;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
public class HighscoreManager { public class HighscoreManager {
@ -96,6 +94,29 @@ public class HighscoreManager {
} }
} }
// Durchschnittszeit für jedes Spielfeld berechnen
public Map<String, Double> getAverageTimesByBoard() {
fileLock.lock();
try {
Map<String, List<Integer>> boardScores = new HashMap<>();
for (Highscore highscore : highscoreList) {
boardScores.computeIfAbsent(highscore.getBoardName(), k -> new ArrayList<>()).add(highscore.getScore());
}
Map<String, Double> averageTimes = new HashMap<>();
for (Map.Entry<String, List<Integer>> entry : boardScores.entrySet()) {
List<Integer> scores = entry.getValue();
double average = scores.stream().mapToInt(Integer::intValue).average().orElse(0.0);
averageTimes.put(entry.getKey(), average);
}
return averageTimes;
} finally {
fileLock.unlock();
}
}
// Highscores abrufen // Highscores abrufen
public List<Highscore> getHighscores() { public List<Highscore> getHighscores() {
return new ArrayList<>(highscoreList); // Modifizierbare Kopie zurückgeben return new ArrayList<>(highscoreList); // Modifizierbare Kopie zurückgeben
@ -142,6 +163,8 @@ public class HighscoreManager {
return errors; return errors;
} }
public int getScore() {return time;}
@Override @Override
public String toString() { public String toString() {
return playerName + "," + time + "," + boardName + "," + errors; return playerName + "," + time + "," + boardName + "," + errors;

View File

@ -7,6 +7,7 @@ import javax.swing.table.DefaultTableModel;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.util.List; import java.util.List;
import java.util.Map;
// aktueller Stand // aktueller Stand
public class HighscoreDialog extends JDialog { public class HighscoreDialog extends JDialog {
@ -19,7 +20,7 @@ public class HighscoreDialog extends JDialog {
super(parentFrame, "Highscoreliste", true); super(parentFrame, "Highscoreliste", true);
this.highscoreManager = new HighscoreManager(); this.highscoreManager = new HighscoreManager();
this.tableModel = new DefaultTableModel(new String[]{"Platz", "Name", "Zeit (Sek.)", "Fehler", "Spielfeld"}, 0); this.tableModel = new DefaultTableModel(new String[]{"Platz", "Name", "Zeit (Sek.)", "Fehler", "Spielfeld", "Durchschnittszeit"}, 0);
setLayout(new BorderLayout()); setLayout(new BorderLayout());
setSize(600, 400); setSize(600, 400);
@ -58,6 +59,7 @@ public class HighscoreDialog extends JDialog {
private void loadHighscoresForBoard(String boardName) { private void loadHighscoresForBoard(String boardName) {
tableModel.setRowCount(0); // Tabelle zurücksetzen tableModel.setRowCount(0); // Tabelle zurücksetzen
List<HighscoreManager.Highscore> highscores = highscoreManager.getHighscoresForBoard(boardName); List<HighscoreManager.Highscore> highscores = highscoreManager.getHighscoresForBoard(boardName);
Map<String, Double> averageTimes = highscoreManager.getAverageTimesByBoard();
if (highscores.isEmpty()) { if (highscores.isEmpty()) {
JOptionPane.showMessageDialog(this, JOptionPane.showMessageDialog(this,
@ -69,12 +71,15 @@ public class HighscoreDialog extends JDialog {
int rank = 1; int rank = 1;
for (HighscoreManager.Highscore highscore : highscores) { for (HighscoreManager.Highscore highscore : highscores) {
String bName = highscore.getBoardName().replaceAll("\\.csv$", ""); // .csv entfernen
double averageTime = averageTimes.getOrDefault(highscore.getBoardName(), 0.0);
tableModel.addRow(new Object[]{ tableModel.addRow(new Object[]{
rank++, // Platznummer rank++, // Platzierung
highscore.getPlayerName(), // Spielername highscore.getPlayerName(), // Name
highscore.getTime(), // Zeit in Sekunden highscore.getScore(), // Punkte
highscore.getErrors(), // Anzahl der Fehler highscore.getErrors(), //Errors
highscore.getBoardName() // Spielfeldname bName, // Spielfeld
String.format("%.2f", averageTime) // Durchschnittszeit
}); });
} }
} }