Untitled
unknown
plain_text
a year ago
15 kB
2
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