diff --git a/app/src/main/java/gui/menu/MultiPlayerDokuView.java b/app/src/main/java/gui/menu/MultiPlayerDokuView.java index 2721f49..2c68cfe 100644 --- a/app/src/main/java/gui/menu/MultiPlayerDokuView.java +++ b/app/src/main/java/gui/menu/MultiPlayerDokuView.java @@ -1,6 +1,7 @@ package gui.menu; -import gui.SudokuRenderer; +import gui.widget.LeaderboardRenderer; +import gui.widget.SudokuRenderer; import imgui.ImGui; import network.client.Client; import network.server.Server; @@ -11,12 +12,14 @@ public class MultiPlayerDokuView extends BaseView{ private final Client client; private final Server server; private final SudokuRenderer sudokuRenderer; + private final LeaderboardRenderer leaderboardRenderer; public MultiPlayerDokuView(StateMachine stateMachine, Client client, Server server) { super(stateMachine); this.client = client; this.server = server; this.sudokuRenderer = new SudokuRenderer(this.client.getGame().getDoku()); + this.leaderboardRenderer = new LeaderboardRenderer(client.getGame(), client.getPlayer()); this.sudokuRenderer.onCellChange.connect(this::onCellChange); this.client.onDisconnect.connect(this::onDisconnect); } @@ -33,6 +36,7 @@ public class MultiPlayerDokuView extends BaseView{ @Override public void render() { + this.leaderboardRenderer.render(); this.sudokuRenderer.render(); if (ImGui.button("Quitter")) { this.client.stop(); diff --git a/app/src/main/java/gui/menu/MultiPlayerView.java b/app/src/main/java/gui/menu/MultiPlayerView.java index 0a373e5..9f45944 100644 --- a/app/src/main/java/gui/menu/MultiPlayerView.java +++ b/app/src/main/java/gui/menu/MultiPlayerView.java @@ -1,7 +1,7 @@ package gui.menu; import game.Player; -import gui.SudokuSelector; +import gui.widget.SudokuSelector; import imgui.ImGui; import network.client.Client; import network.server.Server; diff --git a/app/src/main/java/gui/menu/SoloMenu.java b/app/src/main/java/gui/menu/SoloMenu.java index 1d50124..d823671 100644 --- a/app/src/main/java/gui/menu/SoloMenu.java +++ b/app/src/main/java/gui/menu/SoloMenu.java @@ -1,6 +1,6 @@ package gui.menu; -import gui.SudokuSelector; +import gui.widget.SudokuSelector; import imgui.ImGui; import sudoku.structure.MultiDoku; diff --git a/app/src/main/java/gui/menu/SudokuView.java b/app/src/main/java/gui/menu/SudokuView.java index d75f736..39d01ef 100644 --- a/app/src/main/java/gui/menu/SudokuView.java +++ b/app/src/main/java/gui/menu/SudokuView.java @@ -2,7 +2,7 @@ package gui.menu; import java.util.concurrent.CancellationException; -import gui.SudokuRenderer; +import gui.widget.SudokuRenderer; import imgui.ImGui; import imgui.ImGuiStyle; import sudoku.io.SudokuSerializer; diff --git a/app/src/main/java/gui/widget/LeaderboardRenderer.java b/app/src/main/java/gui/widget/LeaderboardRenderer.java new file mode 100644 index 0000000..d87efc2 --- /dev/null +++ b/app/src/main/java/gui/widget/LeaderboardRenderer.java @@ -0,0 +1,25 @@ +package gui.widget; + +import game.Game; +import game.Player; +import imgui.ImGui; + +public class LeaderboardRenderer { + + private final Game game; + private final Player currentPlayer; + + public LeaderboardRenderer(Game game, Player player) { + this.game = game; + this.currentPlayer = player; + } + + public void render() { + ImGui.text("Leaderboard"); + for (var entry : game.getPlayers().entrySet()) { + Player player = entry.getValue(); + ImGui.text(player.getPseudo() + " : " + player.getScore()); + } + } + +} diff --git a/app/src/main/java/gui/SudokuRenderer.java b/app/src/main/java/gui/widget/SudokuRenderer.java similarity index 97% rename from app/src/main/java/gui/SudokuRenderer.java rename to app/src/main/java/gui/widget/SudokuRenderer.java index e40e697..fb56168 100644 --- a/app/src/main/java/gui/SudokuRenderer.java +++ b/app/src/main/java/gui/widget/SudokuRenderer.java @@ -1,4 +1,4 @@ -package gui; +package gui.widget; import java.util.HashMap; import java.util.HashSet; @@ -8,6 +8,11 @@ import java.util.Set; import common.ConsumerSignal; import common.Signal; +import gui.ColorGenerator; +import gui.Fonts; +import gui.Options; +import gui.RenderableMultidoku; +import gui.Symbols; import gui.ColorGenerator.Color; import imgui.ImGui; import imgui.ImVec2; diff --git a/app/src/main/java/gui/SudokuSelector.java b/app/src/main/java/gui/widget/SudokuSelector.java similarity index 98% rename from app/src/main/java/gui/SudokuSelector.java rename to app/src/main/java/gui/widget/SudokuSelector.java index 1833f72..db1b69e 100644 --- a/app/src/main/java/gui/SudokuSelector.java +++ b/app/src/main/java/gui/widget/SudokuSelector.java @@ -1,9 +1,10 @@ -package gui; +package gui.widget; import java.util.ArrayList; import java.util.List; import common.ConsumerSignal; +import gui.SudokuType; import imgui.ImGui; import imgui.extension.imguifiledialog.ImGuiFileDialog; import imgui.extension.imguifiledialog.flag.ImGuiFileDialogFlags; diff --git a/app/src/main/java/network/client/Client.java b/app/src/main/java/network/client/Client.java index 069b105..20bf94b 100644 --- a/app/src/main/java/network/client/Client.java +++ b/app/src/main/java/network/client/Client.java @@ -22,6 +22,8 @@ public class Client { public final Signal onClosed = new Signal(); public final Signal onGameStarted = new Signal(); + Player player; + String disconnectReason = null; public Client(String address, short port) throws UnknownHostException, IOException { @@ -70,4 +72,8 @@ public class Client { } } + public Player getPlayer() { + return player; + } + } diff --git a/app/src/main/java/network/client/ClientConnexion.java b/app/src/main/java/network/client/ClientConnexion.java index 94e87f9..3f6bfad 100644 --- a/app/src/main/java/network/client/ClientConnexion.java +++ b/app/src/main/java/network/client/ClientConnexion.java @@ -21,7 +21,6 @@ import sudoku.io.SudokuSerializer; public class ClientConnexion extends Connexion { private final Client client; - private Player player = null; public ClientConnexion(String address, short port, Client client) throws UnknownHostException, IOException { super(new Socket(address, port)); @@ -38,7 +37,7 @@ public class ClientConnexion extends Connexion { @Override public void visitPacket(ConnexionInfoPacket packet) { - this.player = this.client.getGame().getPlayerById(packet.getConnectionId()); + this.client.player = this.client.getGame().getPlayerById(packet.getConnectionId()); client.onConnect.emit(); } diff --git a/app/src/main/java/network/server/Server.java b/app/src/main/java/network/server/Server.java index 79a222d..19b2b24 100644 --- a/app/src/main/java/network/server/Server.java +++ b/app/src/main/java/network/server/Server.java @@ -71,7 +71,7 @@ public class Server { public void startGame(MultiDoku doku) { this.game.startGame(doku); for (ServerConnexion connexion : this.connexions) { - connexion.setSudoku(doku); + connexion.setSudoku(doku.clone()); } broadcastPacket(new StartGamePacket(SudokuSerializer.serializeSudoku(doku).toString())); } diff --git a/app/src/main/java/network/server/ServerConnexion.java b/app/src/main/java/network/server/ServerConnexion.java index d14b2cc..4206c17 100644 --- a/app/src/main/java/network/server/ServerConnexion.java +++ b/app/src/main/java/network/server/ServerConnexion.java @@ -70,7 +70,7 @@ public class ServerConnexion extends Connexion { sendPacket(new ConnexionInfoPacket(player.getId())); if (this.server.getGame().getGameState() == GameState.GameGoing) { - setSudoku(this.server.getGame().getDoku()); + setSudoku(this.server.getGame().getDoku().clone()); sendPacket( new StartGamePacket(SudokuSerializer.serializeSudoku(this.server.getGame().getDoku()).toString())); } @@ -134,15 +134,15 @@ public class ServerConnexion extends Connexion { return; } if (cell.getSymbolIndex() != Cell.NOSYMBOL && packet.getNewValue() == Cell.NOSYMBOL) { - cell.trySetValue(Cell.NOSYMBOL); + cell.empty(); player.setScore(player.getScore() + 1); - sendPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore())); + this.server.broadcastPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore())); return; } // on rajoute un chiffre à la grille if (cell.trySetValue(packet.getNewValue())) { player.setScore(player.getScore() - 1); - sendPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore())); + this.server.broadcastPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore())); } } @@ -150,7 +150,7 @@ public class ServerConnexion extends Connexion { this.doku = doku; assert (player != null); player.setScore(this.doku.getEmptyCells().size()); - sendPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore())); + this.server.broadcastPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore())); } } diff --git a/app/src/main/java/sudoku/structure/MultiDoku.java b/app/src/main/java/sudoku/structure/MultiDoku.java index 1fd9b6e..569c163 100644 --- a/app/src/main/java/sudoku/structure/MultiDoku.java +++ b/app/src/main/java/sudoku/structure/MultiDoku.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Random; import java.util.Set; +import sudoku.io.SudokuSerializer; + /** * @class MultiDoku * @brief Représente une grille de Multidoku. @@ -180,4 +182,9 @@ public class MultiDoku { int randomIndex = rand.nextInt(emptyCells.size()); return emptyCells.get(randomIndex); } + + public MultiDoku clone() { + //TODO: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah + return SudokuSerializer.deserializeSudoku(SudokuSerializer.serializeSudoku(this)); + } }