From cf68619531c1a1a123d9d7723263bf3b706d70e5 Mon Sep 17 00:00:00 2001 From: toksikk Date: Thu, 27 Nov 2014 09:19:36 +0100 Subject: [PATCH] Highscores sind jetzt verfuegbar und koennen am Rundenende veraendert werden. Serialisierung funktioniert auch schon. --- .../de/heatup/highscore/HighscoreHandler.java | 129 +++++++++++++++++- .../{MapHighscore.java => MapHighscores.java} | 18 +-- .../highscore/{Score.java => ScoreEntry.java} | 6 +- HeatUp/src/de/heatup/mapengine/MapEngine.java | 13 +- HeatUp/src/de/heatup/ui/Main.java | 2 +- HeatUp/src/de/heatup/ui/PanelBuilder.java | 18 ++- 6 files changed, 167 insertions(+), 19 deletions(-) rename HeatUp/src/de/heatup/highscore/{MapHighscore.java => MapHighscores.java} (54%) rename HeatUp/src/de/heatup/highscore/{Score.java => ScoreEntry.java} (79%) diff --git a/HeatUp/src/de/heatup/highscore/HighscoreHandler.java b/HeatUp/src/de/heatup/highscore/HighscoreHandler.java index 03b03ba..4373422 100644 --- a/HeatUp/src/de/heatup/highscore/HighscoreHandler.java +++ b/HeatUp/src/de/heatup/highscore/HighscoreHandler.java @@ -1,16 +1,143 @@ package de.heatup.highscore; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; + +import com.sun.org.apache.xml.internal.serializer.SerializationHandler; + import de.heatup.cfg.Config; import de.heatup.logging.Logger; public class HighscoreHandler { private int mapHash; + private MapHighscores mapHighscores; /** * Es muss vorher eine Karte geladen sein */ public HighscoreHandler(String mapString) { mapHash = mapString.hashCode(); - // load file for serialization + + try { + FileInputStream fileIn = new FileInputStream("highscore.dat"); + ObjectInputStream in = new ObjectInputStream(fileIn); + mapHighscores = (MapHighscores) in.readObject(); + in.close(); + fileIn.close(); + Logger.write("loaded highscore.dat"); + } catch (FileNotFoundException fe) { + mapHighscores = new MapHighscores(); + FileOutputStream fileOut = null; + try { + fileOut = new FileOutputStream("highscore.dat"); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + ObjectOutputStream out = null; + try { + out = new ObjectOutputStream(fileOut); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + out.writeObject(mapHighscores); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + out.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + fileOut.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + Logger.write("created new highscore.dat"); + + + + FileInputStream fileIn = null; + try { + fileIn = new FileInputStream("highscore.dat"); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + ObjectInputStream in = null; + try { + in = new ObjectInputStream(fileIn); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + mapHighscores = (MapHighscores) in.readObject(); + } catch (ClassNotFoundException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + try { + in.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + fileIn.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + Logger.write("loaded highscore.dat"); + } catch (IOException e) { + + e.printStackTrace(); + return; + } catch (ClassNotFoundException ce) { + Logger.write("MapHighscore class not found"); + ce.printStackTrace(); + return; + } + + + } + public int getCurrentMapHash() { + return mapHash; + } + public void setHighscore(int mapHash, String name, int score) { + mapHighscores.setHighscore(mapHash, name, score); + } + public ArrayList getHighscores(int mapHash) { + return mapHighscores.getHighscores(mapHash); + } + public boolean saveHighscores() { + try { + FileOutputStream fileOut = new FileOutputStream("highscore.dat"); + ObjectOutputStream out = new ObjectOutputStream(fileOut); + out.writeObject(mapHighscores); + out.close(); + fileOut.close(); + Logger.write("saved highscore.dat"); + return true; + } catch (IOException e) { + e.printStackTrace(); + Logger.write("error saving highscore.dat"); + return false; + } } } diff --git a/HeatUp/src/de/heatup/highscore/MapHighscore.java b/HeatUp/src/de/heatup/highscore/MapHighscores.java similarity index 54% rename from HeatUp/src/de/heatup/highscore/MapHighscore.java rename to HeatUp/src/de/heatup/highscore/MapHighscores.java index 7630240..27c66ba 100644 --- a/HeatUp/src/de/heatup/highscore/MapHighscore.java +++ b/HeatUp/src/de/heatup/highscore/MapHighscores.java @@ -5,28 +5,28 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -public class MapHighscore implements Serializable { +public class MapHighscores implements Serializable { private static final long serialVersionUID = 1L; - private Map> highscoreOfAllMaps = new HashMap>(); + private Map> highscoreOfAllMaps = new HashMap>(); - public ArrayList getHighscores(int mapHash) { + protected ArrayList getHighscores(int mapHash) { if (highscoreOfAllMaps.get(mapHash) == null) { - ArrayList mapHighscores = new ArrayList(); + ArrayList mapHighscores = new ArrayList(); for (int n = 0; n<10; n++) { - mapHighscores.add(new Score()); + mapHighscores.add(new ScoreEntry()); } highscoreOfAllMaps.put(mapHash, mapHighscores); } return highscoreOfAllMaps.get(mapHash); } - public void setHighscore(int mapHash, String name, int score) { + protected void setHighscore(int mapHash, String name, int score) { - ArrayList mapHighscores = highscoreOfAllMaps.get(mapHash); + ArrayList mapHighscores = highscoreOfAllMaps.get(mapHash); - ArrayList newMapHighscores = new ArrayList(); + ArrayList newMapHighscores = new ArrayList(); int i = 0; @@ -35,7 +35,7 @@ public class MapHighscore implements Serializable { if (mapHighscores.get(i).getScore() > score) { newMapHighscores.add(mapHighscores.get(i)); } else { - newMapHighscores.add(new Score(name, score)); + newMapHighscores.add(new ScoreEntry(name, score)); break; } diff --git a/HeatUp/src/de/heatup/highscore/Score.java b/HeatUp/src/de/heatup/highscore/ScoreEntry.java similarity index 79% rename from HeatUp/src/de/heatup/highscore/Score.java rename to HeatUp/src/de/heatup/highscore/ScoreEntry.java index 6b5fef6..9cf08ff 100644 --- a/HeatUp/src/de/heatup/highscore/Score.java +++ b/HeatUp/src/de/heatup/highscore/ScoreEntry.java @@ -2,19 +2,19 @@ package de.heatup.highscore; import java.io.Serializable; -public class Score implements Serializable { +public class ScoreEntry implements Serializable { private static final long serialVersionUID = 1L; private String name; private int score; - public Score() { + public ScoreEntry() { name = "default"; score = 2342; } - public Score(String name, int score) { + public ScoreEntry(String name, int score) { this.name = name; this.score = score; } diff --git a/HeatUp/src/de/heatup/mapengine/MapEngine.java b/HeatUp/src/de/heatup/mapengine/MapEngine.java index 850c9e0..6b7d04f 100644 --- a/HeatUp/src/de/heatup/mapengine/MapEngine.java +++ b/HeatUp/src/de/heatup/mapengine/MapEngine.java @@ -34,7 +34,7 @@ public class MapEngine { private static String mapString = ""; - private final HighscoreHandler mapHighscore; + private HighscoreHandler highscoreHandler; HashMap> allMapTiles = new HashMap>(); ArrayList availableHardwareTileTypes = new ArrayList(); @@ -46,9 +46,8 @@ public class MapEngine { Scanner input = null; MapLoader ml = new MapLoader(); input = new Scanner(ml.loadMap(mapNumber)); - this.createTiles(input); - mapHighscore = new HighscoreHandler(mapString); + highscoreHandler = new HighscoreHandler(mapString); } /** * Öffnet einen File Chooser um eine Custom Map auszuwählen, welche anschließend geladen wird. @@ -63,7 +62,10 @@ public class MapEngine { e.printStackTrace(); } this.createTiles(input); - mapHighscore = new HighscoreHandler(mapString); + highscoreHandler = new HighscoreHandler(mapString); + } + public HighscoreHandler getHighscoreHandler() { + return highscoreHandler; } /** * Erstellt aus einem gegebenen Scanner, welche eine Datei einliest, @@ -260,4 +262,7 @@ public class MapEngine { gamePanel.add(currentStaticObject); } } + public int getMapHash() { + return highscoreHandler.getCurrentMapHash(); + } } diff --git a/HeatUp/src/de/heatup/ui/Main.java b/HeatUp/src/de/heatup/ui/Main.java index b567ec0..c912901 100644 --- a/HeatUp/src/de/heatup/ui/Main.java +++ b/HeatUp/src/de/heatup/ui/Main.java @@ -32,7 +32,7 @@ public class Main extends JFrame implements Runnable { private boolean running = false; private static boolean pause = false; - private boolean fullscreen = true; + private boolean fullscreen = false; private Thread thread; diff --git a/HeatUp/src/de/heatup/ui/PanelBuilder.java b/HeatUp/src/de/heatup/ui/PanelBuilder.java index 8dc0262..966b70c 100644 --- a/HeatUp/src/de/heatup/ui/PanelBuilder.java +++ b/HeatUp/src/de/heatup/ui/PanelBuilder.java @@ -4,6 +4,8 @@ import java.awt.Point; import javax.swing.JPanel; +import de.heatup.highscore.ScoreEntry; +import de.heatup.logging.Logger; import de.heatup.mapengine.MapEngine; import de.heatup.mapengine.SpawnAssistant; import de.heatup.objects.ImageLoader; @@ -85,7 +87,21 @@ public class PanelBuilder { me = new MapEngine(); } me.addAllToPanel(gamePanel); - + + /** + * Highscore tests + */ + +// for (ScoreEntry score : me.getHighscoreHandler().getHighscores(me.getMapHash())) { +// Logger.write(score.getName()+" "+score.getScore()); +// } +// me.getHighscoreHandler().setHighscore(me.getMapHash(), "Daniel", 3134); +// me.getHighscoreHandler().saveHighscores(); + + /** + * Ende Highscore tests + */ + for (Player movingObject : instancedObjects.getObjects()) { Point spawnPoint = SpawnAssistant.getPathLocationOnGrid();