Untitled

 avatar
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