From 27c31967e5ee8ced9048db98123d82f5663a75aa Mon Sep 17 00:00:00 2001 From: Seraina Date: Sun, 1 May 2022 03:05:32 +0200 Subject: [PATCH] The game is now playable wia the game gui, there are still some quirks to work out, especially timing wise and with the POSOF network message --- OgGhostWinners.txt | 1 + .../gamelogic/ClientGameInfoHandler.java | 4 +- .../unibas/dmi/dbis/cs108/gamelogic/Game.java | 14 ++- .../dmi/dbis/cs108/gamelogic/GameState.java | 2 + .../gamelogic/ServerGameInfoHandler.java | 20 ++-- .../dmi/dbis/cs108/gamelogic/Timer.java | 2 +- .../dmi/dbis/cs108/gamelogic/VoteHandler.java | 8 +- .../dbis/cs108/multiplayer/client/Client.java | 23 +++- .../client/JClientProtocolParser.java | 13 ++- .../client/gui/GameStateModel.java | 1 + .../client/gui/game/GameController.java | 101 ++++++++++++++++-- .../multiplayer/helpers/GuiParameters.java | 19 +++- .../client/gui/game/GameDayAll.fxml | 28 ++--- 13 files changed, 184 insertions(+), 52 deletions(-) diff --git a/OgGhostWinners.txt b/OgGhostWinners.txt index 914ddb5..50bb8fd 100644 --- a/OgGhostWinners.txt +++ b/OgGhostWinners.txt @@ -1,2 +1,3 @@ B serai +serai diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java index 0ed9285..b7717f0 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ClientGameInfoHandler.java @@ -17,8 +17,8 @@ public class ClientGameInfoHandler { public static final String ghostVoteRequest = "Vote on who to ghostify!"; public static final String humanVoteRequest = "Vote for a ghost to kick off!"; public static final String noiseNotification = "Someone passed by you "; - public static final String gameOverHumansWin = "Game over: humans win!"; - public static final String gameOverGhostsWin = "Game over: ghosts win!"; + public static final String gameOverHumansWin = "Game over, humans win!"; + public static final String gameOverGhostsWin = "Game over, ghosts win!"; //relevant for gui public static final String itsNightTime = "Please wait, ghosts are active"; 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 657a200..b5c9a17 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 @@ -95,7 +95,7 @@ public class Game implements Runnable { passenger.send(GuiParameters.updateGameState, getGame()); } try { - Thread.sleep(4000); //TODO: Is this a good intervall? + Thread.sleep(2000); //TODO: Is this a good intervall? } catch (InterruptedException e) { e.printStackTrace(); } @@ -148,19 +148,22 @@ public class Game implements Runnable { } LOGGER.info(gameState.toString()); gameStateModelUpdater(); //TODO: does that work? - + for(Passenger passenger : gameState.getPassengerTrain()) { + passenger.send(Protocol.positionOfClient + "$" + passenger.getPosition(), this); + } + lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.night + "$"); i = 0; while (isOngoing) {//game cycle TODO: maybe check that more often inside game loop?! if (!isDay) { LOGGER.info("NIGHT"); gameOverCheck = voteHandler.ghostVote(gameState.getPassengerTrain(), this); setDay(true); - lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + ClientGameInfoHandler.itsDayTime + "$"); + lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.day + "$"); } else { LOGGER.info("DAY"); gameOverCheck = voteHandler.humanVote(gameState.getPassengerTrain(), this); setDay(false); - lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + ClientGameInfoHandler.itsNightTime + "$"); + lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.night + "$"); } if (gameOverCheck.equals(ClientGameInfoHandler.gameOverGhostsWin) || gameOverCheck.equals( ClientGameInfoHandler.gameOverHumansWin)) { @@ -169,6 +172,9 @@ public class Game implements Runnable { } lobby.getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.viewChangeToLobby + "$"); lobby.getAdmin().broadcastAnnouncementToLobby(gameOverCheck); + isOngoing = false; + Timer.ghostAfterVoteTimer(); + isOngoing = true; lobby.removeGameFromRunningGames(this); lobby.addGameToFinishedGames(this); return; 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 1d0c725..f93005c 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 @@ -174,6 +174,7 @@ public class GameState { for (int i = 0; i < array.length; i++) { stringBuilder.append("$").append(print[i]); } + stringBuilder.append("$"); return stringBuilder.toString(); } @@ -194,6 +195,7 @@ public class GameState { for (int i = 0; i < array.length; i++) { stringBuilder.append("$").append(print[i]); } + stringBuilder.append("$"); 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 54eb4de..5337714 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 @@ -30,12 +30,10 @@ public class ServerGameInfoHandler { public static String format(String msg, Passenger passenger, Game game) { switch (msg) { case ClientGameInfoHandler.ghostVoteRequest: - msg = Protocol.serverRequestsGhostVote + "$" + passenger.getPosition() + "$" - + game.gameState.toString(); + msg = Protocol.serverRequestsGhostVote + "$" + passenger.getPosition() + "$"; break; case ClientGameInfoHandler.humanVoteRequest: - msg = Protocol.serverRequestsHumanVote + "$" + passenger.getPosition() + "$" - + game.gameState.humanToString(); + msg = Protocol.serverRequestsHumanVote + "$" + passenger.getPosition() + "$"; break; default: msg = Protocol.printToClientConsole + "$" + msg; @@ -56,11 +54,11 @@ public class ServerGameInfoHandler { switch (msg) { case ClientGameInfoHandler.ghostVoteRequest: case ClientGameInfoHandler.itsNightTime: - msg = Protocol.printToClientConsole + "$Ghosts are voting: " + game.gameState.toString(); + msg = Protocol.printToClientConsole + "$Ghosts are voting"; break; case ClientGameInfoHandler.humanVoteRequest: case ClientGameInfoHandler.itsDayTime: - msg = Protocol.printToClientConsole + "$Humans are voting:" + game.gameState.toString(); + msg = Protocol.printToClientConsole + "$Humans are voting"; break; case GuiParameters.updateGameState: msg = Protocol.printToGUI + "$" + GuiParameters.updateGameState + game.getGameState().toString(); @@ -114,9 +112,10 @@ public class ServerGameInfoHandler { case ClientGameInfoHandler.noiseNotification + 5 + " time(s)": String outMsg = npc.getName() + ": " + noiseRandomizer(); //TODO: add likelyhood + Timer.ghostAfterVoteTimer(); game.getLobby().getAdmin().broadcastNpcChatMessageToLobby(outMsg); - game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + GuiParameters.noiseHeardAtPosition - + "$" + npc.getPosition() + "$"); + game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.noiseHeardAtPosition + + "$" + npc.getPosition()); break; case ClientGameInfoHandler.ghostVoteRequest: npc.vote(game); @@ -138,9 +137,10 @@ public class ServerGameInfoHandler { case ClientGameInfoHandler.noiseNotification + 4 + " time(s)": case ClientGameInfoHandler.noiseNotification + 5 + " time(s)": String outMsg = npc.getName() + ": " + noiseRandomizer(); + Timer.ghostAfterVoteTimer(); game.getLobby().getAdmin().broadcastNpcChatMessageToLobby(outMsg); - game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + GuiParameters.noiseHeardAtPosition - + "$" + npc.getPosition() + "$"); + game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.noiseHeardAtPosition + + "$" + npc.getPosition()); break; case ClientGameInfoHandler.humanVoteRequest: npc.vote(game); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Timer.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Timer.java index e5eef8e..d52ec23 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Timer.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Timer.java @@ -22,7 +22,7 @@ public class Timer { * The length of time in seconds after the ghost vote during which the ghosts visually walk to / * from their victim and the timespan within which humans will hear a noise. After this, the day starts. */ - public static final int ghostAfterVoteTime = 7; + public static final int ghostAfterVoteTime = 4; /** * The maximum length of the human vote in the day, in seconds */ 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 377def6..07d3ce3 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 @@ -2,6 +2,8 @@ package ch.unibas.dmi.dbis.cs108.gamelogic; import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; +import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters; +import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -66,7 +68,7 @@ public class VoteHandler { } } LOGGER.info("Most votes for: " + newGhostPosition); - + Timer.ghostAfterVoteTimer(); for(Passenger passenger : passengers) { if(passenger.getIsGhost() || passenger.getIsSpectator()) { passenger.send(passengers[newGhostPosition].getName() + ClientGameInfoHandler.gotGhostyfied, game); @@ -85,7 +87,7 @@ public class VoteHandler { walk by is being updated. Finally, each passenger receives information about how often he heard something during this night. The player who's just been ghostified is ignored since he didn't participate in this night's ghostification. */ - + Timer.ghostAfterVoteTimer(); int[] noiseAmount = new int[6]; for (int i = 0; i < passengers.length; i++) { if (passengers[i].getIsGhost() && i != newGhostPosition) { @@ -152,6 +154,7 @@ public class VoteHandler { } Timer.humanVoteTimer(game); + game.getLobby().getAdmin().sendMsgToClientsInLobby(Protocol.printToGUI + "$" + GuiParameters.VoteIsOver + "$"); int currentMax = humanVoteEvaluation(passengers, votesForPlayers, game.getGameState().getClientVoteData(), game); @@ -170,6 +173,7 @@ public class VoteHandler { ClientGameInfoHandler.humansVotedFor + voteIndex + ClientGameInfoHandler.isAHuman, game); } } + Timer.ghostAfterVoteTimer(); if (passengers[voteIndex].getIsGhost()) { // if player is a ghost if (passengers[voteIndex].getIsOG()) { // if ghost is OG --> end game, humans win System.out.println(ClientGameInfoHandler.gameOverHumansWin); 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 27673fa..7a9b84a 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 @@ -14,6 +14,7 @@ import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.ClientPinger; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; +import com.google.inject.Guice; import java.net.InetAddress; import java.net.Socket; import java.io.*; @@ -329,13 +330,17 @@ public class Client { */ public void sendToGUI(String parameter, String data) { try { - LOGGER.debug("GUI: PARAMETER:" + parameter + ", DATA: " + data); + if(!parameter.equals(GuiParameters.updateGameState)) { + LOGGER.debug("GUI: PARAMETER:" + parameter + ", DATA: " + data); + } switch (parameter) { - case ClientGameInfoHandler.itsNightTime: //ClientGameInfoHandler + case GuiParameters.night: //ClientGameInfoHandler gameStateModel.setDayClone(false); + chatApp.getGameController().setNoiseButtonInvisible(); break; - case ClientGameInfoHandler.itsDayTime: //ClientGameInfoHandler + case GuiParameters.day: //ClientGameInfoHandler gameStateModel.setDayClone(true); + chatApp.getGameController().setNoiseButtonVisible(); break; case GuiParameters.updateGameState: gameStateModel.setGSFromString(data); @@ -353,6 +358,9 @@ public class Client { //updateListOfLobbies(data); (commented out due to compiling error) //TODO break; + case GuiParameters.VoteIsOver: + chatApp.getGameController().clearAllNoiseDisplay(); + break; case GuiParameters.listOfPLayers: updateListOfClients(data); //TODO @@ -407,7 +415,7 @@ public class Client { new Thread(() -> { try { chatApp.getGameController().addMessageToNotificationText(data); - Thread.sleep(3000); + Thread.sleep(5000); chatApp.getGameController().clearNotificationText(); } catch (InterruptedException e) { LOGGER.warn(e.getMessage()); @@ -417,19 +425,26 @@ public class Client { } public void determineNoiseDisplay(int position) { + LOGGER.debug(position); switch (position) { case 0: chatApp.getGameController().noiseDisplay0(); + break; case 1: chatApp.getGameController().noiseDisplay1(); + break; case 2: chatApp.getGameController().noiseDisplay2(); + break; case 3: chatApp.getGameController().noiseDisplay3(); + break; case 4: chatApp.getGameController().noiseDisplay4(); + break; case 5: chatApp.getGameController().noiseDisplay5(); + break; } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java index 58d8b98..275db4e 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/JClientProtocolParser.java @@ -40,6 +40,9 @@ public class JClientProtocolParser { break; case Protocol.printToClientConsole: System.out.println(msg.substring(6)); + if (!msg.substring(6).equals("Your vote was invalid")) { + c.notificationTextDisplay(msg.substring(6)); + } break; case Protocol.printToClientChat: //todo: handle chat separately from console. @@ -74,9 +77,13 @@ public class JClientProtocolParser { c.sendToGUI(parameter,data); break; case Protocol.positionOfClient: - int position = Integer.parseInt(msg.substring(6)); - GameController.getClient().getClient().setPosition(position); - default: + try { + int position = Integer.parseInt(msg.substring(6)); + GameController.getClient().getClient().setPosition(position); + } catch (Exception e) { + LOGGER.warn(msg.substring(6)); + } + default: System.out.println("Received unknown command"); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java index 5a4a594..164419e 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/GameStateModel.java @@ -117,6 +117,7 @@ public class GameStateModel { j = right.indexOf(':'); roles[i] = right.substring(0, j); kickedOff[i] = Boolean.parseBoolean(right.substring(j + 1)); + LOGGER.info(kickedOff[i]); i++; } setPassengerTrainClone(names, roles); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java index 2a72312..22f5a5c 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameController.java @@ -181,6 +181,14 @@ public class GameController implements Initializable{ + client.getClient().getPosition()); //TODO: Test!! } + public void setNoiseButtonInvisible() { + noiseButton.setVisible(false); + } + + public void setNoiseButtonVisible() { + noiseButton.setVisible(true); + } + /** * Takes a given message and displays it in the notificationText Flow in the game Scene * @param msg the message to be displayed @@ -197,7 +205,6 @@ public class GameController implements Initializable{ notificationText.getChildren().add(notification); } catch (Exception e) { LOGGER.debug(e.getMessage()); - e.printStackTrace(); } } }); @@ -214,7 +221,7 @@ public class GameController implements Initializable{ @Override public void run() { try { - notificationText.getChildren().clear(); + notificationText.getChildren().remove(0); } catch (Exception e) { LOGGER.debug("Not yet initialized"); } @@ -230,18 +237,73 @@ public class GameController implements Initializable{ LOGGER.debug("roomlables update"); String[] names = gameStateModel.getPassengerTrainClone()[0]; String[] roles = gameStateModel.getPassengerTrainClone()[1]; + boolean[] kickedOff = gameStateModel.getKickedOff(); Text name0 = new Text(names[0]); + name0.setStyle("-fx-font: 25 arial;"); + name0.setFill(Color.WHITE); Text name1 = new Text(names[1]); + name1.setStyle("-fx-font: 25 arial;"); + name1.setFill(Color.WHITE); Text name2 = new Text(names[2]); + name2.setStyle("-fx-font: 25 arial;"); + name2.setFill(Color.WHITE); Text name3 = new Text(names[3]); + name3.setStyle("-fx-font: 25 arial;"); + name3.setFill(Color.WHITE); Text name4 = new Text(names[4]); + name4.setStyle("-fx-font: 25 arial;"); + name4.setFill(Color.WHITE); Text name5 = new Text(names[5]); - Text role0 = new Text(roles[0]); - Text role1 = new Text(roles[1]); - Text role2 = new Text(roles[2]); - Text role3 = new Text(roles[3]); - Text role4 = new Text(roles[4]); - Text role5 = new Text(roles[5]); + name5.setStyle("-fx-font: 25 arial;"); + name5.setFill(Color.WHITE); + Text role0; + if(kickedOff[0]) { + role0 = new Text("\nkicked off"); + } else { + role0 = new Text("\n" + roles[0]); + } + role0.setStyle("-fx-font: 25 arial;"); + role0.setFill(Color.WHITE); + Text role1; + if(kickedOff[1]) { + role1 = new Text("\nkicked off"); + } else { + role1 = new Text("\n" + roles[0]); + } + role1.setStyle("-fx-font: 25 arial;"); + role1.setFill(Color.WHITE); + Text role2; + if(kickedOff[2]) { + role2 = new Text("\nkicked off"); + } else { + role2 = new Text("\n" + roles[0]); + } + role2.setStyle("-fx-font: 25 arial;"); + role2.setFill(Color.WHITE); + Text role3; + if(kickedOff[3]) { + role3 = new Text("\nkicked off"); + } else { + role3 = new Text("\n" + roles[0]); + } + role3.setStyle("-fx-font: 25 arial;"); + role3.setFill(Color.WHITE); + Text role4; + if(kickedOff[4]) { + role4 = new Text("\nkicked off"); + } else { + role4 = new Text("\n" + roles[0]); + } + role4.setStyle("-fx-font: 25 arial;"); + role4.setFill(Color.WHITE); + Text role5; + if(kickedOff[5]) { + role5 = new Text("\nkicked off"); + } else { + role5 = new Text("\n" + roles[0]); + } + role5.setStyle("-fx-font: 25 arial;"); + role5.setFill(Color.WHITE); Platform.runLater(new Runnable(){ @Override @@ -368,7 +430,7 @@ public class GameController implements Initializable{ /** * Adds an image of a bell on top of button5 */ - public void noiseDisplay5(){ + public void noiseDisplay5() { LOGGER.debug("noise5 called"); Platform.runLater(new Runnable(){ @Override @@ -382,6 +444,27 @@ public class GameController implements Initializable{ }); } + /** + * Clears all bells from the view + */ + public void clearAllNoiseDisplay() { + Platform.runLater(new Runnable(){ + @Override + public void run() { + try { + noiseImage0.setImage(null); + noiseImage1.setImage(null); + noiseImage2.setImage(null); + noiseImage3.setImage(null); + noiseImage4.setImage(null); + noiseImage5.setImage(null); + } catch (Exception e) { + LOGGER.debug(e.getMessage()); + } + } + }); + } + public void setGameStateModel( GameStateModel gameStateModel) { GameController.gameStateModel = gameStateModel; diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/GuiParameters.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/GuiParameters.java index 5af59de..4bbba46 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/GuiParameters.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/helpers/GuiParameters.java @@ -40,11 +40,24 @@ public class GuiParameters { */ public static final String viewChangeToGame = "VCGAME"; - - /** * Tells, Gui, who the members of a specified Lobby are. * Form: {@code LMEMBS$$$..} */ - public static String changeToLobby = "LMEMBS"; + public static final String changeToLobby = "LMEMBS"; + + /** + * Informs the GUI, that a vote is over + */ + public static final String VoteIsOver = "VOTEOVER"; + + /** + * Informes Gui, that its the night + */ + public static final String night = "NIGHT"; + /** + * Informes Gui, that its the day + */ + public static final String day = "DAY"; + } diff --git a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml index 0862993..8c6467c 100644 --- a/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml +++ b/src/main/resources/ch/unibas/dmi/dbis/cs108/multiplayer/client/gui/game/GameDayAll.fxml @@ -13,14 +13,14 @@ - + - - - - - - + + + + + + - + - - - - - - + + + + + +