Fixes #15 #36

Merged
Persson-dev merged 13 commits from multiplayer into master 2025-02-01 12:43:14 +00:00
12 changed files with 61 additions and 14 deletions
Showing only changes of commit a160042ef4 - Show all commits

View File

@@ -1,6 +1,7 @@
package gui.menu; package gui.menu;
import gui.SudokuRenderer; import gui.widget.LeaderboardRenderer;
import gui.widget.SudokuRenderer;
import imgui.ImGui; import imgui.ImGui;
import network.client.Client; import network.client.Client;
import network.server.Server; import network.server.Server;
@@ -11,12 +12,14 @@ public class MultiPlayerDokuView extends BaseView{
private final Client client; private final Client client;
private final Server server; private final Server server;
private final SudokuRenderer sudokuRenderer; private final SudokuRenderer sudokuRenderer;
private final LeaderboardRenderer leaderboardRenderer;
public MultiPlayerDokuView(StateMachine stateMachine, Client client, Server server) { public MultiPlayerDokuView(StateMachine stateMachine, Client client, Server server) {
super(stateMachine); super(stateMachine);
this.client = client; this.client = client;
this.server = server; this.server = server;
this.sudokuRenderer = new SudokuRenderer(this.client.getGame().getDoku()); this.sudokuRenderer = new SudokuRenderer(this.client.getGame().getDoku());
this.leaderboardRenderer = new LeaderboardRenderer(client.getGame(), client.getPlayer());
this.sudokuRenderer.onCellChange.connect(this::onCellChange); this.sudokuRenderer.onCellChange.connect(this::onCellChange);
this.client.onDisconnect.connect(this::onDisconnect); this.client.onDisconnect.connect(this::onDisconnect);
} }
@@ -33,6 +36,7 @@ public class MultiPlayerDokuView extends BaseView{
@Override @Override
public void render() { public void render() {
this.leaderboardRenderer.render();
this.sudokuRenderer.render(); this.sudokuRenderer.render();
if (ImGui.button("Quitter")) { if (ImGui.button("Quitter")) {
this.client.stop(); this.client.stop();

View File

@@ -1,7 +1,7 @@
package gui.menu; package gui.menu;
import game.Player; import game.Player;
import gui.SudokuSelector; import gui.widget.SudokuSelector;
import imgui.ImGui; import imgui.ImGui;
import network.client.Client; import network.client.Client;
import network.server.Server; import network.server.Server;

View File

@@ -1,6 +1,6 @@
package gui.menu; package gui.menu;
import gui.SudokuSelector; import gui.widget.SudokuSelector;
import imgui.ImGui; import imgui.ImGui;
import sudoku.structure.MultiDoku; import sudoku.structure.MultiDoku;

View File

@@ -2,7 +2,7 @@ package gui.menu;
import java.util.concurrent.CancellationException; import java.util.concurrent.CancellationException;
import gui.SudokuRenderer; import gui.widget.SudokuRenderer;
import imgui.ImGui; import imgui.ImGui;
import imgui.ImGuiStyle; import imgui.ImGuiStyle;
import sudoku.io.SudokuSerializer; import sudoku.io.SudokuSerializer;

View File

@@ -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());
}
}
}

View File

@@ -1,4 +1,4 @@
package gui; package gui.widget;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@@ -8,6 +8,11 @@ import java.util.Set;
import common.ConsumerSignal; import common.ConsumerSignal;
import common.Signal; import common.Signal;
import gui.ColorGenerator;
import gui.Fonts;
import gui.Options;
import gui.RenderableMultidoku;
import gui.Symbols;
import gui.ColorGenerator.Color; import gui.ColorGenerator.Color;
import imgui.ImGui; import imgui.ImGui;
import imgui.ImVec2; import imgui.ImVec2;

View File

@@ -1,9 +1,10 @@
package gui; package gui.widget;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import common.ConsumerSignal; import common.ConsumerSignal;
import gui.SudokuType;
import imgui.ImGui; import imgui.ImGui;
import imgui.extension.imguifiledialog.ImGuiFileDialog; import imgui.extension.imguifiledialog.ImGuiFileDialog;
import imgui.extension.imguifiledialog.flag.ImGuiFileDialogFlags; import imgui.extension.imguifiledialog.flag.ImGuiFileDialogFlags;

View File

@@ -22,6 +22,8 @@ public class Client {
public final Signal onClosed = new Signal(); public final Signal onClosed = new Signal();
public final Signal onGameStarted = new Signal(); public final Signal onGameStarted = new Signal();
Player player;
String disconnectReason = null; String disconnectReason = null;
public Client(String address, short port) throws UnknownHostException, IOException { public Client(String address, short port) throws UnknownHostException, IOException {
@@ -70,4 +72,8 @@ public class Client {
} }
} }
public Player getPlayer() {
return player;
}
} }

View File

@@ -21,7 +21,6 @@ import sudoku.io.SudokuSerializer;
public class ClientConnexion extends Connexion { public class ClientConnexion extends Connexion {
private final Client client; private final Client client;
private Player player = null;
public ClientConnexion(String address, short port, Client client) throws UnknownHostException, IOException { public ClientConnexion(String address, short port, Client client) throws UnknownHostException, IOException {
super(new Socket(address, port)); super(new Socket(address, port));
@@ -38,7 +37,7 @@ public class ClientConnexion extends Connexion {
@Override @Override
public void visitPacket(ConnexionInfoPacket packet) { 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(); client.onConnect.emit();
} }

View File

@@ -71,7 +71,7 @@ public class Server {
public void startGame(MultiDoku doku) { public void startGame(MultiDoku doku) {
this.game.startGame(doku); this.game.startGame(doku);
for (ServerConnexion connexion : this.connexions) { for (ServerConnexion connexion : this.connexions) {
connexion.setSudoku(doku); connexion.setSudoku(doku.clone());
} }
broadcastPacket(new StartGamePacket(SudokuSerializer.serializeSudoku(doku).toString())); broadcastPacket(new StartGamePacket(SudokuSerializer.serializeSudoku(doku).toString()));
} }

View File

@@ -70,7 +70,7 @@ public class ServerConnexion extends Connexion {
sendPacket(new ConnexionInfoPacket(player.getId())); sendPacket(new ConnexionInfoPacket(player.getId()));
if (this.server.getGame().getGameState() == GameState.GameGoing) { if (this.server.getGame().getGameState() == GameState.GameGoing) {
setSudoku(this.server.getGame().getDoku()); setSudoku(this.server.getGame().getDoku().clone());
sendPacket( sendPacket(
new StartGamePacket(SudokuSerializer.serializeSudoku(this.server.getGame().getDoku()).toString())); new StartGamePacket(SudokuSerializer.serializeSudoku(this.server.getGame().getDoku()).toString()));
} }
@@ -134,15 +134,15 @@ public class ServerConnexion extends Connexion {
return; return;
} }
if (cell.getSymbolIndex() != Cell.NOSYMBOL && packet.getNewValue() == Cell.NOSYMBOL) { if (cell.getSymbolIndex() != Cell.NOSYMBOL && packet.getNewValue() == Cell.NOSYMBOL) {
cell.trySetValue(Cell.NOSYMBOL); cell.empty();
player.setScore(player.getScore() + 1); player.setScore(player.getScore() + 1);
sendPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore())); this.server.broadcastPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore()));
return; return;
} }
// on rajoute un chiffre à la grille // on rajoute un chiffre à la grille
if (cell.trySetValue(packet.getNewValue())) { if (cell.trySetValue(packet.getNewValue())) {
player.setScore(player.getScore() - 1); 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; this.doku = doku;
assert (player != null); assert (player != null);
player.setScore(this.doku.getEmptyCells().size()); player.setScore(this.doku.getEmptyCells().size());
sendPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore())); this.server.broadcastPacket(new UpdatePlayerScorePacket(player.getId(), player.getScore()));
} }
} }

View File

@@ -6,6 +6,8 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import sudoku.io.SudokuSerializer;
/** /**
* @class MultiDoku * @class MultiDoku
* @brief Représente une grille de Multidoku. * @brief Représente une grille de Multidoku.
@@ -180,4 +182,9 @@ public class MultiDoku {
int randomIndex = rand.nextInt(emptyCells.size()); int randomIndex = rand.nextInt(emptyCells.size());
return emptyCells.get(randomIndex); return emptyCells.get(randomIndex);
} }
public MultiDoku clone() {
//TODO: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaah
return SudokuSerializer.deserializeSudoku(SudokuSerializer.serializeSudoku(this));
}
} }