-
Notifications
You must be signed in to change notification settings - Fork 1
/
server.js
151 lines (135 loc) · 5.78 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
'use strict';
try{
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const ChatController = require('./controller/ChatController');
const GameController = require('./controller/GameController');
var isPlaying = false;
io.on('connection', (socket) => {
socket.emit('Bienvenida');
socket.on('nuevo_mensaje', (message) => {
// Validamos si la persona quiere entrar y no hablar
if (message.content == '/enter') {
let [playerGreen, playerYellow, playerBlue, playerRed] = GameController.allPlayers();
// Validamos si la persona ya tiene un color en la partida
if (message.name != playerGreen.name && message.name != playerYellow.name &&
message.name != playerBlue.name && message.name != playerRed.name) {
// Validamos que color queda disponible para agregarlo a la persona
message.content = GameController.createPlayer(message.name);
}
else {
message.content = message.name + ' ya tienes un color elegido.';
let players = [ playerGreen, playerYellow, playerBlue, playerRed ];
let turnNow = GameController.currentTurn();
let status = {
players,
turnNow
}
if (isPlaying) {
io.sockets.emit('start_game', status);
io.sockets.emit('refresh_turn', turnNow);
}
}
message.name = 'SERVIDOR';
}
else if (message.content == '/reset') {
isPlaying = false;
GameController.resetGame();
message.content = message.name + ' ha reiniciado la partida, todos los jugadores están en blanco.';
message.name = 'SERVIDOR';
io.sockets.emit('reset_game', 'Reset');
}
else if (message.content == '/start') {
isPlaying = true;
let players = GameController.setSpawnPlayers();
let turnNow = GameController.currentTurn();
message.content = message.name + ' ha empezado el juego, las fichas han aparecido.';
message.name = 'SERVIDOR';
let status = {
players,
turnNow
}
// Difundimos los objetos de los jugadores
io.sockets.emit('start_game', status);
io.sockets.emit('refresh_turn', turnNow);
}
message.content = ChatController.firstLetterCap(message.content);
// Difundimos el mensaje a todos los conectados
io.sockets.emit('difundir_mensaje', message);
});
socket.on('roll_dice', (message) => {
let [validate, nickname] = GameController.verifyMove(message.turn, message.content, '');
message.content = message.name + ' ha sacado un ' + message.content + ' en el dado.';
message.name = 'SERVIDOR';
io.sockets.emit('difundir_mensaje', message);
if (validate == 0) { // Si no puede mover ninguna pieza
message.content = nickname + ' no puedes mover ninguna pieza.';
io.sockets.emit('difundir_mensaje', message);
let [turnNow, newName] = GameController.passTurn(message.turn);
io.sockets.emit('refresh_turn', turnNow);
message.content = 'Es el turno de ' + newName + '.';
io.sockets.emit('difundir_mensaje', message);
}
});
socket.on('move_piece', (message) => {
let pieceSelected = message.content;
let [validate, nickname] = GameController.verifyMove(message.turn, '', pieceSelected);
if (validate == 0) { // Pieza en el spawn y el dado no es ni 1 ni 6 (No puede moverla)
message.content = message.name + ' selecciona otra pieza, esa no puede moverse.';
message.name = 'SERVIDOR';
io.sockets.emit('on_pieces_action', 'Acciones de las piezas habilitadas.')
io.sockets.emit('difundir_mensaje', message);
}
else {
let nextPos = GameController.newPos(message.turn, message.content);
let box = GameController.searchBox(nextPos);
let [status, color, piece] = GameController.verifyBox(nextPos, message.turn);
if (status == 'enemy') {
GameController.killToEnemy(color, piece);
message.content = nickname + ' ha comido la pieza del jugador de color ' + color + '.';
message.name = 'SERVIDOR';
io.sockets.emit('difundir_mensaje', message);
}
else if (status == 'friendly') {
GameController.mountPiece(color, piece, message.content);
message.content = nickname + ' ha montado sus fichas.';
message.name = 'SERVIDOR';
io.sockets.emit('difundir_mensaje', message);
}
let players = GameController.movePiece(message.turn, pieceSelected, box, nextPos);
io.sockets.emit('refresh_game', players);
message.content = nickname + ' ha movido su pieza.';
message.name = 'SERVIDOR';
io.sockets.emit('difundir_mensaje', message);
let validateSameTurn = GameController.sameTurn(message.turn);
if (validateSameTurn) {
message.content = 'Sigue siendo el turno de ' + nickname + '.';
io.sockets.emit('difundir_mensaje', message);
let turnNow = GameController.currentTurn();
io.sockets.emit('refresh_turn', turnNow);
}
else {
GameController.verifyWinner();
let [turnNow, newName] = GameController.passTurn(message.turn);
message.content = 'Es el turno de ' + newName + '.';
io.sockets.emit('difundir_mensaje', message);
io.sockets.emit('refresh_turn', turnNow);
}
let playersWinner = GameController.verifyWinner();
playersWinner.forEach(element => {
message.name = 'SERVIDOR';
message.content = 'Felicidades ' + element.name + ' has ganado la partida.';
io.sockets.emit('difundir_mensaje', message);
});
}
});
});
app.use(express.static(__dirname + '/public'));
var server = http.listen(process.env.PORT || 8000, () => {
console.log("Servidor listo en http://127.0.0.1:" + server.address().port);
});
} catch (error) {
console.log(error);
}