refactor: debut de la refactorisation du projet
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<h1>Bonjour !</h1>
|
<h1>Bonjour !</h1>
|
||||||
<p>Ceci est une page statique servie par Express.</p>
|
<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>
|
<canvas id="maze" width="490" height="490" style="border: 1px solid #333;"></canvas>
|
||||||
<input type="text" id="input" placeholder="message">
|
<input type="text" id="input" placeholder="message">
|
||||||
<button id="sendBtn">Envoyer</button>
|
<button id="sendBtn">Envoyer</button>
|
||||||
@@ -16,6 +17,10 @@
|
|||||||
let myRole = null;
|
let myRole = null;
|
||||||
console.log("Connecte au serveur, id :", socket.id);
|
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) => {
|
socket.on("new_round", (startPos) => {
|
||||||
player.x = startPos.x;
|
player.x = startPos.x;
|
||||||
player.y = startPos.y;
|
player.y = startPos.y;
|
||||||
@@ -130,6 +135,11 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
socket.on("timeout", () => {
|
||||||
|
showGameOver("Temps ecoule. Vous avez perdu.");
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
socket.on("victory", ()=> {
|
socket.on("victory", ()=> {
|
||||||
document.getElementById("victoryScreen").style.display = "block";
|
document.getElementById("victoryScreen").style.display = "block";
|
||||||
myRole = null;
|
myRole = null;
|
||||||
|
|||||||
1
client/js/canvas.js
Normal file
1
client/js/canvas.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
1
client/js/main.js
Normal file
1
client/js/main.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
1
client/js/movement.js
Normal file
1
client/js/movement.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
1
client/js/player.js
Normal file
1
client/js/player.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
1
client/js/role.js
Normal file
1
client/js/role.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
1
client/js/socket.js
Normal file
1
client/js/socket.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
1
client/js/ui.js
Normal file
1
client/js/ui.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
19
server.js
Normal file
19
server.js
Normal 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
1
server/config.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
6
server/doorLogic.js
Normal file
6
server/doorLogic.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
doorLogic.js
|
||||||
|
|
||||||
|
Sert a regrouper toute la logique autour des portes
|
||||||
|
*/
|
||||||
|
|
||||||
1
server/gameState.js
Normal file
1
server/gameState.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
1
server/maze.js
Normal file
1
server/maze.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -4,7 +4,8 @@
|
|||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"start": "node server.js"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
|
|||||||
123
server/server.js
123
server/server.js
@@ -1,117 +1,12 @@
|
|||||||
const express = require('express');
|
/*
|
||||||
const path = require('path');
|
server.js
|
||||||
const http = require('http');
|
|
||||||
const { Server } = require('socket.io');
|
|
||||||
|
|
||||||
const app = express();
|
Ce fichier sert principalement de point d'entree au programme serveur et a lancer tous les modules necessaires a son fonctionnement
|
||||||
const server = http.createServer(app);
|
*/
|
||||||
const io = new Server(server);
|
|
||||||
|
|
||||||
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;
|
const { PORT } = require("./config.js");
|
||||||
|
|
||||||
// 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}`);
|
|
||||||
});
|
|
||||||
|
|||||||
63
server/socketHandler.js
Normal file
63
server/socketHandler.js
Normal 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
1
server/timer.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
Reference in New Issue
Block a user