Compare commits
3 Commits
2122bfc521
...
ffbd2dab10
Author | SHA1 | Date |
---|---|---|
|
ffbd2dab10 | |
|
d88e35b4e2 | |
|
a4ce98a837 |
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue