GAME_READY: 'gameReady', | GAME_READY: 'gameReady', | ||||
CUP_MARKED: 'cupMarked', | CUP_MARKED: 'cupMarked', | ||||
CHANGE_TURN: 'changeTurn', | CHANGE_TURN: 'changeTurn', | ||||
WINNER: 'winner', | |||||
DRAW: 'draw' | |||||
WINNER: 'winner' | |||||
}; | }; | ||||
util.inherits(Board, EventEmitter); | util.inherits(Board, EventEmitter); | ||||
var res = this.checkWinner(); | var res = this.checkWinner(); | ||||
if (res.win) { | if (res.win) { | ||||
this.disableAll(); | this.disableAll(); | ||||
this.emit(Board.events.WINNER, {player: this.players[this.currentTurn], pos: res.pos}); | |||||
} else if (this.checkDraw()) { | |||||
this.emit(Board.events.DRAW, {}); | |||||
this.emit(Board.events.WINNER, {player: this.players[this.currentTurn]}); | |||||
} else { | } else { | ||||
this.currentTurn = (this.currentTurn + 1) % 2; | this.currentTurn = (this.currentTurn + 1) % 2; | ||||
this.emit(Board.events.CHANGE_TURN, this.players[this.currentTurn]); | this.emit(Board.events.CHANGE_TURN, this.players[this.currentTurn]); | ||||
* @returns {boolean} | * @returns {boolean} | ||||
*/ | */ | ||||
Board.prototype.checkTurn = function(playerId) { | Board.prototype.checkTurn = function(playerId) { | ||||
('checkTurn'); | |||||
return this.players[this.currentTurn].id == playerId; | return this.players[this.currentTurn].id == playerId; | ||||
}; | }; | ||||
* | * | ||||
* @returns {{win: boolean, pos: Array}} | * @returns {{win: boolean, pos: Array}} | ||||
*/ | */ | ||||
Board.prototype.checkWinner = function() { | |||||
var winPosition = [ | |||||
[0, 1, 2], | |||||
[3, 4, 5], | |||||
[6, 7, 8], | |||||
[0, 3, 6], | |||||
[1, 4, 7], | |||||
[2, 5, 8], | |||||
[0, 4, 8], | |||||
[6, 4, 2] | |||||
]; | |||||
var player = this.players[this.currentTurn]; | |||||
var pos = []; | |||||
var win = winPosition.some(function(win) { | |||||
if (this.cups[win[0]].value === player.label) { | |||||
var res = this.cups[win[0]].value === this.cups[win[1]].value && this.cups[win[1]].value === this.cups[win[2]].value; | |||||
if (res) { | |||||
pos = win; | |||||
return true; | |||||
} | |||||
} | |||||
Board.prototype.checkWinner = function() { | |||||
var win = false; | |||||
var counter=0; | |||||
return false; | |||||
}, this); | |||||
this.cups.forEach(function(cup) { | |||||
if(cup.active == false) { | |||||
counter++; | |||||
} | |||||
}); | |||||
return { | |||||
win: win, | |||||
pos: pos | |||||
}; | |||||
if(counter == 10) { | |||||
win = true; | |||||
} | |||||
/* | |||||
var winPosition = [ | |||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | |||||
]; | |||||
var player = this.players[this.currentTurn]; | |||||
var pos = []; | |||||
var win = winPosition.some(function(win) { | |||||
if (this.cups[win[0]].textContent === player.label) { | |||||
var res = this.cups[win[0]].textContent === this.cups[win[1]].textContent && this.cups[win[1]].textContent === this.cups[win[2]].textContent; | |||||
if (res) { | |||||
pos = win; | |||||
return true; | |||||
} | |||||
} | |||||
return false; | |||||
}, this);*/ | |||||
return { | |||||
win: win | |||||
}; | |||||
}; | |||||
}; | |||||
/** | |||||
* | |||||
* @returns {boolean} | |||||
*/ | |||||
Board.prototype.checkDraw = function() { | |||||
return this.cups.every(function(cup) { | |||||
return cup.value === this.players[0].label || cup.value === this.players[1].label; | |||||
}, this); | |||||
}; | |||||
/** | /** | ||||
* | * |
}); | }); | ||||
}; | }; | ||||
Board.prototype.highlightcups = function(pos) { | |||||
Board.prototype.highlightcups = function() { | |||||
var cups = this.cups; | var cups = this.cups; | ||||
alert('highlightcups'); | alert('highlightcups'); | ||||
pos.forEach(function(i) { | |||||
// cups[i].classList.add('colorRed'); | |||||
}); | |||||
cups.forEach(function(cup) { | cups.forEach(function(cup) { | ||||
cup.setAttribute('marked', 'true'); | cup.setAttribute('marked', 'true'); | ||||
* | * | ||||
* @param pos | * @param pos | ||||
*/ | */ | ||||
Board.prototype.doWinner = function(pos) { | |||||
Board.prototype.doWinner = function() { | |||||
this.disableAll(); | this.disableAll(); | ||||
this.highlightcups(pos); | |||||
this.highlightcups(); | |||||
}; | }; | ||||
/** | |||||
* | |||||
*/ | |||||
Board.prototype.doDraw = function() { | |||||
alert('doDraw'); | |||||
this.lowlightcups(); | |||||
}; | |||||
/** | /** | ||||
* | * | ||||
* @returns {{win: boolean, pos: Array}} | * @returns {{win: boolean, pos: Array}} | ||||
*/ | */ | ||||
Board.prototype.checkWinner = function() { | Board.prototype.checkWinner = function() { | ||||
var winPosition = [ | |||||
[0, 1, 2], | |||||
[3, 4, 5], | |||||
[6, 7, 8], | |||||
var counter=0; | |||||
var win = false; | |||||
this.cups.forEach(function(cup) { | |||||
if (cup.getAttribute('marked') === 'true') { | |||||
counter++; | |||||
} | |||||
}); | |||||
if(counter === 10) { | |||||
win = true; | |||||
} | |||||
[0, 3, 6], | |||||
[1, 4, 7], | |||||
[2, 5, 8], | |||||
[0, 4, 8], | |||||
[6, 4, 2] | |||||
/* | |||||
var winPosition = [ | |||||
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | |||||
]; | ]; | ||||
var player = this.players[this.currentTurn]; | var player = this.players[this.currentTurn]; | ||||
} | } | ||||
return false; | return false; | ||||
}, this); | |||||
}, this);*/ | |||||
return { | return { | ||||
win: win, | win: win, | ||||
}; | }; | ||||
/** | |||||
* | |||||
* @returns {boolean} | |||||
*/ | |||||
Board.prototype.checkDraw = function() { | |||||
return this.cups.every(function(cup) { | |||||
return cup.textContent === this.players[0].label || cup.textContent === this.players[1].label; | |||||
}, this); | |||||
}; | |||||
/** | /** | ||||
* | * |
var socket = new WebSocket('ws://localhost:2667'); | |||||
var socket = new WebSocket('ws://192.168.188.72:2667'); | |||||
var events = { | var events = { | ||||
outgoing: { | outgoing: { | ||||
JOIN_GAME: 'csJoinGame', | JOIN_GAME: 'csJoinGame', | ||||
case events.incoming.GAME_OVER: | case events.incoming.GAME_OVER: | ||||
if (msg.data.player) { | if (msg.data.player) { | ||||
board.doWinner(msg.data.pos); | |||||
} else { | |||||
board.doDraw(); | |||||
board.doWinner(); | |||||
} | } | ||||
socket.send(makeMessage(events.outgoing.QUIT, hero.id)); | socket.send(makeMessage(events.outgoing.QUIT, hero.id)); |
}); | }); | ||||
}); | }); | ||||
board.on(Board.events.DRAW, function(event) { | |||||
wss.clients.forEach(function(client) { | |||||
client.send(makeMessage(events.outgoing.GAME_OVER, event)); | |||||
}); | |||||
}); | |||||
ws.on('message', function incoming(msg) { | ws.on('message', function incoming(msg) { | ||||
Entstehung im Rahmen einer Praktikumsaufgabe im Fach Interaktion. | Entstehung im Rahmen einer Praktikumsaufgabe im Fach Interaktion. | ||||
Voraussetzungen: Node.js wurde installiert. | |||||
Voraussetzungen: Node.js wurde installiert, so dass npm im Terminal verfügbar ist. | |||||
Erst den Web-server starten mit: | |||||
Erst den Web-server starten mit: | |||||
npm run-script web-server | npm run-script web-server | ||||
danach den Socket-server starten mit: | danach den Socket-server starten mit: | ||||
npm run-script socket-server | |||||
npm run-script socket-server | |||||
Becher über die Tasten: | |||||
qwer | |||||
asd | |||||
yx | |||||
c | |||||
verschwinden lassen. |