From e4e9752b0e64a9c96d69743ee2afdc05a2d0ef86 Mon Sep 17 00:00:00 2001 From: "julien.bouin.etu" <julien.bouin.etu@univ-lille.fr> Date: Sun, 7 Apr 2024 19:38:34 +0200 Subject: [PATCH] refactor index --- client/src/scoreboard.json | 90 ++-------- server/ScoreBoard.js | 2 - server/index.js | 325 +++++++++++++++++++++++-------------- 3 files changed, 220 insertions(+), 197 deletions(-) diff --git a/client/src/scoreboard.json b/client/src/scoreboard.json index 1f9b964..320005c 100644 --- a/client/src/scoreboard.json +++ b/client/src/scoreboard.json @@ -1,29 +1,5 @@ { "results": [ - { - "nom": "julien", - "score": -15 - }, - { - "nom": "julien", - "score": -15 - }, - { - "nom": "julien", - "score": -15 - }, - { - "nom": "julien2", - "score": -10 - }, - { - "nom": "j", - "score": -10 - }, - { - "nom": "test", - "score": -15 - }, { "nom": "pierre", "score": 20 @@ -33,89 +9,57 @@ "score": -15 }, { - "nom": "p", - "score": 30 - }, - { - "nom": "pp", "score": -15 }, { - "nom": "ma", - "score": 70 - }, - { - "nom": "ppapa", - "score": 40 - }, - { - "nom": "mm", - "score": 55 - }, - { - "score": -15 - }, - { - "nom": "testtt", - "score": -15 - }, - { - "score": -5 - }, - { - "nom": "test", + "nom": "m", "score": -15 }, { "nom": "m", - "score": 20 + "score": 0 }, { - "nom": "m`", - "score": -15 + "nom": "m", + "score": 0 }, { - "nom": "p", - "score": 5 + "nom": "anne", + "score": -5 }, { - "nom": "m", - "score": -25 + "nom": "test2", + "score": -10 }, { - "nom": "test", - "score": -10 + "score": -15 }, { - "nom": "p", "score": -15 }, { - "nom": "^", + "nom": "ff", "score": -15 }, { - "nom": "m", + "nom": "test2", "score": -5 }, { - "nom": "tes", + "nom": "mama", "score": -15 }, { - "score": -10 + "nom": "te", + "score": -20 }, { - "nom": "p", + "nom": "f", "score": 0 }, { - "nom": "m", - "score": 5 - }, - { - "nom": "p", - "score": -10 + "nom": "f", + "score": -15 } ] } \ No newline at end of file diff --git a/server/ScoreBoard.js b/server/ScoreBoard.js index 09e510a..6c8bdf4 100644 --- a/server/ScoreBoard.js +++ b/server/ScoreBoard.js @@ -10,13 +10,11 @@ export class GestionScore { const data = fs.readFileSync(this.jsonFilePath); const scores = JSON.parse(data); - // Trier les scores par ordre décroissant scores.results.sort((a, b) => b.score - a.score); let html = '<table><thead><tr><th>Nom</th><th>Score</th></tr></thead><tbody>'; - // Afficher les 10 premiers résultats const numberOfResults = Math.min(10, scores.results.length); for (let i = 0; i < numberOfResults; i++) { const result = scores.results[i]; diff --git a/server/index.js b/server/index.js index d0f9adb..e2ced25 100644 --- a/server/index.js +++ b/server/index.js @@ -46,7 +46,7 @@ const avatars = []; const enemis = []; const bonusArray = []; -let cpt = 0; +let cptConnexion = 0; let canShoot = true; let LVL2start = false; let LVL3start = false; @@ -55,62 +55,100 @@ const gestionScore = new GestionScore('client/src/scoreboard.json'); let scores = gestionScore.afficherScores(); io.on('connection', socket => { - cpt++; - if (cpt <= 4) { + cptConnexion++; + + if (cptConnexion <= 4) { firstAvatar = true; - const avatar = new Avatar(`${socket.id}`, cpt); - io.emit('newAvatar', { id: cpt, x: avatar.getX(), y: avatar.getY() }); - avatars.push(avatar); - socket.on('pseudo', pseudo => { - avatar.pseudo = pseudo; + + const avatar = createAvatar(socket); + + io.emit('newAvatar', { + id: cptConnexion, + x: avatar.getX(), + y: avatar.getY(), }); + + handlePseudonym(socket, avatar); + io.emit('scores', scores); - socket.on('disconnect', () => { - avatars.forEach(avatar => { - if (avatar.nom == socket.id) { - io.emit('disconnectEvent', avatar.id); - avatars.splice(avatars.indexOf(avatar), 1); - } - }); - console.log(`Déconnexion du client ${socket.id}`); - }); + handleDisconnect(socket); - socket.on('start', s => { - if (s == true && cpt != 0) { - gameStarted = s; - } else if (cpt == 0) { - gameStarted = false; - } - }); + handleGameStart(socket); - socket.on('clickEvent', clickEvent => { - const playerAvatar = avatars.find(avatar => avatar.nom === clickEvent.id); - if (playerAvatar) { - playerAvatar.click[clickEvent.key] = clickEvent.pressed; - } else { - console.log(`Aucun avatar trouvé avec le nom ${clickEvent.id}`); - } - }); + handleClickEvents(socket); - socket.on('shoot', shoot => { - const playerAvatar = avatars.find(avatar => avatar.nom === shoot.id); + handleShooting(socket); - if (canShoot) { - playerAvatar.tirer(); - canShoot = false; - setTimeout(function () { - canShoot = true; - }, 200); + handleCanvasSize(socket); + } +}); + +function createAvatar(socket) { + const avatar = new Avatar(`${socket.id}`, cptConnexion); + avatars.push(avatar); + return avatar; +} + +function handlePseudonym(socket, avatar) { + socket.on('pseudo', pseudo => { + avatar.pseudo = pseudo; + }); +} + +function handleDisconnect(socket) { + socket.on('disconnect', () => { + avatars.forEach(avatar => { + if (avatar.nom == socket.id) { + io.emit('disconnectEvent', avatar.id); + avatars.splice(avatars.indexOf(avatar), 1); } }); + console.log(`Déconnexion du client ${socket.id}`); + }); +} - socket.on('canvasSize', canvasSize => { - console.log(canvasSize); - canvasSize = canvasSize; - }); - } -}); +function handleGameStart(socket) { + socket.on('start', s => { + if (s == true && cptConnexion != 0) { + gameStarted = s; + } else if (cptConnexion == 0) { + gameStarted = false; + } + }); +} + +function handleClickEvents(socket) { + socket.on('clickEvent', clickEvent => { + const playerAvatar = avatars.find(avatar => avatar.nom === clickEvent.id); + if (playerAvatar) { + playerAvatar.click[clickEvent.key] = clickEvent.pressed; + } else { + console.log(`Aucun avatar trouvé avec le nom ${clickEvent.id}`); + } + }); +} + +function handleShooting(socket) { + socket.on('shoot', shoot => { + const playerAvatar = avatars.find(avatar => avatar.nom === shoot.id); + + if (canShoot) { + playerAvatar.tirer(); + canShoot = false; + setTimeout(function () { + canShoot = true; + }, 200); + } + }); +} + +function handleCanvasSize(socket) { + socket.on('canvasSize', size => { + console.log(size); + canvasSize = size; + }); +} let spawnIntervalLV1 = setInterval(() => { if (gameStarted) { @@ -163,71 +201,31 @@ let spawnBonusInterval = setInterval(() => { }, 15000); setInterval(() => { - scores = gestionScore.afficherScores(); - io.emit('scores', scores); + updateScores(); + io.emit('enemis', enemis); + io.emit('bonusArray', bonusArray); - let areAvatarsActive = avatars.some(avatar => !avatar.spectateur); + const areAvatarsActive = avatars.some(avatar => !avatar.spectateur); + // Si des avatars sont actifs if (firstAvatar && areAvatarsActive) { - let avatarData = []; + const avatarData = []; + avatars.forEach(avatar => { avatar.canvasSize = canvasSize; - if ( - avatar.getStatut() == 'invincibilite' && - t.getTotalTime() - avatar.getStatutTime() == 15 - ) { - avatar.setStatut('null'); - } - enemis.forEach(enemi => { - if ( - enemi.hitbox.colision(avatar.hitbox) && - avatar.getStatut() != 'invincibilite' && - !avatar.spectateur - ) { - if (canLostLifeAvatar) { - avatar.decrementScore(5); - enemis.splice(enemis.indexOf(enemi), 1); - avatar.perdreVie(); - canLostLifeAvatar = false; - setTimeout(function () { - canLostLifeAvatar = true; - }, 100); - } - if (avatar.getVies() == 0) { - gestionScore.ajouterScore(avatar.pseudo, avatar.score); - - avatar.setSpectateur(); - io.emit('dead', avatar.id); - } - } - enemi.deplacer(); - avatar.colision(enemi.hitbox); - avatar.projectiles.forEach(projectile => { - if (projectile.hitbox.colision(enemi.hitbox)) { - if (enemi.getVies() < 0) { - console.log(avatar.id); - avatar.incrementScore(5); - enemis.splice(enemis.indexOf(enemi), 1); - } - avatar.projectiles.splice( - avatar.projectiles.indexOf(projectile), - 1 - ); - if (canLostLifeEnemi) { - enemi.perdreVie(); - canLostLifeEnemi = false; - setTimeout(function () { - canLostLifeEnemi = true; - }, 1000 / 60); - } - } - }); - }); - avatar.deplacer(); - avatar.projectiles.forEach(projectile => projectile.deplacer()); + updateInvincibilityStatus(avatar); + + handleAvatarEnemyCollisions(avatar); + + moveEnemies(); + + handleAvatarProjectileCollisions(avatar); + + moveAvatarsAndProjectiles(avatar); + if (!avatar.spectateur) { avatarData.push({ id: avatar.id, @@ -239,27 +237,110 @@ setInterval(() => { socketId: avatar.nom, }); } - bonusArray.forEach(bonus => { - if (bonus.hitbox.colision(avatar.hitbox)) { - if (bonusNoms[bonus.getChoix()] == 'vie') { - avatar.gagnerVie(); - } else if (bonusNoms[bonus.getChoix()] == 'invincibilite') { - avatar.setStatut('invincibilite'); - avatar.setStatutTime(t.getTotalTime()); - } - bonusArray.splice(bonusArray.indexOf(bonus), 1); - } - if (bonus.estExpire(t.getTotalTime())) { - bonusArray.splice(bonusArray.indexOf(bonus), 1); - } - }); + + handleAvatarBonusCollisions(avatar); }); + io.emit('avatarsData', avatarData); } else { - gameStarted = false; - cpt = 0; - t = new timer(); - avatars.length = 0; // Réinitialiser le tableau d'avatars - io.emit('endGame', true); + stopGame(); } }, 1000 / 60); + +function updateScores() { + scores = gestionScore.afficherScores(); + io.emit('scores', scores); +} + +function updateInvincibilityStatus(avatar) { + if ( + avatar.getStatut() == 'invincibilite' && + t.getTotalTime() - avatar.getStatutTime() == 15 + ) { + avatar.setStatut('null'); + } +} + +function handleAvatarEnemyCollisions(avatar) { + enemis.forEach(enemi => { + if ( + enemi.hitbox.colision(avatar.hitbox) && + avatar.getStatut() != 'invincibilite' && + !avatar.spectateur + ) { + if (canLostLifeAvatar) { + avatar.decrementScore(5); + enemis.splice(enemis.indexOf(enemi), 1); + avatar.perdreVie(); + canLostLifeAvatar = false; + setTimeout(function () { + canLostLifeAvatar = true; + }, 100); + } + if (avatar.getVies() == 0) { + gestionScore.ajouterScore(avatar.pseudo, avatar.score); + avatar.setSpectateur(); + io.emit('dead', avatar.id); + } + } + }); +} + +function moveEnemies() { + enemis.forEach(enemi => { + enemi.deplacer(); + }); +} + +function handleAvatarProjectileCollisions(avatar) { + enemis.forEach(enemi => { + avatar.projectiles.forEach(projectile => { + if (projectile.hitbox.colision(enemi.hitbox)) { + if (enemi.getVies() < 0) { + avatar.incrementScore(5); + enemis.splice(enemis.indexOf(enemi), 1); + } + avatar.projectiles.splice(avatar.projectiles.indexOf(projectile), 1); + if (canLostLifeEnemi) { + enemi.perdreVie(); + canLostLifeEnemi = false; + setTimeout(function () { + canLostLifeEnemi = true; + }, 1000 / 60); + } + } + }); + }); +} + +function moveAvatarsAndProjectiles(avatar) { + avatar.deplacer(); + avatar.projectiles.forEach(projectile => { + projectile.deplacer(); + }); +} + +function handleAvatarBonusCollisions(avatar) { + bonusArray.forEach(bonus => { + if (bonus.hitbox.colision(avatar.hitbox)) { + if (bonusNoms[bonus.getChoix()] == 'vie') { + avatar.gagnerVie(); + } else if (bonusNoms[bonus.getChoix()] == 'invincibilite') { + avatar.setStatut('invincibilite'); + avatar.setStatutTime(t.getTotalTime()); + } + bonusArray.splice(bonusArray.indexOf(bonus), 1); + } + if (bonus.estExpire(t.getTotalTime())) { + bonusArray.splice(bonusArray.indexOf(bonus), 1); + } + }); +} + +function stopGame() { + gameStarted = false; + cptConnexion = 0; + t = new timer(); + avatars.length = 0; + io.emit('endGame', true); +} -- GitLab