diff --git a/S2/DevWeb/Projet/README.md b/S2/DevWeb/Projet/README.md index b28672b..c53af3a 100644 --- a/S2/DevWeb/Projet/README.md +++ b/S2/DevWeb/Projet/README.md @@ -43,7 +43,7 @@ mvn install ```` ## Lancement du projet -Depuis IntelliJ, ouvrir l'onglet file > project structure et ajouter les artefacts suivants : +Depuis IntelliJ, ouvrir l'onglet `file > project structure` et ajouter les artefacts suivants : - project: war - project: war exploded diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/database/pojo/Game.java b/S2/DevWeb/Projet/src/main/java/uppa/project/database/pojo/Game.java index e21add0..d70f07a 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/database/pojo/Game.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/database/pojo/Game.java @@ -291,16 +291,13 @@ public class Game implements Serializable { /** * Tri des joueurs de la partie par score */ - public void sortPlayersByScore() { - for (int i = 0; i < players.size(); i++) { - for (int j = i + 1; j < players.size(); j++) { - if (players.get(i).getScore() < players.get(j).getScore()) { - Player temp = players.get(i); - players.set(i, players.get(j)); - players.set(j, temp); - } + public void sortPlayersByScoreAndRapidity() { + players.sort((p1, p2) -> { + if (p1.getScore() == p2.getScore()) { + return p2.getRapidClickCount() - p1.getRapidClickCount(); } - } + return p2.getScore() - p1.getScore(); + }); } /** diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/GameStatistics.java b/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/GameStatisticsServlet.java similarity index 88% rename from S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/GameStatistics.java rename to S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/GameStatisticsServlet.java index a63435e..27ef716 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/GameStatistics.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/web/servlet/GameStatisticsServlet.java @@ -9,9 +9,10 @@ import java.io.IOException; import uppa.project.database.dao.DAO; import uppa.project.database.dao.jpa.Game_JPA_DAO_Factory; import uppa.project.database.pojo.Game; +import uppa.project.database.pojo.Player; @WebServlet(name = "game-statistics", value = "/game-statistics") -public class GameStatistics extends HttpServlet { +public class GameStatisticsServlet extends HttpServlet { public void init() { } @@ -22,7 +23,7 @@ public class GameStatistics extends HttpServlet { DAO gameDAO = new Game_JPA_DAO_Factory().getDAOGame(); game = gameDAO.findById(Integer.parseInt(request.getParameter("id"))); request.removeAttribute("id"); - game.sortPlayersByScore(); + game.sortPlayersByScoreAndRapidity(); request.setAttribute("game", game); request.getRequestDispatcher("/WEB-INF/pages/game-statistics.jsp").forward(request, response); } catch (Exception e) { diff --git a/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/GameWS.java b/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/GameWS.java index 0102c9a..39c1318 100644 --- a/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/GameWS.java +++ b/S2/DevWeb/Projet/src/main/java/uppa/project/web/websocket/GameWS.java @@ -29,10 +29,8 @@ import uppa.project.utils.GameProvider; @ServerEndpoint(value = "/ws/game/{game_id}") public class GameWS { - Gson gson = new Gson(); - private static final HashMap> games = new HashMap<>(); - + Gson gson = new Gson(); private Game game; private Player player; @@ -79,11 +77,13 @@ public class GameWS { // Broadcast the new player broadcast(new Message("updatePlayerList", gson.toJson(simplePlayerList)).toJson()); } + if (message.getType().equals("start")) { game.setGameState(Game.GameState.STARTED); broadcast(new Message("start", gson.toJson(new SimpleGame(game, games.get(game)))).toJson()); // TODO Start Timer } + if (message.getType().equals("click")) { ClickChoice choice = gson.fromJson(message.getData(), ClickChoice.class); @@ -150,34 +150,45 @@ public class GameWS { } // Broadcast the player choice with score - broadcast(new Message("updatePlayer", gson.toJson(new SimplePlayer(player))).toJson()); System.out.println(gameClickCount + " / " + games.get(game).size()); + // If all players have clicked if (gameClickCount >= games.get(game).size()) { // Reset the current click for all players for (Player p : games.get(game)) p.setCurrentClick(null); + List players = games.get(game); + players.sort((p1, p2) -> { + if (p1.getScore() == p2.getScore()) { + return p2.getRapidClickCount() - p1.getRapidClickCount(); + } + return p2.getScore() - p1.getScore(); + }); + + Player theoricWinner = players.get(0); + Player second = players.get(1); + // Check if the game is over - if (game.nextRound()) { // TODO: if score is the same add a round + if (game.nextRound() || (second.getScore() == theoricWinner.getScore() && second.getRapidClickCount() == theoricWinner.getRapidClickCount())) { broadcast(new Message("nextRound", gson.toJson(new SimpleGame(game, games.get(game)))).toJson()); // TODO Start Timer } else { - // TODO: determine the winner + theoricWinner.setWinner(); // Broadcast the end of the game broadcast(new Message("end", gson.toJson(new SimpleGame(game, games.get(game)))).toJson()); - // TODO: persist the game in the database -// EntityManager em = EntityManagerProvider.getInstance(); -// game.setPlayers(games.get(game)); -// -// em.getTransaction().begin(); -// em.persist(game); -// em.getTransaction().commit(); + + EntityManager em = EntityManagerProvider.getInstance(); + + em.getTransaction().begin(); + em.persist(game); + for (Player p : games.get(game)) em.persist(p); + em.getTransaction().commit(); } } } diff --git a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/game.jsp b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/game.jsp index 3ac4ac1..ff1df51 100644 --- a/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/game.jsp +++ b/S2/DevWeb/Projet/src/main/webapp/WEB-INF/pages/game.jsp @@ -22,7 +22,9 @@ - + + +
Joueur
Joueur
@@ -182,7 +184,7 @@ url.searchParams.delete("id") const ws = new WebsocketToolkit(url); - ws.onOpen(() => console.log("Connected to the server")); + ws.onOpen(_ => console.log("Connected to the server")); ws.onMessage("init", (data) => { users = data; updateUsers(); @@ -205,12 +207,23 @@