Untitled
unknown
plain_text
5 months ago
15 kB
1
Indexable
const express = require('express'); const app = express(); const http = require('http'); const server = http.createServer(app); const io = require("socket.io")(server); // const server = new WebSocket.Server({host: '0.0.0.0', port: 8080}); // régler pb de quand un joueur se connecte, il peut pas se connecter avec un deuxième non avec le mm socket app.get('/', (request, res) => { res.sendFile(__dirname + '/client_socket.io.html'); }); app.use(express.static(__dirname)); var playersList = []; const nbJoueursMax = 2; var jeton = 0; //dans mon code, (-1 si la partie a commencé) let indiceJoueur = 0; // l'indice du joueur dont c'est le tour de jouer let takenHexagone = {}; // on utilisera cette liste pour y mettre les hexagones joués let colors = ["red", "blue"]; let listeSpectateurs = []; let socketsSpectateurs = []; let historiqueActions = []; let hexagonesSupprimes = []; server.listen(8888,'0.0.0.0', () => { console.log('Le serveur écoute sur le port 8888'); }); io.on('connection', function(socket) { console.log('Nouvelle connexion détectée!'); socket.on('disconnect', function() { console.log('Déconnexion détectée!'); }); socket.on('entreeSpectateur', playerName => { if (!socketsSpectateurs.includes(socket.id) && !listeSpectateurs.includes(playerName) ){ listeSpectateurs.push(playerName); socketsSpectateurs.push(socket.id); if (playerName.length === 0){ io.emit('messageDuServeur', 'Un spectateur anonyme regarde'); } else { io.emit('messageDuServeur', `${playerName} regarde`); } socket.emit('messageDuServeur', 'Vous etes en mode spectateur!'); console.log('Une personne vient de rejoindre le mode spectateur!'); socket.emit('updateListPlayers', playersList); socket.emit('updateHexagone', takenHexagone); } }); socket.on('sortieSpectateur', playerName => { if (socketsSpectateurs.includes(socket.id)){ listeSpectateurs.splice(listeSpectateurs.indexOf(playerName), 1); socketsSpectateurs.splice(socketsSpectateurs.indexOf(socket.id), 1); console.log('Un spectateur a quitté'); io.emit('messageDuServeur', 'Un spectateur a quitté'); } else { console.log('erreur'); } }); socket.on('retour', playerName => { if (historiqueActions.length > 0 && !playersList.includes(playerName)) { const dernierHexagone = historiqueActions.pop(); hexagonesSupprimes.push(dernierHexagone); socket.emit('hexagonePrecedent', dernierHexagone); console.log(`${dernierHexagone.numHexagone}`); } else if (historiqueActions.length === 0 && !playersList.includes(playerName)){ socket.emit('messageDuServeur', 'Vous ne pouvez pas retourner en arrière!'); } else { socket.emit('messageDuServeur', 'Vous ne pouvez pas retourner en arrière'); } }); socket.on('avancer', playerName => { if (hexagonesSupprimes.length > 0 && !playersList.includes(playerName)) { const hexagoneAremettre = hexagonesSupprimes.pop(); socket.emit('hexagoneSuivant', hexagoneAremettre); historiqueActions.push(hexagoneAremettre); console.log(`${hexagoneAremettre.numHexagone}`); } else if (hexagonesSupprimes.length === 0 && !playersList.includes(playerName)) { socket.emit('messageDuServeur', 'Vous ne pouvez plus avancer!'); } else { socket.emit('messageDuServeur', 'Vous ne pouvez pas avancer!'); } }); socket.on('entreeJ', playerName => { if (playersList.length < nbJoueursMax && jeton!=-1 && playerName.length>=1 && playerName.length<25) { if ((playersList.includes(playerName))) { console.log("Ce pseudo est déjà pris!"); socket.emit('changePseudo',playerName); } else { playersList.push(playerName); var indiceJoueur = playersList.indexOf(playerName); socket.emit('indiceJoueur', indiceJoueur); io.emit('confirmJoin', playerName); io.emit('updateListPlayers', playersList); io.emit('partiePleine', playerName); if (playersList.length == nbJoueursMax) { jeton = -1; io.emit('gameStarted', playersList); } }} else if (playerName.length === 0 || playerName == " " && jeton != -1){ socket.emit('messageDuServeur', 'Saisis un nom avant de te connecter à la partie!'); } else { if (!playersList.includes(playerName) && !listeSpectateurs.includes(playerName)){ listeSpectateurs.push(socket.id); socket.emit('messageDuServeur', 'Partie pleine, rejoins en tant que spectateur pour la regarder!') } } }); socket.on('message', (playerName, text) => { if (playersList.includes(playerName) && text.length>0 && text!=' ') { console.log(playerName + ' : ' + text); io.emit('message', text, playerName); } else if (text.length === 0 && playersList.includes(playerName)){ console.log(playerName + ' : ' + text); } else { socket.emit('messageDuServeur', 'Vous etes spectateur'); } }); socket.on('sortieJ', playerName => { if (playersList.indexOf(playerName) >= 0 && jeton!=-1) { playersList.splice(playersList.indexOf(playerName), 1); console.log(`${playerName} a quitté le jeu, en attente de nouveaux joueurs...`); io.emit('confirmSortie', playerName); io.emit('updateListPlayers', playersList); } else if (playersList.indexOf(playerName) >= 0 && jeton == -1) { socket.emit('echecSortie', playerName); } }); // fonction qui indique au début du jeu à qui est le tour de commencer (puisqu'au début on ne peut pas vraiment savoir..) socket.on('tour', (playerName) => { const index = playersList.indexOf(playerName); if (index === indiceJoueur){ socket.emit('messageDuServeur', 'A vous de jouer!'); } }); socket.on('hexagoneClicked', (playerName, numHexagone) => { const index = playersList.indexOf(playerName); if (Object.keys(takenHexagone).length === 121){ io.emit('messageDuServeur', 'Fin de la partie!'); } if (jeton === -1 && index === indiceJoueur) { if (!takenHexagone.hasOwnProperty(numHexagone)) { console.log(`${playerName} a joué l'hexagone ${numHexagone}`); takenHexagone[numHexagone] = colors[index]; historiqueActions.push({ numHexagone, color: colors[index]}); io.emit('updateHexagone', { numHexagone, color: colors[index] }); socket.emit('regarderPartieEnCours', { numHexagone, color: colors[index] }); indiceJoueur = (indiceJoueur + 1) % playersList.length; } else { socket.emit('hexagoneDejaJoue', playerName, numHexagone, takenHexagone[numHexagone]); } } else if (jeton === -1 && !(index === indiceJoueur) && playersList.includes(playerName)){ socket.emit('messageDuServeur', 'Ce n\'est pas à votre tour de jouer.'); } else { socket.emit('messageDuServeur', 'Vous etes spectateur!'); } }); });const express = require('express'); const app = express(); const http = require('http'); const server = http.createServer(app); const io = require("socket.io")(server); // const server = new WebSocket.Server({host: '0.0.0.0', port: 8080}); // régler pb de quand un joueur se connecte, il peut pas se connecter avec un deuxième non avec le mm socket app.get('/', (request, res) => { res.sendFile(__dirname + '/client_socket.io.html'); }); app.use(express.static(__dirname)); var playersList = []; const nbJoueursMax = 2; var jeton = 0; //dans mon code, (-1 si la partie a commencé) let indiceJoueur = 0; // l'indice du joueur dont c'est le tour de jouer let takenHexagone = {}; // on utilisera cette liste pour y mettre les hexagones joués let colors = ["red", "blue"]; let listeSpectateurs = []; let socketsSpectateurs = []; let historiqueActions = []; let hexagonesSupprimes = []; server.listen(8888,'0.0.0.0', () => { console.log('Le serveur écoute sur le port 8888'); }); io.on('connection', function(socket) { console.log('Nouvelle connexion détectée!'); socket.on('disconnect', function() { console.log('Déconnexion détectée!'); }); socket.on('entreeSpectateur', playerName => { if (!socketsSpectateurs.includes(socket.id) && !listeSpectateurs.includes(playerName) ){ listeSpectateurs.push(playerName); socketsSpectateurs.push(socket.id); if (playerName.length === 0){ io.emit('messageDuServeur', 'Un spectateur anonyme regarde'); } else { io.emit('messageDuServeur', `${playerName} regarde`); } socket.emit('messageDuServeur', 'Vous etes en mode spectateur!'); console.log('Une personne vient de rejoindre le mode spectateur!'); socket.emit('updateListPlayers', playersList); socket.emit('updateHexagone', takenHexagone); } }); socket.on('sortieSpectateur', playerName => { if (socketsSpectateurs.includes(socket.id)){ listeSpectateurs.splice(listeSpectateurs.indexOf(playerName), 1); socketsSpectateurs.splice(socketsSpectateurs.indexOf(socket.id), 1); console.log('Un spectateur a quitté'); io.emit('messageDuServeur', 'Un spectateur a quitté'); } else { console.log('erreur'); } }); socket.on('retour', playerName => { if (historiqueActions.length > 0 && !playersList.includes(playerName)) { const dernierHexagone = historiqueActions.pop(); hexagonesSupprimes.push(dernierHexagone); socket.emit('hexagonePrecedent', dernierHexagone); console.log(`${dernierHexagone.numHexagone}`); } else if (historiqueActions.length === 0 && !playersList.includes(playerName)){ socket.emit('messageDuServeur', 'Vous ne pouvez pas retourner en arrière!'); } else { socket.emit('messageDuServeur', 'Vous ne pouvez pas retourner en arrière'); } }); socket.on('avancer', playerName => { if (hexagonesSupprimes.length > 0 && !playersList.includes(playerName)) { const hexagoneAremettre = hexagonesSupprimes.pop(); socket.emit('hexagoneSuivant', hexagoneAremettre); historiqueActions.push(hexagoneAremettre); console.log(`${hexagoneAremettre.numHexagone}`); } else if (hexagonesSupprimes.length === 0 && !playersList.includes(playerName)) { socket.emit('messageDuServeur', 'Vous ne pouvez plus avancer!'); } else { socket.emit('messageDuServeur', 'Vous ne pouvez pas avancer!'); } }); socket.on('entreeJ', playerName => { if (playersList.length < nbJoueursMax && jeton!=-1 && playerName.length>=1 && playerName.length<25) { if ((playersList.includes(playerName))) { console.log("Ce pseudo est déjà pris!"); socket.emit('changePseudo',playerName); } else { playersList.push(playerName); var indiceJoueur = playersList.indexOf(playerName); socket.emit('indiceJoueur', indiceJoueur); io.emit('confirmJoin', playerName); io.emit('updateListPlayers', playersList); io.emit('partiePleine', playerName); if (playersList.length == nbJoueursMax) { jeton = -1; io.emit('gameStarted', playersList); } }} else if (playerName.length === 0 || playerName == " " && jeton != -1){ socket.emit('messageDuServeur', 'Saisis un nom avant de te connecter à la partie!'); } else { if (!playersList.includes(playerName) && !listeSpectateurs.includes(playerName)){ listeSpectateurs.push(socket.id); socket.emit('messageDuServeur', 'Partie pleine, rejoins en tant que spectateur pour la regarder!') } } }); socket.on('message', (playerName, text) => { if (playersList.includes(playerName) && text.length>0 && text!=' ') { console.log(playerName + ' : ' + text); io.emit('message', text, playerName); } else if (text.length === 0 && playersList.includes(playerName)){ console.log(playerName + ' : ' + text); } else { socket.emit('messageDuServeur', 'Vous etes spectateur'); } }); socket.on('sortieJ', playerName => { if (playersList.indexOf(playerName) >= 0 && jeton!=-1) { playersList.splice(playersList.indexOf(playerName), 1); console.log(`${playerName} a quitté le jeu, en attente de nouveaux joueurs...`); io.emit('confirmSortie', playerName); io.emit('updateListPlayers', playersList); } else if (playersList.indexOf(playerName) >= 0 && jeton == -1) { socket.emit('echecSortie', playerName); } }); // fonction qui indique au début du jeu à qui est le tour de commencer (puisqu'au début on ne peut pas vraiment savoir..) socket.on('tour', (playerName) => { const index = playersList.indexOf(playerName); if (index === indiceJoueur){ socket.emit('messageDuServeur', 'A vous de jouer!'); } }); socket.on('hexagoneClicked', (playerName, numHexagone) => { const index = playersList.indexOf(playerName); if (Object.keys(takenHexagone).length === 121){ io.emit('messageDuServeur', 'Fin de la partie!'); } if (jeton === -1 && index === indiceJoueur) { if (!takenHexagone.hasOwnProperty(numHexagone)) { console.log(`${playerName} a joué l'hexagone ${numHexagone}`); takenHexagone[numHexagone] = colors[index]; historiqueActions.push({ numHexagone, color: colors[index]}); io.emit('updateHexagone', { numHexagone, color: colors[index] }); socket.emit('regarderPartieEnCours', { numHexagone, color: colors[index] }); indiceJoueur = (indiceJoueur + 1) % playersList.length; } else { socket.emit('hexagoneDejaJoue', playerName, numHexagone, takenHexagone[numHexagone]); } } else if (jeton === -1 && !(index === indiceJoueur) && playersList.includes(playerName)){ socket.emit('messageDuServeur', 'Ce n\'est pas à votre tour de jouer.'); } else { socket.emit('messageDuServeur', 'Vous etes spectateur!'); } }); });
Editor is loading...
Leave a Comment