This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
25
app/src/main/java/gui/widget/LeaderboardRenderer.java
Normal file
25
app/src/main/java/gui/widget/LeaderboardRenderer.java
Normal 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user