diff --git a/client/public/css/main.css b/client/public/css/main.css
index 2e693980b558b8eb54cc442f6dc16a02348f34ce..82754b6ae13553ec65e25f5b845f7e5a7c6f87dc 100644
--- a/client/public/css/main.css
+++ b/client/public/css/main.css
@@ -160,4 +160,6 @@ section .air.air4{
   100%{
     background-position-x: -1000px; 
   }
+}.hidden {
+  display: none;
 }
\ No newline at end of file
diff --git a/client/src/afficher.js b/client/src/afficher.js
index 1f94850d15ba651a6f03fb2e063fc5c11e6b8cee..9a221f2ff7d25196270f43b71b0871103522bbc1 100644
--- a/client/src/afficher.js
+++ b/client/src/afficher.js
@@ -6,12 +6,15 @@ export default class Afficher {
 
 	constructor() {
 		this.gameStarted = false;
+		this.afficherMenu = this.afficherMenu.bind(this);
+		this.startGame = this.startGame.bind(this);
 	}
 
 	afficherCredits(event) {
-		event.preventDefault();
+		//event.preventDefault();
 		document.querySelector('.divMain').innerHTML = setHtml.credits();
 		console.log(document.querySelector('.retourMenu'));
+		console.log(divMain.innerHTML);
 		document
 			.querySelector('.retourMenu')
 			.addEventListener('click', this.afficherMenu);
@@ -27,15 +30,18 @@ export default class Afficher {
 		document
 			.querySelector('.credits')
 			.addEventListener('click', this.afficherCredits);
+		location.reload();
 	}
 
-	afficherFinDePartie() {
+	afficherFinDePartie(canvas, score1, score2, score3, score4) {
 		this.gameStarted = false;
 		canvas.style.display = 'none';
 		document.querySelector('.animation').style.display = '';
 		document.querySelector('.divMain').innerHTML = setHtml.finDePartie(
-			avatar,
-			t
+			score1,
+			score2,
+			score3,
+			score4
 		);
 		document
 			.querySelector('.retourMenu')
diff --git a/client/src/main.js b/client/src/main.js
index 9e6fe2a16226b9b93f3139bd17d608dc3ac69abe..ca2d2e19da5f3b86a119ce267152f1dde69435a0 100644
--- a/client/src/main.js
+++ b/client/src/main.js
@@ -4,6 +4,7 @@ import draw from './draw.js';
 import { bonusImages } from './utils.js';
 import Render from './render.js';
 import Afficher from './afficher.js';
+import setHtml from './setHtml.js';
 
 const socket = io();
 let min = 0;
@@ -133,42 +134,57 @@ function render() {
 
 let avatars = [];
 
+let avatarsScore = {}; // Objet pour stocker les scores associés à chaque avatarId
+
 socket.on('dead', avatarId => {
-	//affichage.afficherFinDePartie();
-	console.log(avatarId);
-	avatars[avatarId] = {};
+	// Récupérer le score de l'avatar avant de le supprimer
+	const score = avatars[avatarId] ? avatars[avatarId].score : 0;
+
+	// Stocker le score associé à l'avatarId dans l'objet avatarsScore
+	avatarsScore[avatarId] = score;
+
+	// Supprimer l'avatar du tableau avatars
+	delete avatars[avatarId];
+
+	// Afficher la fin de partie ou effectuer d'autres actions nécessaires
+	// affichage.afficherFinDePartie();
+	console.log(`Avatar ${avatarId} est mort. Score sauvegardé : ${score}`);
 });
 
 socket.on('disconnectEvent', id => {
 	if (avatar.getNom() == id) {
+		// Si l'avatar est celui du joueur local, afficher la fin de partie
 		affichage.afficherFinDePartie();
 	}
-	avatars[id] = {};
-});
-
-socket.on('newAvatar', data => {
-	avatars[data.id] = { x: data.x, y: data.y };
+	// Supprimer l'avatar de avatars
+	delete avatars[id];
 });
 
+// Réception des données des avatars depuis le serveur
 socket.on('avatarsData', avatarData => {
 	avatarData.forEach(data => {
+		// Mise à jour des données de l'avatar dans avatars
 		if (avatars[data.id] != undefined) {
 			avatars[data.id].x = data.x;
 			avatars[data.id].y = data.y;
 			avatars[data.id].projectiles = data.projectiles;
 			avatars[data.id].vies = data.vies;
 			avatars[data.id].score = data.score;
+			avatars[data.id].socketId = data.socketId;
 		} else {
+			// Création d'un nouvel avatar dans avatars si celui-ci n'existe pas encore
 			avatars[data.id] = {
 				x: data.x,
 				y: data.y,
 				projectiles: data.projectiles,
 				vies: data.vies,
 				score: data.score,
+				socketId: data.socketId,
 			};
 		}
 	});
 });
+
 const keysPressed = {};
 
 document.addEventListener('keydown', event => {
@@ -198,3 +214,23 @@ document.addEventListener('keyup', event => {
 
 	event.preventDefault();
 });
+
+let endGame = false;
+socket.on('endGame', () => {
+	console.log(
+		avatarsScore[1],
+		avatarsScore[2],
+		avatarsScore[3],
+		avatarsScore[4]
+	);
+	if (!endGame) {
+		affichage.afficherFinDePartie(
+			canvas,
+			avatarsScore[1],
+			avatarsScore[2],
+			avatarsScore[3],
+			avatarsScore[4]
+		);
+	}
+	endGame = true;
+});
diff --git a/client/src/setHtml.js b/client/src/setHtml.js
index a7e8dc81ed168f097bdb92ca409276aecdd8e9d2..728702294e138b16ec09b3c890ceefa4ea7d239f 100644
--- a/client/src/setHtml.js
+++ b/client/src/setHtml.js
@@ -8,13 +8,25 @@ export default class setHtml {
 		<button class="retourMenu">Retour au menu</button>`;
 	}
 
-	static finDePartie(avatar, t) {
-		return `
-        <h2> GAME OVER </h2>
-        <h3>score : ${avatar.getScore()}</h3>
-        <h3>temps : ${t.getHrs()} : ${t.getMin()} : ${t.getSec()}</h3>
-        <button class="retourMenu">Retour au menu</button>
-        `;
+	static finDePartie(score1, score2, score3, score4) {
+		let scoreHTML = `<h2> GAME OVER </h2>`;
+
+		if (score1 !== undefined) {
+			scoreHTML += `<h3>score joueur1 : ${score1}</h3>`;
+		}
+		if (score2 !== undefined) {
+			scoreHTML += `<h3>score joueur2 : ${score2}</h3>`;
+		}
+		if (score3 !== undefined) {
+			scoreHTML += `<h3>score joueur3 : ${score3}</h3>`;
+		}
+		if (score4 !== undefined) {
+			scoreHTML += `<h3>score joueur4 : ${score4}</h3>`;
+		}
+
+		scoreHTML += `<button class="retourMenu">Retour au menu</button>`;
+
+		return scoreHTML;
 	}
 
 	static vide() {
diff --git a/server/index.js b/server/index.js
index 728bf7a43a6b1a65c1bb03bb6b79ad764806ec0e..368c662ca3cd3852dfe23f019b20b027bdadab4b 100644
--- a/server/index.js
+++ b/server/index.js
@@ -50,9 +50,12 @@ let canShoot = true;
 let LVL2start = false;
 let LVL3start = false;
 
+let firstAvatar = false;
+
 io.on('connection', socket => {
 	cpt++;
 	if (cpt <= 4) {
+		firstAvatar = true;
 		const avatar = new Avatar(`${socket.id}`, cpt);
 		io.emit('newAvatar', { id: cpt, x: avatar.getX(), y: avatar.getY() });
 		avatars.push(avatar);
@@ -157,81 +160,93 @@ setInterval(() => {
 	io.emit('enemis', enemis);
 	io.emit('bonusArray', bonusArray);
 
-	let avatarData = [];
-	avatars.forEach(avatar => {
-		avatar.canvasSize = canvasSize;
-		if (
-			avatar.getStatut() == 'invincibilite' &&
-			t.getTotalTime() - avatar.getStatutTime() == 15
-		) {
-			avatar.setStatut('null');
-		}
-		enemis.forEach(enemi => {
+	let areAvatarsActive = avatars.some(avatar => !avatar.spectateur);
+
+	if (firstAvatar && areAvatarsActive) {
+		let avatarData = [];
+		avatars.forEach(avatar => {
+			avatar.canvasSize = canvasSize;
 			if (
-				enemi.hitbox.colision(avatar.hitbox) &&
-				avatar.getStatut() != 'invincibilite'
+				avatar.getStatut() == 'invincibilite' &&
+				t.getTotalTime() - avatar.getStatutTime() == 15
 			) {
-				if (canLostLifeAvatar) {
-					avatar.decrementScore(5);
-					enemis.splice(enemis.indexOf(enemi), 1);
-					avatar.perdreVie();
-					canLostLifeAvatar = false;
-					setTimeout(function () {
-						canLostLifeAvatar = true;
-					}, 100);
-				}
-				if (avatar.getVies() == 0) {
-					//avatar.initAvatar();
-					avatar.setSpectateur();
-					io.emit('dead', avatar.id);
-					//TODO : afficher écran fin de partie de l'avatar concerné
-				}
+				avatar.setStatut('null');
 			}
-			if (enemi.getVies() < 0) {
-				avatar.incrementScore(5);
-				enemis.splice(enemis.indexOf(enemi), 1);
-			}
-			enemi.deplacer();
-			avatar.colision(enemi.hitbox);
-			avatar.projectiles.forEach(projectile => {
-				if (projectile.hitbox.colision(enemi.hitbox)) {
-					avatar.projectiles.splice(avatar.projectiles.indexOf(projectile), 1);
-					if (canLostLifeEnemi) {
-						enemi.perdreVie();
-						canLostLifeEnemi = false;
+			enemis.forEach(enemi => {
+				if (
+					enemi.hitbox.colision(avatar.hitbox) &&
+					avatar.getStatut() != 'invincibilite'
+				) {
+					if (canLostLifeAvatar) {
+						avatar.decrementScore(5);
+						enemis.splice(enemis.indexOf(enemi), 1);
+						avatar.perdreVie();
+						canLostLifeAvatar = false;
 						setTimeout(function () {
-							canLostLifeEnemi = true;
-						}, 1000 / 60);
+							canLostLifeAvatar = true;
+						}, 100);
+					}
+					if (avatar.getVies() == 0) {
+						avatar.setSpectateur();
+						io.emit('dead', avatar.id);
 					}
 				}
-			});
-		});
-		avatar.deplacer();
-		avatar.projectiles.forEach(projectile => projectile.deplacer());
-		if (!avatar.spectateur) {
-			avatarData.push({
-				id: avatar.id,
-				x: avatar.getX(),
-				y: avatar.getY(),
-				projectiles: avatar.projectiles,
-				vies: avatar.getVies(),
-				score: avatar.getScore(),
-			});
-		}
-		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());
+				if (enemi.getVies() < 0) {
+					avatar.incrementScore(5);
+					enemis.splice(enemis.indexOf(enemi), 1);
 				}
-				bonusArray.splice(bonusArray.indexOf(bonus), 1);
-			}
-			if (bonus.estExpire(t.getTotalTime())) {
-				bonusArray.splice(bonusArray.indexOf(bonus), 1);
+				enemi.deplacer();
+				avatar.colision(enemi.hitbox);
+				avatar.projectiles.forEach(projectile => {
+					if (projectile.hitbox.colision(enemi.hitbox)) {
+						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());
+			if (!avatar.spectateur) {
+				avatarData.push({
+					id: avatar.id,
+					x: avatar.getX(),
+					y: avatar.getY(),
+					projectiles: avatar.projectiles,
+					vies: avatar.getVies(),
+					score: avatar.getScore(),
+					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);
+				}
+			});
 		});
-	});
-	io.emit('avatarsData', avatarData);
+		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);
+	}
 }, 1000 / 60);