Compare commits
5
Commits
9d4ceebfbc
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a0b8c2d1a | ||
|
|
ebd4eeb550 | ||
|
|
aab22ecdd1 | ||
|
|
3f3afef40d | ||
|
|
c2be377a92 |
+27
-33
@@ -19,8 +19,7 @@ Board.events = {
|
|||||||
GAME_READY: 'gameReady',
|
GAME_READY: 'gameReady',
|
||||||
CUP_MARKED: 'cupMarked',
|
CUP_MARKED: 'cupMarked',
|
||||||
CHANGE_TURN: 'changeTurn',
|
CHANGE_TURN: 'changeTurn',
|
||||||
WINNER: 'winner',
|
WINNER: 'winner'
|
||||||
DRAW: 'draw'
|
|
||||||
};
|
};
|
||||||
|
|
||||||
util.inherits(Board, EventEmitter);
|
util.inherits(Board, EventEmitter);
|
||||||
@@ -67,9 +66,7 @@ Board.prototype.mark = function(cupId) {
|
|||||||
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});
|
this.emit(Board.events.WINNER, {player: this.players[this.currentTurn]});
|
||||||
} else if (this.checkDraw()) {
|
|
||||||
this.emit(Board.events.DRAW, {});
|
|
||||||
} 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]);
|
||||||
@@ -83,7 +80,6 @@ Board.prototype.mark = function(cupId) {
|
|||||||
* @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;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -91,52 +87,50 @@ Board.prototype.checkTurn = function(playerId) {
|
|||||||
*
|
*
|
||||||
* @returns {{win: boolean, pos: Array}}
|
* @returns {{win: boolean, pos: Array}}
|
||||||
*/
|
*/
|
||||||
Board.prototype.checkWinner = function() {
|
Board.prototype.checkWinner = function() {
|
||||||
|
var win = false;
|
||||||
|
var counter=0;
|
||||||
|
|
||||||
|
this.cups.forEach(function(cup) {
|
||||||
|
if(cup.active == false) {
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(counter == 10) {
|
||||||
|
win = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
var winPosition = [
|
var winPosition = [
|
||||||
[0, 1, 2],
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||||
[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 player = this.players[this.currentTurn];
|
||||||
var pos = [];
|
var pos = [];
|
||||||
|
|
||||||
var win = winPosition.some(function(win) {
|
var win = winPosition.some(function(win) {
|
||||||
if (this.cups[win[0]].value === player.label) {
|
if (this.cups[win[0]].textContent === player.label) {
|
||||||
var res = this.cups[win[0]].value === this.cups[win[1]].value && this.cups[win[1]].value === this.cups[win[2]].value;
|
var res = this.cups[win[0]].textContent === this.cups[win[1]].textContent && this.cups[win[1]].textContent === this.cups[win[2]].textContent;
|
||||||
|
|
||||||
if (res) {
|
if (res) {
|
||||||
pos = win;
|
pos = win;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}, this);
|
}, this);*/
|
||||||
|
|
||||||
return {
|
return {
|
||||||
win: win,
|
win: win
|
||||||
pos: pos
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @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);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -141,7 +141,10 @@ ellipse{
|
|||||||
100%{top: var(--top325)}
|
100%{top: var(--top325)}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@-webkit-keyframes Shoot{
|
||||||
|
0%{top: var(--top)}
|
||||||
|
100%{top: var(--top325)}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+88
-73
@@ -60,14 +60,12 @@ Board.prototype.enableTurn = function() {
|
|||||||
cup.setAttribute('active', 'true');
|
cup.setAttribute('active', 'true');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
ball.classList.remove("Shoot");
|
||||||
};
|
};
|
||||||
|
|
||||||
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');
|
||||||
@@ -82,88 +80,110 @@ Board.prototype.lowlightcups = function() {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Board.prototype.shoot = function(cup) {
|
||||||
|
ball.classList.add("Shoot");
|
||||||
|
switch(cup) {
|
||||||
|
case 0:
|
||||||
|
root.style.setProperty('--top325', "-515"+ "px");
|
||||||
|
ball.style.top = "-515px";
|
||||||
|
ball.style.left = "-155px";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
root.style.setProperty('--top325', "-515"+ "px");
|
||||||
|
ball.style.top = "-515px";
|
||||||
|
ball.style.left = "-50px";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
root.style.setProperty('--top325', "-515"+ "px");
|
||||||
|
ball.style.top = "-515px";
|
||||||
|
ball.style.left = "50px";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
root.style.setProperty('--top325', "-515"+ "px");
|
||||||
|
ball.style.top = "-515px";
|
||||||
|
ball.style.left = "150px";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
root.style.setProperty('--top325', "-430"+ "px");
|
||||||
|
ball.style.top = "-430px";
|
||||||
|
ball.style.left = "-100px";
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
root.style.setProperty('--top325', "-430"+ "px");
|
||||||
|
ball.style.top = "-430px";
|
||||||
|
ball.style.left = "0px";
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
root.style.setProperty('--top325', "-430"+ "px");
|
||||||
|
ball.style.top = "-430px";
|
||||||
|
ball.style.left = "100px";
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
root.style.setProperty('--top325', "-340"+ "px");
|
||||||
|
ball.style.top = "-340px"
|
||||||
|
ball.style.left = "-50px";
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
root.style.setProperty('--top325', "-340"+ "px");
|
||||||
|
ball.style.top = "-340px"
|
||||||
|
ball.style.left = "50px";
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
root.style.setProperty('--top325', "-250"+ "px");
|
||||||
|
ball.style.top = "-250px"
|
||||||
|
ball.style.left = "0px";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Board.prototype.getCup = function(code) {
|
Board.prototype.getCup = function(code) {
|
||||||
ball.classList.add("Shoot");
|
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
case 'q':
|
case 'q':
|
||||||
case 'Q':
|
case 'Q':
|
||||||
root.style.setProperty('--top325', "-515"+ "px");
|
|
||||||
ball.style.top = "-515px";
|
|
||||||
ball.style.left = "-155px";
|
|
||||||
return "cup1";
|
return "cup1";
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
case 'W':
|
case 'W':
|
||||||
root.style.setProperty('--top325', "-515"+ "px");
|
|
||||||
ball.style.top = "-515px";
|
|
||||||
ball.style.left = "-50px";
|
|
||||||
return "cup2";
|
return "cup2";
|
||||||
//removeCup("2");j
|
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
case 'E':
|
case 'E':
|
||||||
root.style.setProperty('--top325', "-515"+ "px");
|
|
||||||
ball.style.top = "-515px";
|
|
||||||
ball.style.left = "50px";
|
|
||||||
return "cup3";
|
return "cup3";
|
||||||
//removeCup("3");
|
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
case 'R':
|
case 'R':
|
||||||
root.style.setProperty('--top325', "-515"+ "px");
|
|
||||||
ball.style.top = "-515px";
|
|
||||||
ball.style.left = "150px";
|
|
||||||
return "cup4";
|
return "cup4";
|
||||||
//removeCup("4");
|
|
||||||
break;
|
break;
|
||||||
case 'a':
|
case 'a':
|
||||||
case 'A':
|
case 'A':
|
||||||
root.style.setProperty('--top325', "-430"+ "px");
|
|
||||||
ball.style.top = "-430px";
|
|
||||||
ball.style.left = "-100px";
|
|
||||||
return "cup5";
|
return "cup5";
|
||||||
//removeCup("5");
|
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
case 'S':
|
case 'S':
|
||||||
root.style.setProperty('--top325', "-430"+ "px");
|
|
||||||
ball.style.top = "-430px";
|
|
||||||
ball.style.left = "0px";
|
|
||||||
return "cup6";
|
return "cup6";
|
||||||
//removeCup("6");
|
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
case 'D':
|
case 'D':
|
||||||
root.style.setProperty('--top325', "-430"+ "px");
|
|
||||||
ball.style.top = "-430px";
|
|
||||||
ball.style.left = "100px";
|
|
||||||
//removeCup("7");
|
|
||||||
return "cup7";
|
return "cup7";
|
||||||
break;
|
break;
|
||||||
case 'y':
|
case 'y':
|
||||||
case 'Y':
|
case 'Y':
|
||||||
root.style.setProperty('--top325', "-340"+ "px");
|
|
||||||
ball.style.top = "-340px"
|
|
||||||
ball.style.left = "-50px";
|
|
||||||
//removeCup("8");
|
|
||||||
return "cup8";
|
return "cup8";
|
||||||
break;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'X':
|
case 'X':
|
||||||
root.style.setProperty('--top325', "-340"+ "px");
|
|
||||||
ball.style.top = "-340px"
|
|
||||||
ball.style.left = "50px";
|
|
||||||
//removeCup("9");
|
|
||||||
return "cup9";
|
return "cup9";
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
case 'C':
|
case 'C':
|
||||||
root.style.setProperty('--top325', "-250"+ "px");
|
|
||||||
ball.style.top = "-250px"
|
|
||||||
ball.style.left = "0px";
|
|
||||||
//removeCup("10");
|
|
||||||
return "cup10";
|
return "cup10";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -177,6 +197,7 @@ Board.prototype.getCup = function(code) {
|
|||||||
*/
|
*/
|
||||||
Board.prototype.mark = function(event) {
|
Board.prototype.mark = function(event) {
|
||||||
if (this.ready) {
|
if (this.ready) {
|
||||||
|
|
||||||
var target = document.getElementById(this.getCup(event.key));
|
var target = document.getElementById(this.getCup(event.key));
|
||||||
if (target.getAttribute('data-intent') === 'gamecup' && target.getAttribute('active') === 'true') {
|
if (target.getAttribute('data-intent') === 'gamecup' && target.getAttribute('active') === 'true') {
|
||||||
this.onMark(this.cups.indexOf(target));
|
this.onMark(this.cups.indexOf(target));
|
||||||
@@ -196,30 +217,26 @@ Board.prototype.doMark = function(cupId, label) {
|
|||||||
cup.textContent = label;
|
cup.textContent = label;
|
||||||
//cup.classList.add('notActive');
|
//cup.classList.add('notActive');
|
||||||
// removeCup
|
// removeCup
|
||||||
|
if(cup.getAttribute('marked') === 'false') this.shoot(cupId);
|
||||||
setTimeout(this.cups[cupId].classList.add("fadeAway") ,1000);
|
setTimeout(this.cups[cupId].classList.add("fadeAway") ,1000);
|
||||||
cup.setAttribute('marked', 'true');
|
cup.setAttribute('marked', 'true');
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
ball.style.top = "0px";
|
ball.style.top = "0px";
|
||||||
ball.style.left = "0px";
|
ball.style.left = "0px";
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
this.currentTurn = (this.currentTurn + 1) % 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @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();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -241,17 +258,23 @@ Board.prototype.highlightScoreboard = function(playerId) {
|
|||||||
* @returns {{win: boolean, pos: Array}}
|
* @returns {{win: boolean, pos: Array}}
|
||||||
*/
|
*/
|
||||||
Board.prototype.checkWinner = function() {
|
Board.prototype.checkWinner = function() {
|
||||||
|
var counter=0;
|
||||||
|
var win = false;
|
||||||
|
this.cups.forEach(function(cup) {
|
||||||
|
if (cup.getAttribute('marked') === 'true') {
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(counter === 10) {
|
||||||
|
win = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
var winPosition = [
|
var winPosition = [
|
||||||
[0, 1, 2],
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||||
[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 player = this.players[this.currentTurn];
|
||||||
@@ -268,7 +291,7 @@ Board.prototype.checkWinner = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}, this);
|
}, this);*/
|
||||||
|
|
||||||
return {
|
return {
|
||||||
win: win,
|
win: win,
|
||||||
@@ -277,15 +300,7 @@ Board.prototype.checkWinner = function() {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @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);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -114,9 +114,7 @@ socket.onmessage = function(event){
|
|||||||
|
|
||||||
case events.incoming.GAME_OVER:
|
case events.incoming.GAME_OVER:
|
||||||
if (msg.data.player) {
|
if (msg.data.player) {
|
||||||
board.doWinner(msg.data.pos);
|
board.doWinner();
|
||||||
} else {
|
|
||||||
board.doDraw();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
socket.send(makeMessage(events.outgoing.QUIT, hero.id));
|
socket.send(makeMessage(events.outgoing.QUIT, hero.id));
|
||||||
|
|||||||
@@ -71,11 +71,6 @@ wss.on('connection', function connection(ws) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
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) {
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,28 @@ Ein Projekt das es ermöglicht Beerpong über das Internet von zwei unabhängige
|
|||||||
|
|
||||||
Entstehung im Rahmen einer Praktikumsaufgabe im Fach Interaktion.
|
Entstehung im Rahmen einer Praktikumsaufgabe im Fach Interaktion.
|
||||||
|
|
||||||
Voraussetzungen: Node.js wurde installiert.
|
## Vorbereitung
|
||||||
|
|
||||||
|
Voraussetzungen: Node.js wurde installiert, so dass npm im Terminal verfügbar ist.
|
||||||
|
In der Kommandozeile dann in das Verzeichnis Output wechseln und Folgende Schritte befolgen.
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
Die Website ist dann unter http://localhost:3000 verfügbar. Es kann gespielt werden sobald zwei Browser Fenster diese Website besuchen.
|
||||||
|
|
||||||
|
Wenn in der Datei Beerpong/public/app.js in der ersten Zeile anstatt localhost die IP-Adresse des Servers hinterlegt wird, kann von jedem PC im Netzwerk über http://"server-ip":3000 (ersetzt mit ip-Adresse, ohne Anführungszeichen) das Spiel gespielt werden.
|
||||||
|
|
||||||
|
## zum Spielen
|
||||||
|
|
||||||
|
Erst muss jeder Spieler seinen Namen eingeben und mit Start bestätigen.
|
||||||
|
|
||||||
|
Becher über die Tasten:
|
||||||
|
qwer
|
||||||
|
asd
|
||||||
|
yx
|
||||||
|
c
|
||||||
|
verschwinden lassen.
|
||||||
|
|||||||
Reference in New Issue
Block a user