refactor: debut de la refactorisation du projet

This commit is contained in:
2026-08-01 14:13:28 +02:00
parent 32b042b72c
commit c709064062
17 changed files with 120 additions and 115 deletions

View File

@@ -7,6 +7,7 @@
<body>
<h1>Bonjour !</h1>
<p>Ceci est une page statique servie par Express.</p>
<p id="timerDisplay">Temps restant : --</p>
<canvas id="maze" width="490" height="490" style="border: 1px solid #333;"></canvas>
<input type="text" id="input" placeholder="message">
<button id="sendBtn">Envoyer</button>
@@ -16,6 +17,10 @@
let myRole = null;
console.log("Connecte au serveur, id :", socket.id);
socket.on("timer", (timeLeft) => {
document.getElementById("timerDisplay").textContent = `Temps restant : ${timeLeft}s`;
});
socket.on("new_round", (startPos) => {
player.x = startPos.x;
player.y = startPos.y;
@@ -130,6 +135,11 @@
}
})
socket.on("timeout", () => {
showGameOver("Temps ecoule. Vous avez perdu.");
})
socket.on("victory", ()=> {
document.getElementById("victoryScreen").style.display = "block";
myRole = null;

1
client/js/canvas.js Normal file
View File

@@ -0,0 +1 @@

1
client/js/main.js Normal file
View File

@@ -0,0 +1 @@

1
client/js/movement.js Normal file
View File

@@ -0,0 +1 @@

1
client/js/player.js Normal file
View File

@@ -0,0 +1 @@

1
client/js/role.js Normal file
View File

@@ -0,0 +1 @@

1
client/js/socket.js Normal file
View File

@@ -0,0 +1 @@

1
client/js/ui.js Normal file
View File

@@ -0,0 +1 @@

19
server.js Normal file
View File

@@ -0,0 +1,19 @@
const express = require("express");
const path = require("path");
const http = require("http");
const { Server } = require("socket.io");
const { PORT } = require("./config");
const { registerSocketHandlers } = require("./socketHandlers");
const app = express();
const server = http.createServer(app);
const wSS = new Server(server); // wSS pour webSocketServer
app.use(express.static(path.join(__dirname, "..", "client")));
wSS.on("connection", (socket) => registerSocketHandlers(wSS, socket));
server.listen(PORT, () => {
console.log(`serveur demarre sur http://localhost:${PORT}`);
});

1
server/config.js Normal file
View File

@@ -0,0 +1 @@

6
server/doorLogic.js Normal file
View File

@@ -0,0 +1,6 @@
/*
doorLogic.js
Sert a regrouper toute la logique autour des portes
*/

1
server/gameState.js Normal file
View File

@@ -0,0 +1 @@

1
server/maze.js Normal file
View File

@@ -0,0 +1 @@

View File

@@ -4,7 +4,8 @@
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"keywords": [],
"author": "",

View File

@@ -1,117 +1,12 @@
const express = require('express');
const path = require('path');
const http = require('http');
const { Server } = require('socket.io');
/*
server.js
const app = express();
const server = http.createServer(app);
const io = new Server(server);
Ce fichier sert principalement de point d'entree au programme serveur et a lancer tous les modules necessaires a son fonctionnement
*/
const PORT = process.env.PORT || 3000;
const express = require("express");
const path = require("path");
const http = require("http");
const { Server } = require("socket.io");
let waitingPlayer = null;
// Sert tous les fichiers du dossier "client"
app.use(express.static(path.join(__dirname, "..", "client")));
const correctDoor = { x : 2, y : 6};
const DOORS_TO_WIN = 3;
io.on("connection", (socket) => {
console.log("Un client s'est connecte : ${socket.id}");
if (waitingPlayer === null){
waitingPlayer = socket;
socket.emit("status", "En attente d'un second joueur...");
} else {
const partner = waitingPlayer;
waitingPlayer = null;
const socketIsGuide = Math.random() < 0.5;
const socketRole = socketIsGuide ? "guide" : "explorateur";
const partnerRole = socketIsGuide ? "explorateur" : "guide";
socket.data.partnerId = partner.id;
partner.data.partnerId = socket.id;
socket.emit("status", "Partie prete !");
partner.emit("status", "Partie prete !");
socket.data.role = socketRole;
partner.data.role = partnerRole;
const pairState = { gameOver: false, doorsPassed: 0};
socket.data.pairState = pairState;
partner.data.pairState = pairState;
socket.emit("role", socketRole);
partner.emit("role", partnerRole);
}
socket.on("message", (data) => {
const partnerId = socket.data.partnerId;
if (partnerId){
io.to(partnerId).emit("message", data);
}
});
socket.on("door_reached", (position) => {
const pairState = socket.data.pairState;
if (!pairState || pairState.gameOver) return;
const partnerId = socket.data.partnerId;
const partnerSocket = io.sockets.sockets.get(partnerId);
const isCorrect = position.x === correctDoor.x && position.y === correctDoor.y;
if (!isCorrect){
pairState.gameOver = true;
const result = { correct: false};
socket.emit("door_result", result);
if (partnerSocket) partnerSocket.emit("door_result", result);
return;
}
pairState.doorsPassed++;
if (pairState.doorsPassed >= DOORS_TO_WIN){
pairState.gameOver = true;
socket.emit("victory");
if (partnerSocket) partnerSocket.emit("victory");
return;
}
const temp = socket.data.role;
socket.data.role = partnerSocket.data.role;
partnerSocket.data.role = temp;
const startPos = { x: 1, y: 1};
console.log(pairState);
const result = {correct: isCorrect};
socket.emit("door_result", { correct: true});
socket.emit("new_round", startPos);
socket.emit("role", socket.data.role);
if (partnerSocket){
partnerSocket.emit("door_result", { correct: true });
partnerSocket.emit("new_round", startPos);
partnerSocket.emit("role", partnerSocket.data.role);
}
if (partnerId){
io.to(partnerId).emit("door_result", result);
}
});
socket.on("disconnect", () => {
console.log("Client deconnecte : ${socket.id}");
if (waitingPlayer === socket){
waitingPlayer = null;
}
});
});
server.listen(PORT, () => {
console.log(`Serveur démarré sur http://localhost:${PORT}`);
});
const { PORT } = require("./config.js");

63
server/socketHandler.js Normal file
View File

@@ -0,0 +1,63 @@
/*
socketHandlers.js
Sert a regrouper tous ce qui passe dans une seule connexion
*/
const gameState = require("./gameState");
const { GAME_DURATION } = require("./config");
const { handleDoorReached } = require("./doorLogic");
const { startTimer } = require("./timer");
function registerSocketHandlers(io, socket) {
console.log(`Un client s'est connecté : ${socket.id}`);
if (gameState.waitingPlayer === null) {
gameState.waitingPlayer = socket;
socket.emit("status", "En attente d'un second joueur...");
} else {
const partner = gameState.waitingPlayer;
gameState.waitingPlayer = null;
const socketIsGuide = Math.random() < 0.5;
const socketRole = socketIsGuide ? "guide" : "explorateur";
const partnerRole = socketIsGuide ? "explorateur" : "guide";
socket.data.role = socketRole;
partner.data.role = partnerRole;
socket.data.partnerId = partner.id;
partner.data.partnerId = socket.id;
// État partagé par référence entre les deux sockets de la paire
const pairState = { gameOver: false, doorsPassed: 0, timeLeft: GAME_DURATION };
socket.data.pairState = pairState;
partner.data.pairState = pairState;
socket.emit("role", socketRole);
partner.emit("role", partnerRole);
socket.emit("status", "Partie prête !");
partner.emit("status", "Partie prête !");
startTimer(socket, partner, pairState);
}
socket.on("door_reached", (position) => handleDoorReached(io, socket, position));
socket.on("disconnect", () => {
console.log(`Client déconnecté : ${socket.id}`);
if (gameState.waitingPlayer === socket) {
gameState.waitingPlayer = null;
}
const partnerId = socket.data.partnerId;
if (partnerId) {
const partnerSocket = wSS.sockets.sockets.get(partnerId);
if (partnerSocket){
partnerSocket.emit("status", "Ton partenaire s'est deconnecte");
}
}
)};
}
module.exports = { registerSocketHandlers };

1
server/timer.js Normal file
View File

@@ -0,0 +1 @@