2021-06-21 12:59:32 +02:00
|
|
|
var socket = new WebSocket('ws://localhost:2667');
|
2021-06-01 11:12:45 +02:00
|
|
|
var events = {
|
|
|
|
outgoing: {
|
|
|
|
JOIN_GAME: 'csJoinGame',
|
|
|
|
MARK: 'csMark',
|
|
|
|
QUIT: 'csQuit'
|
|
|
|
},
|
|
|
|
incoming: {
|
|
|
|
JOIN_GAME: 'scJoinGame',
|
|
|
|
MARK: 'scMark',
|
|
|
|
SET_TURN: 'scSetTurn',
|
|
|
|
OPPONENT_READY: 'scOpponentReady',
|
|
|
|
GAME_OVER: 'scGameOver',
|
|
|
|
ERROR: 'scError',
|
|
|
|
QUIT: 'scQuit'
|
|
|
|
}
|
|
|
|
};
|
2021-06-14 16:56:35 +02:00
|
|
|
// container creates the startBtn
|
2021-06-01 11:12:45 +02:00
|
|
|
var container = document.querySelector('#gameBoard');
|
|
|
|
var startBtn = document.querySelector('#startBtn');
|
|
|
|
var nameInput = document.querySelector('#nickname');
|
|
|
|
|
|
|
|
var scoreBoard = [
|
|
|
|
document.querySelector('#p1Score'),
|
|
|
|
document.querySelector('#p2Score')
|
|
|
|
];
|
|
|
|
|
|
|
|
var hero = {};
|
|
|
|
var board = new Board(scoreBoard);
|
|
|
|
|
2021-06-14 16:56:35 +02:00
|
|
|
// disable startBtn and nameInput before website finished loading
|
2021-06-01 11:12:45 +02:00
|
|
|
startBtn.setAttribute('disabled', true);
|
|
|
|
nameInput.setAttribute('disabled', true);
|
|
|
|
nameInput.setAttribute('placeholder', 'Loading...');
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param action
|
|
|
|
* @param data
|
2021-06-18 14:53:55 +02:00
|
|
|
|
2021-06-01 11:12:45 +02:00
|
|
|
* @returns {*}
|
|
|
|
*/
|
|
|
|
function makeMessage(action, data){
|
|
|
|
var resp = {
|
|
|
|
action: action,
|
|
|
|
data: data
|
|
|
|
};
|
|
|
|
|
|
|
|
return JSON.stringify(resp);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
2021-06-14 16:56:35 +02:00
|
|
|
* @param cupId
|
2021-06-01 11:12:45 +02:00
|
|
|
*/
|
2021-06-14 16:56:35 +02:00
|
|
|
board.onMark = function(cupId){
|
|
|
|
socket.send(makeMessage(events.outgoing.MARK, {playerId: hero.id, cupId: cupId}));
|
2021-06-01 11:12:45 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
function start() {
|
|
|
|
while (container.lastChild) {
|
|
|
|
container.removeChild(container.lastChild);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (board.players.length === 1) {
|
|
|
|
scoreBoard[1].textContent = 'waiting...';
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2021-06-14 16:56:35 +02:00
|
|
|
|
|
|
|
// if startBtn is pressed
|
2021-06-01 11:12:45 +02:00
|
|
|
startBtn.addEventListener('click', function(event) {
|
|
|
|
var name = nameInput.value.trim();
|
|
|
|
|
|
|
|
if (name.length > 0) {
|
|
|
|
hero.name = name;
|
|
|
|
socket.send(makeMessage(events.outgoing.JOIN_GAME, name));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
socket.onmessage = function(event){
|
|
|
|
var msg = JSON.parse(event.data);
|
|
|
|
|
|
|
|
switch (msg.action) {
|
|
|
|
case events.incoming.ERROR:
|
2021-06-18 16:06:24 +02:00
|
|
|
alert('Errorrr: ' + msg.data);
|
2021-06-01 11:12:45 +02:00
|
|
|
break;
|
|
|
|
case events.incoming.JOIN_GAME:
|
|
|
|
board.addPlayer(msg.data);
|
|
|
|
if (msg.data.name === hero.name) {
|
|
|
|
hero = msg.data;
|
|
|
|
start();
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
case events.incoming.SET_TURN:
|
2021-06-14 16:56:35 +02:00
|
|
|
// change Scoreboard
|
2021-06-01 11:12:45 +02:00
|
|
|
board.highlightScoreboard(msg.data.id);
|
|
|
|
board.ready = true;
|
|
|
|
if (msg.data.id === hero.id) {
|
2021-06-14 16:56:35 +02:00
|
|
|
// remove opponent cups
|
2021-06-01 11:12:45 +02:00
|
|
|
board.enableTurn();
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
case events.incoming.MARK:
|
2021-06-14 16:56:35 +02:00
|
|
|
board.doMark(msg.data.cupId, msg.data.player.label);
|
2021-06-01 11:12:45 +02:00
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case events.incoming.GAME_OVER:
|
|
|
|
if (msg.data.player) {
|
2021-06-21 11:34:43 +02:00
|
|
|
board.doWinner();
|
2021-06-01 11:12:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
socket.send(makeMessage(events.outgoing.QUIT, hero.id));
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case events.incoming.QUIT:
|
2021-06-14 16:56:35 +02:00
|
|
|
// close
|
2021-06-01 11:12:45 +02:00
|
|
|
socket.close();
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2021-06-14 16:56:35 +02:00
|
|
|
// if socket is open, show startBtn and nameInput
|
2021-06-01 11:12:45 +02:00
|
|
|
socket.onopen = function(event) {
|
|
|
|
startBtn.removeAttribute('disabled');
|
|
|
|
nameInput.removeAttribute('disabled');
|
|
|
|
nameInput.removeAttribute('placeholder');
|
|
|
|
nameInput.focus();
|
|
|
|
};
|