From ce3fa4dde11e86334979f7f6ebe2a9d5b1f558e6 Mon Sep 17 00:00:00 2001 From: Seraina Date: Fri, 8 Apr 2022 23:23:31 +0200 Subject: [PATCH] A very basic command now starts a game in the JServerProtocolParser (needs to bee relocated and but does the job for now) The game runs, now the Clients need to be able to give inputs (so it ends at some point) --- .../unibas/dmi/dbis/cs108/gamelogic/Game.java | 37 ++++++++----------- .../dmi/dbis/cs108/gamelogic/GameState.java | 31 ++++++++++++++++ .../gamelogic/ServerGameInfoHandler.java | 10 +---- .../dmi/dbis/cs108/gamelogic/VoteHandler.java | 5 ++- .../gamelogic/klassenstruktur/GhostNPC.java | 4 +- .../klassenstruktur/GhostPlayer.java | 2 +- .../klassenstruktur/HumanPlayer.java | 2 +- .../gamelogic/klassenstruktur/Passenger.java | 2 +- .../dbis/cs108/multiplayer/client/Client.java | 9 +++++ .../server/JServerProtocolParser.java | 6 ++- 10 files changed, 70 insertions(+), 38 deletions(-) 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 e3de4b7..3702db6 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 @@ -11,19 +11,20 @@ import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler; import java.util.HashSet; import org.apache.logging.log4j.*; -public class Game { +public class Game implements Runnable { public static final Logger LOGGER = LogManager.getLogger(); public static final BudaLogConfig l = new BudaLogConfig(LOGGER); /** * Can be extended for optional Game-settings **/ - protected int nrOfPlayers; //sets the length of the train - protected int nrOfGhosts; // sets how many Ghosts we start witch + protected final int nrOfPlayers; //sets the length of the train + protected final int nrOfGhosts; // sets how many Ghosts we start witch protected int nrOfUsers; // safes how many clients are active in this Game protected GameState gameState; - protected boolean isDay; //false means it is night, it is night by default - protected VoteHandler voteHandler; + protected boolean isDay = false; //false means it is night, it is night by default + protected VoteHandler voteHandler = new VoteHandler(); + private ClientHandler clientHandler; //TODO: Figure out where Day/Night game state is saved maybe think about a game state class or smt. /** * Constructs a Game instance where: @@ -32,12 +33,13 @@ public class Game { * @param nrOfGhosts is the number of OG Ghosts you want to start with and * @param nrOfUsers is the number of active users at the time (non NPCs) */ - public Game(int nrOfPlayers, int nrOfGhosts, int nrOfUsers) + public Game(ClientHandler clientHandler, int nrOfPlayers, int nrOfGhosts, int nrOfUsers) throws TrainOverflow { //ToDo: Who handles Exception how and where this.nrOfPlayers = nrOfPlayers; this.nrOfGhosts = nrOfGhosts; this.nrOfUsers = nrOfUsers; this.gameState = new GameState(nrOfPlayers, nrOfGhosts, nrOfUsers); + this.clientHandler = clientHandler; } public GameState getGameState() { @@ -60,7 +62,9 @@ public class Game { isDay = day; } - public void run(ClientHandler clientHandler) { + @Override + public void run() { + LOGGER.info("the run-method has been called"); int i = 0; HashSet clients = ClientHandler.getConnectedClients(); String gameOverCheck = ""; @@ -68,6 +72,7 @@ public class Game { Passenger[] passengerTrain = gameState.getPassengerTrain(); + LOGGER.info(gameState.toString()); for (ClientHandler client : clients) { int index = order[i]; if (passengerTrain[index].getIsGhost()) { //if there is a ghost @@ -93,6 +98,7 @@ public class Game { } i++; } + LOGGER.info(gameState.toString()); i = 0; while (true) { //ToDo: was ist die Abbruchbedingung? VoteHandler muss das schicken. @@ -111,18 +117,7 @@ public class Game { } - public static void main(String[] args) { - - try { - - Game game1 = new Game(6, 1, 1); - - - } catch (TrainOverflow e) { - System.out.println(e.getMessage()); - } - - } - - } + + + diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java index cd69c3f..70e00e1 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java @@ -44,6 +44,7 @@ public class GameState { if (i == 3) { Ghost g = new Ghost(); g.setPosition(train.orderOfTrain[i]); + g.setGhost(); g.setIsOG(true); passengerTrain[train.orderOfTrain[i]] = g; } else { @@ -74,4 +75,34 @@ public class GameState { } + public String toString() { + Passenger[] array = passengerTrain; + StringBuilder stringBuilder = new StringBuilder(); + String[] print = new String[6]; + for (int i = 0; i < array.length; i++) { + if (array[i].getKickedOff()) { + print[i] = "| kicked off " + array[i].getPosition() + "|"; + } else { + if (array[i].getIsPlayer()) { + if (array[i].getIsGhost()) { + print[i] = "| ghostPlayer " + array[i].getPosition() + "|"; + } else { + print[i] = "| humanPlayer " + array[i].getPosition() + "|"; + } + } else { + if (array[i].getIsGhost()) { + print[i] = "| ghostNPC " + array[i].getPosition() + "|"; + } else { + print[i] = "| humanNPC " + array[i].getPosition() + "|"; + } + } + } + } + + for (int i = 0; i < array.length; i++) { + stringBuilder.append(print[i]); + } + return stringBuilder.toString(); + } + } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java index f5a104e..3613ce6 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java @@ -25,10 +25,10 @@ public class ServerGameInfoHandler { * @param msg the message to be formatted * @return a message in a protocol format */ - public static String format(String msg) { + public static String format(String msg, Game game) { switch (msg) { case "Vote on who to ghostify!": - msg = Protocol.serverRequestsGhostVote; + msg = Protocol.serverRequestsGhostVote + "$" + game.gameState.toString(); break; case "Vote for a ghost to kick off!": msg = Protocol.serverRequestsHumanVote; @@ -65,10 +65,4 @@ public class ServerGameInfoHandler { } - - public static void main(String[] args) { - ServerGameInfoHandler s = new ServerGameInfoHandler(); - s.format("jhbvdwfzu"); - } - } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java index f96132f..7be4084 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java @@ -32,6 +32,7 @@ public class VoteHandler { * @param passengers: passengers on the train */ public void ghostVote(Passenger[] passengers, Game game) { + LOGGER.debug("ghostVote has been called"); // array to collect votes for all players during voting, i.e. votes for player 1 (passengers[0]) // are saved in @@ -220,7 +221,7 @@ public class VoteHandler { } - public static void main(String[] args) { + /*public static void main(String[] args) { try { Game game = new Game(6,1, 6); VoteHandler voteHandler = new VoteHandler(); @@ -253,5 +254,5 @@ public class VoteHandler { - } + }*/ } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java index a201d4a..78e2cd8 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java @@ -68,7 +68,7 @@ public class GhostNPC extends Ghost { clientHandler.broadcastChatMessage("I heard some noise tonight"); } - public static void main(String[] args) { + /*public static void main(String[] args) { try { Game game = new Game(6,1,1); @@ -80,5 +80,5 @@ public class GhostNPC extends Ghost { LOGGER.warn(e.getMessage()); } - } + }*/ } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostPlayer.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostPlayer.java index d197ca0..450961d 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostPlayer.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostPlayer.java @@ -35,7 +35,7 @@ public class GhostPlayer extends Ghost { @Override public void send(String msg, Game game) { - String formattedMsg = ServerGameInfoHandler.format(msg); + String formattedMsg = ServerGameInfoHandler.format(msg, game); clientHandler.sendMsgToClient(formattedMsg); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/HumanPlayer.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/HumanPlayer.java index 8b16cb0..54bce95 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/HumanPlayer.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/HumanPlayer.java @@ -32,7 +32,7 @@ public class HumanPlayer extends Human { @Override public void send(String msg, Game game) { - String formattedMsg = ServerGameInfoHandler.format(msg); + String formattedMsg = ServerGameInfoHandler.format(msg, game); clientHandler.sendMsgToClient(formattedMsg); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Passenger.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Passenger.java index c7e6573..7ccfdec 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Passenger.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/Passenger.java @@ -31,7 +31,7 @@ public class Passenger { String formattedMsg = ServerGameInfoHandler.format(msg); clientHandler.sendMsgToClient(formattedMsg); } - LOGGER.warn("This object should not just be a passenger"); + LOGGER.warn("This object should not just be a passenger. Position:" + position); } /** diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java index 122c17a..e809771 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/Client.java @@ -72,6 +72,15 @@ public class Client { }).start(); } + /** + * Tells user to enter a position to vote for passenger at that position + */ + + public void voteGetter() { + //TODO(Seraina): implement + + } + /** * Starts a thread which listens for incoming chat messages / other messages that the user 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 d5d4309..7fefb40 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 @@ -71,8 +71,10 @@ public class JServerProtocolParser { break; case Protocol.startANewGame: try { - Game game = new Game(6,1, h.getConnectedClients().size()); - game.run(h); + + Game game = new Game(h,6,1, ClientHandler.getConnectedClients().size()); + Thread t = new Thread(game); + game.run(); } catch (TrainOverflow e) { LOGGER.warn(e.getMessage()); }