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