diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java index 2514ead..27f3f04 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java @@ -7,6 +7,7 @@ import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.GhostPlayer; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.HumanNPC; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.HumanPlayer; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; +import ch.unibas.dmi.dbis.cs108.highscore.OgGhostHighScore; import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler; import ch.unibas.dmi.dbis.cs108.multiplayer.server.Lobby; import java.util.HashSet; @@ -64,6 +65,17 @@ public class Game implements Runnable { isOngoing = ongoing; } + Passenger getOgGhost(){ + int[] order = gameState.getTrain().getOrderOfTrain(); + Passenger[] passengerTrain = gameState.getPassengerTrain(); + for (int i = 0; i < 6; i++) { + if (passengerTrain[i].getIsOG()) { + return passengerTrain[i]; + } + } + return null; + } + /** * Starts a new game, creates a passenger array and saves it in gameState, sets the OG * currently at gameState.train[3] fills the passengerTrain moving from left to rigth in the @@ -121,6 +133,9 @@ public class Game implements Runnable { } if (gameOverCheck.equals(ClientGameInfoHandler.gameOverGhostsWin) || gameOverCheck.equals( ClientGameInfoHandler.gameOverHumansWin)) { + if (gameOverCheck.equals(ClientGameInfoHandler.gameOverGhostsWin) && getOgGhost().getIsPlayer()) { + OgGhostHighScore.addOgGhostWinner(getOgGhost().getName()); + } lobby.getAdmin().broadcastAnnouncementToLobby(gameOverCheck); lobby.removeGameFromRunningGames(this); lobby.addGameToFinishedGames(this); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/highscore/OgGhostHighScore.java b/src/main/java/ch/unibas/dmi/dbis/cs108/highscore/OgGhostHighScore.java index 6067fd5..9e31856 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/highscore/OgGhostHighScore.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/highscore/OgGhostHighScore.java @@ -93,7 +93,7 @@ public class OgGhostHighScore { public static void main(String[] args) { try { ogGhostWinners = new ArrayList<>(); - //if not already present, the following creates the file and enters the if statement. + //if not already present, the following creates the file. //if already present, it reads what's already in the file into the ogGhostWinners array. if (!ogGhostFile.createNewFile()) { BufferedReader buffreader = new BufferedReader(new FileReader(ogGhostFile)); @@ -103,17 +103,6 @@ public class OgGhostHighScore { line = buffreader.readLine(); } } - - /* - addOgGhostWinner("Seraina"); - ogGhostWinners.add("Jonas, the ultimate winner"); - - writeOgGhostWinnersToFile(); - System.out.println(formatGhostHighscoreList()); - */ - - - } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/MessageFormatter.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/MessageFormatter.java index 3c0c817..6cb6a15 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/MessageFormatter.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/MessageFormatter.java @@ -98,6 +98,9 @@ public class MessageFormatter { case "/s": stringBuilder.append(Protocol.startANewGame); break; + case "/h": + stringBuilder.append(Protocol.highScoreList); + break; default: s = msg; } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java index 809fc03..2fc4bad 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/Protocol.java @@ -138,6 +138,13 @@ public class Protocol { */ public static final String votedFor = "CVOTE"; + /** + * Client requests high score list. + */ + public static final String highScoreList = "HSCOR"; + + + //SERVER TO CLIENT COMMANDS diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java index 071d248..e5928c4 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java @@ -4,6 +4,7 @@ import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.gamelogic.Game; import ch.unibas.dmi.dbis.cs108.gamelogic.TrainOverflow; import ch.unibas.dmi.dbis.cs108.gamelogic.VoteHandler; +import ch.unibas.dmi.dbis.cs108.highscore.OgGhostHighScore; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.ServerPinger; @@ -594,4 +595,11 @@ public class ClientHandler implements Runnable { } + public void sendHighScoreList() { + String list = OgGhostHighScore.formatGhostHighscoreList(); + String[] listarray = list.split("\\R"); + for (String s: listarray) { + sendAnnouncementToClient(s); + } + } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java index 84e129b..c9029ba 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/JServerProtocolParser.java @@ -109,6 +109,9 @@ public class JServerProtocolParser { case Protocol.listGames: h.listGames(); break; + case Protocol.highScoreList: + h.sendHighScoreList(); + break; default: System.out.println("Received unknown command"); } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java index 1df003e..7f53f72 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/Server.java @@ -2,6 +2,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.server; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; +import ch.unibas.dmi.dbis.cs108.highscore.OgGhostHighScore; import java.io.*; import java.net.ServerSocket; import java.net.Socket; @@ -30,6 +31,7 @@ public class Server { public void startServer() { try { System.out.println("Port " + gamePort + " is open."); + OgGhostHighScore.main(null); while (!serverSocket.isClosed()) { Socket socket = serverSocket.accept(); ClientHandler nextClient = new ClientHandler(socket, socket.getInetAddress());