From c6f223e6d1169f20cfe8efc73be537a4afb5ccd9 Mon Sep 17 00:00:00 2001
From: "clement.franckelemon.etu" <clement.franckelemon.etu@univ-lille.fr>
Date: Thu, 28 Mar 2024 10:14:57 +0100
Subject: [PATCH] =?UTF-8?q?Ajout=20des=20scores=20=C3=A0=20la=20base=20de?=
 =?UTF-8?q?=20donn=C3=A9e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

fixed #29
---
 client/src/Printer.js   | 18 +++++++++---
 client/src/Router.js    |  2 +-
 client/src/VerifData.js | 15 ++++++++++
 server/DataBase.js      | 28 +++++++++++++++---
 server/Game.js          | 64 +++++++++++++++++++++--------------------
 server/main.js          | 23 ++++++++++++++-
 6 files changed, 109 insertions(+), 41 deletions(-)

diff --git a/client/src/Printer.js b/client/src/Printer.js
index 1962d11f..e72c70f0 100644
--- a/client/src/Printer.js
+++ b/client/src/Printer.js
@@ -1,4 +1,5 @@
 import { io } from 'socket.io-client';
+import VerifData from './VerifData.js';
 
 export default class Printer{
 
@@ -87,7 +88,7 @@ export default class Printer{
             this.statJ1.innerHTML = `${this.dataGame.playerOne.pseudo} ☠️ <br/> Score : ${this.dataGame.playerOne.score}<br/> vie : ${this.dataGame.playerOne.life}`;
         }
         if(this.dataGame.playerTwo != null){
-            if(this.dataGame.playerOne.life > 0){
+            if(this.dataGame.playerTwo.life > 0){
                 this.loadGifAvatar(this.dataGame.playerTwo.skin,this.dataGame.playerTwo.x,this.dataGame.playerTwo.y);
                 this.statJ2.innerHTML = `${this.dataGame.playerTwo.pseudo} <br/> Score : ${this.dataGame.playerTwo.score} <br/> vie : ${this.dataGame.playerTwo.life}`;
             } else {
@@ -146,14 +147,23 @@ export default class Printer{
         const element = document.querySelector("div.gameover");
         element.querySelector("div.J1 h1.name").innerHTML = data.playerOne;
         element.querySelector("div.J1 h2.score").innerHTML = `${data.scoreJ1} pts`;
+        if(data.playerOne == document.cookie.replace("connect=","")){
+            const db = new VerifData();
+            db.changeScore(data.playerOne,data.scoreJ1);
+        }
         if (data.playerTwo != null){
             element.querySelector("div.J2").classList.remove("hidden");
             element.querySelector("div.J2 h1.name").innerHTML = data.playerTwo;
             element.querySelector("div.J2 h2.score").innerHTML = `${data.scoreJ2} pts`;
+            if(data.playerTwo == document.cookie.replace("connect=","")){
+                const db = new VerifData();
+            db.changeScore(data.playerTwo,data.scoreJ2);
+            }
         }
-        const heures = Math.floor(data.time / 3600);
-        const minutes = Math.floor((data.time % 3600) / 60);
-        const secondes = Math.floor(data.time % 60);
+        const timeInSecond = Math.floor(data.time /1000);
+        const heures = Math.floor(timeInSecond / 3600);
+        const minutes = Math.floor((timeInSecond % 3600) / 60);
+        const secondes = Math.floor(timeInSecond % 60);
         element.querySelector("h2.time").innerHTML = `${heures} Heures, ${minutes} Minutes et ${secondes} secondes !`;
     }
 
diff --git a/client/src/Router.js b/client/src/Router.js
index eef15309..054750ba 100644
--- a/client/src/Router.js
+++ b/client/src/Router.js
@@ -85,7 +85,7 @@ export default class Router{
             element.addEventListener('click', event => {
 				event.preventDefault();
                 const linkHref = event.currentTarget.getAttribute('href');
-                if(linkHref == "authent" || linkHref == "create") document.cookie = document.cookie = "connect=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/;SameSite=None; Secure";
+                if(linkHref == "authent" || linkHref == "create") document.cookie = "connect=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/;SameSite=None; Secure";
 				this.navigate(linkHref);
 			});
             element.addEventListener('mouseenter', event => {
diff --git a/client/src/VerifData.js b/client/src/VerifData.js
index b79667bc..f281d699 100644
--- a/client/src/VerifData.js
+++ b/client/src/VerifData.js
@@ -69,6 +69,21 @@ export default class VerifData{
         });
     };
 
+    changeScore(pseudo,score){
+        const data = {
+            user: pseudo,
+            newscore: score
+        };
+        const options = {
+            method: 'POST',
+            headers: {
+                'Content-Type': 'application/json'
+            },
+            body: JSON.stringify(data)
+        };
+        fetch(`${window.location.origin}/addScore`, options).then(response => console.log(response.json()));
+    }
+
     createUser(body,router){
         const element = body.querySelector("a.createUser");
         element.addEventListener('click', event => {
diff --git a/server/DataBase.js b/server/DataBase.js
index 0d3aae7e..8bc6dd76 100644
--- a/server/DataBase.js
+++ b/server/DataBase.js
@@ -6,10 +6,10 @@ module.exports = class DataBase{
 
     constructor(){
         this.#config = {
-        user: 'cyberpunk_fan',
-        host: 'localhost',
-        database: 'jsgame',
-        password: 'f1_fan',
+        user: 'clementfranckelemonetu',
+        host: 'psqlserv',
+        database: 'but2',
+        password: 'moi',
         };
     }
 
@@ -33,6 +33,26 @@ module.exports = class DataBase{
         }
     }
 
+    async changeScore(user,newScore){
+        try {
+            const client = new Client(this.#config);
+            client.connect();
+
+            const query = {
+                text: "UPDATE jsgame SET bestscore = $2 WHERE pseudo = $1 AND bestscore < $2;",
+                values: [user, newScore]
+            };
+
+            const result = await client.query(query);
+
+            await client.end();
+
+            return true;
+        } catch (err) {
+            return false;
+        }
+    }
+
     async verifUser(user,password){
         try {
             const client = new Client(this.#config);
diff --git a/server/Game.js b/server/Game.js
index 228949c9..38f10116 100644
--- a/server/Game.js
+++ b/server/Game.js
@@ -30,40 +30,42 @@ module.exports = class Game{
 	}
 
     verifDead(){
-        this.missiles.forEach(missile => {
-            if ((missile.missileX < this.playerOne.x + 100 && missile.missileX > this.playerOne.x - 100) &&
-                (missile.missileY < this.playerOne.y + 150 && missile.missileY > this.playerOne.y + 20) &&
-                missile.proprietaire == null && performance.now() > this.invJ1) {
-                    this.invJ1 = performance.now()+3000;
-                    this.playerOne.life -= 1;
-            }
-            if (this.playerTwo != null && (missile.missileX < this.playerTwo.x + 100 && missile.missileX > this.playerTwo.x - 100) &&
-                (missile.missileY < this.playerTwo.y + 150 && missile.missileY > this.playerTwo.y + 20) &&
-                missile.proprietaire == null && performance.now() > this.invJ2) {
-                    this.invJ2 = performance.now()+3000;
-                    this.playerTwo.life -= 1;
-            }
-            const ennemiesMorts = [];
-            this.ennemies.forEach(ennemie => {
-                if ((missile.missileX < ennemie.x + 100 && missile.missileX > ennemie.x - 100) &&
-                    (missile.missileY < ennemie.y + 150 && missile.missileY > ennemie.y + 20) &&
-                    missile.proprietaire != null) {
-                    ennemiesMorts.push(ennemie);
+        if (this.missiles.length > 0){
+            this.missiles.forEach(missile => {
+                if ((missile.missileX < this.playerOne.x + 100 && missile.missileX > this.playerOne.x - 100) &&
+                    (missile.missileY < this.playerOne.y + 150 && missile.missileY > this.playerOne.y + 20) &&
+                    missile.proprietaire == null && performance.now() > this.invJ1 && this.playerOne.life > 0) {
+                        this.invJ1 = performance.now()+3000;
+                        this.playerOne.life -= 1;
                 }
-            });
-        
-            if (ennemiesMorts.length > 0) {
-                ennemiesMorts.forEach(ennemieMort => {
-                    if ( missile.proprietaire != null  && missile.proprietaire === this.playerOne.pseudo) {
-                        this.playerOne.score += 100;
-                    } else if (missile.proprietaire != null) {
-                        this.playerTwo.score += 100;
+                if (this.playerTwo != null && (missile.missileX < this.playerTwo.x + 100 && missile.missileX > this.playerTwo.x - 100) &&
+                    (missile.missileY < this.playerTwo.y + 150 && missile.missileY > this.playerTwo.y + 20) &&
+                    missile.proprietaire == null && performance.now() > this.invJ2 && this.playerTwo.life > 0) {
+                        this.invJ2 = performance.now()+3000;
+                        this.playerTwo.life -= 1;
+                }
+                const ennemiesMorts = [];
+                this.ennemies.forEach(ennemie => {
+                    if ((missile.missileX < ennemie.x + 100 && missile.missileX > ennemie.x - 100) &&
+                        (missile.missileY < ennemie.y + 150 && missile.missileY > ennemie.y + 20) &&
+                        missile.proprietaire != null) {
+                        ennemiesMorts.push(ennemie);
                     }
-                    this.ennemies = this.ennemies.filter(ennemie => ennemie !== ennemieMort);
                 });
-                this.missiles = this.missiles.filter(m => m !== missile);
-            }
-        });
+            
+                if (ennemiesMorts.length > 0) {
+                    ennemiesMorts.forEach(ennemieMort => {
+                        if ( missile.proprietaire != null  && missile.proprietaire === this.playerOne.pseudo) {
+                            this.playerOne.score += 100;
+                        } else if (missile.proprietaire != null) {
+                            this.playerTwo.score += 100;
+                        }
+                        this.ennemies = this.ennemies.filter(ennemie => ennemie !== ennemieMort);
+                    });
+                    this.missiles = this.missiles.filter(m => m !== missile);
+                }
+            });
+        }
     }
 
     addEnnemie(ennemie){
diff --git a/server/main.js b/server/main.js
index 5a5681c3..23853d60 100644
--- a/server/main.js
+++ b/server/main.js
@@ -13,6 +13,7 @@ const httpServer = http.createServer( app );
 const fileOptions = { root: process.cwd() };
 const db = new DataBase();
 let game = null;
+let playerReste = 0;
 
 app.use(bodyParser.json());
 
@@ -77,6 +78,17 @@ app.post( "/changePassword", async ( req, res ) => {
     }
 } );
 
+app.post( "/addScore", async ( req, res ) => {
+    const { user,newscore } = req.body;
+    try {
+        const scores = await db.changeScore(user,newscore);
+        res.status(200).json({ message: 'Nouveau score pris en compte' });
+    } catch (error) {
+        console.error("Erreur lors de la vérification de l'utilisateur:", error);
+        res.status(500).json({ message: 'Erreur serveur lors de la vérification de l\'utilisateur' });
+    }
+} );
+
 app.post( "/userScores", async ( req, res ) => {
     const { user } = req.body;
     try {
@@ -101,8 +113,10 @@ app.post( "/launchGame", async ( req, res ) => {
         const player = new Player(socket.id,user,skin,0,0,4);
         if (!game.playerOne) {
             game.playerOne = player;
+            playerReste = 1;
         } else if (!game.playerTwo) {
             game.playerTwo = player;
+            playerReste = 2;
         } else {
             socket.emit('error', 'La partie est pleine');
             return;
@@ -127,7 +141,11 @@ app.post( "/launchGame", async ( req, res ) => {
             }
             const newData = game.getSendFormat();
             if(newData.end){
-                game = null;
+                if (playerReste == 2){
+                    playerReste--;
+                } else {
+                    game = null;
+                }
             }
             io.emit("newPlayerData",newData);
         });
@@ -135,12 +153,15 @@ app.post( "/launchGame", async ( req, res ) => {
             console.log('Un client s\'est déconnecté');
             if(game.playerTwo != null && game.playerTwo.socketID == socket.id){
                 game.playerTwo = null;
+                playerReste = 1;
             } else if(game.playerOne.socketID == socket.id) {
                 if(game.playerTwo != null){
                     game.playerOne = game.playerTwo;
                     game.playerTwo = null;
+                    playerReste = 1;
                 } else {
                     game.playerOne = null;
+                    playerReste = 0;
                 }
             }
         });
-- 
GitLab