diff --git a/Webservice/Game.js b/Webservice/Game.js index c54f0e0..970bdd3 100644 --- a/Webservice/Game.js +++ b/Webservice/Game.js @@ -19,6 +19,7 @@ class Game { this.winnerIndex = 0; this.round = 0; this.hunter = new Hunter(); + this.playerNames = []; } finish_turn() { @@ -88,6 +89,18 @@ class Game { this.winnerIndex = index; } } + + getPlayerNames(){ + return this.playerNames; + } + + addPlayerName(playerName){ + this.playerNames.push(playerName); + } + + removePlayerName(playerName){ + this.playerNames.splice(this.playerNames.indexOf(playerName), 1) + } } module.exports = Game; \ No newline at end of file diff --git a/Webservice/Player.js b/Webservice/Player.js index f04a288..36773b2 100644 --- a/Webservice/Player.js +++ b/Webservice/Player.js @@ -6,7 +6,13 @@ class Player { } move_by(amount) { - this.position += amount; + if(this.position > 11){ + this.position++; + }else if(this.position+amount > 11){ + this.position = 12; + }else{ + this.position += amount; + } } } diff --git a/Webservice/server.js b/Webservice/server.js index c79ab05..91c7930 100644 --- a/Webservice/server.js +++ b/Webservice/server.js @@ -43,17 +43,19 @@ io.on('connection', socket => { socket.on('add user', function (data) { socket.username = data.username; socket.room = data.room_name; - + if (game[socket.room] === undefined) { game[socket.room] = new Game(); } - + if (game[socket.room].add_player(socket.username)) { - + + game[socket.room].addPlayerName(data.username); addedUser = true; - + socket.emit('login'); socket.join(socket.room); + io.in(socket.room).emit('updatePlayerNames', game[socket.room].getPlayerNames()); if (game[socket.room].players.length === 1) io.to(socket.id).emit('first player'); @@ -61,7 +63,7 @@ io.on('connection', socket => { generate_log_message(socket.room, socket.username, "JOINED", ""); } else { - io.to(socket.id).emit('error', 'Game started already or room has two many members'); + io.to(socket.id).emit('error', 'Game started already or room has too many members'); } }); @@ -78,6 +80,10 @@ io.on('connection', socket => { socket.on('disconnect', function () { if (game[socket.room] !== undefined && addedUser) { + + game[socket.room].removePlayerName(socket.username); + io.in(socket.room).emit('updatePlayerNames', game[socket.room].getPlayerNames()); + socket.broadcast.to(socket.room).emit('user left', socket.username); game[socket.room].remove_player(socket.username); diff --git a/public/img/sprite.jpg b/public/img/sprite.jpg index 2e8254d..f03c052 100644 Binary files a/public/img/sprite.jpg and b/public/img/sprite.jpg differ diff --git a/public/img/spriteSlow.jpg b/public/img/spriteSlow.jpg new file mode 100644 index 0000000..812774c Binary files /dev/null and b/public/img/spriteSlow.jpg differ diff --git a/public/js/Card.js b/public/js/Card.js index e3c66d3..0a07786 100644 --- a/public/js/Card.js +++ b/public/js/Card.js @@ -121,10 +121,10 @@ function Card(game_board_size, s, a1, a2, a3, a4, d, your_turn) { if (answer !== null) { if (_this.right_answer === answer) { //TODO: do this in backend instead to prevent cheating console.log("Richtig"); - socket.emit('card finished', d, true); + socket.emit('card finished', d, true); } else { console.log("Falsch"); - socket.emit('card finished', d, false); + socket.emit('card finished', d, false); } show_card = false; answer = null; diff --git a/public/js/Sprite.js b/public/js/Sprite.js index 2d588b3..b07113c 100644 --- a/public/js/Sprite.js +++ b/public/js/Sprite.js @@ -1,5 +1,9 @@ -function Sprite(x, y) { - this.sprite = PIXI.Sprite.from('/img/sprite.jpg'); +function Sprite(x, y, slow) { + if(slow){ + this.sprite = PIXI.Sprite.from('/img/spriteSlow.jpg'); + }else{ + this.sprite = PIXI.Sprite.from('/img/sprite.jpg'); + } this.coord_x = x; this.coord_y = y; @@ -14,4 +18,4 @@ function Sprite(x, y) { sprite.width = size * 1.5; sprite.height = size * 1.5; }; -} \ No newline at end of file +} diff --git a/public/js/game.js b/public/js/game.js index 07a2a11..466a8fe 100644 --- a/public/js/game.js +++ b/public/js/game.js @@ -22,24 +22,26 @@ let game_board_size = 2000; let max_size = calculate_size(); let sprite_size = Math.floor(game_board_size / 11); +let playerNames = []; + // fields let sprites = [ - new Sprite(9, 9), // lower right - new Sprite(7, 9), - new Sprite(5, 9), - new Sprite(3, 9), - new Sprite(1, 9), // upper right - new Sprite(1, 7), - new Sprite(1, 5), - new Sprite(1, 3), - new Sprite(1, 1), // upper left - new Sprite(3, 1), - new Sprite(5, 1), - new Sprite(7, 1), - new Sprite(9, 1), // lower left - new Sprite(9, 3), - new Sprite(9, 5), - new Sprite(9, 7) + new Sprite(1, 9, false), // lower left + new Sprite(1, 7, false), + new Sprite(1, 5, false), + new Sprite(1, 3, false), + new Sprite(1, 1, false), // upper left + new Sprite(3, 1, false), + new Sprite(5, 1, false), + new Sprite(7, 1, false), + new Sprite(9, 1, false), // upper right + new Sprite(9, 3, false), + new Sprite(9, 5, false), + new Sprite(9, 7, false), + new Sprite(9, 9, true), // lower right + new Sprite(7, 9, true), + new Sprite(5, 9, true), + new Sprite(3, 9, true) ]; function start_game() { @@ -59,17 +61,17 @@ function start_game() { app.stage.addChild(red_border); - // White circles - let player_a = generate_circle(new PIXI.Graphics(), 9, 9, 'yellow', 1); + // Player circles + let player_a = generate_circle(new PIXI.Graphics(), 1, 9, 'yellow', 1); app.stage.addChild(player_a); - let player_b = generate_circle(new PIXI.Graphics(), 9, 9, 'blue', 2); + let player_b = generate_circle(new PIXI.Graphics(), 1, 9, 'blue', 2); app.stage.addChild(player_b); - let player_c = generate_circle(new PIXI.Graphics(), 9, 9, 'green', 3); + let player_c = generate_circle(new PIXI.Graphics(), 1, 9, 'green', 3); app.stage.addChild(player_c); - let player_d = generate_circle(new PIXI.Graphics(), 9, 9, 'red', 4); + let player_d = generate_circle(new PIXI.Graphics(), 1, 9, 'red', 4); app.stage.addChild(player_d); @@ -162,28 +164,33 @@ function start_game() { score_button_text.x = sprite_size * 3 + 25 - sprite_size * 0.2; score_button_text.y = sprite_size * 7 + 25 - sprite_size * 0.2 + sprite_size * 0.5; - score_button = new PIXI.Graphics(); - score_button.lineStyle(4, 0x000000, 1); - score_button.beginFill(0x7d7d7d); - score_button.drawRect(sprite_size * 3 - sprite_size * 0.2, sprite_size * 7 - sprite_size * 0.2 + sprite_size * 0.5, score_button_text.width + 50, score_button_text.height + 50); - score_button.endFill(); - score_button.interactive = true; - score_button.buttonMode = true; - score_button.defaultCursor = 'pointer'; - score_button.on('pointerdown', function () { - card = new Card(game_board_size, "", - {"text": "Spieler 1: " + positions[0], "status": false}, - {"text": "Spieler 2: " + positions[1], "status": false}, - {"text": "Spieler 3: " + positions[2], "status": false}, - {"text": "Spieler 4: " + positions[3], "status": false}, 0, false); - card.showCard(); - show_card = true; + socket.on('updatePlayerNames', function (playerNames) { + + this.playerNames = playerNames; + + score_button = new PIXI.Graphics(); + score_button.lineStyle(4, 0x000000, 1); + score_button.beginFill(0x7d7d7d); + score_button.drawRect(sprite_size * 3 - sprite_size * 0.2, sprite_size * 7 - sprite_size * 0.2 + sprite_size * 0.5, score_button_text.width + 50, score_button_text.height + 50); + score_button.endFill(); + score_button.interactive = true; + score_button.buttonMode = true; + score_button.defaultCursor = 'pointer'; + score_button.on('pointerdown', function () { + card = new Card(game_board_size, "", + { "text": playerNames[0]? playerNames[0] + ": " + positions[0] : ("Kein Spieler"), "status": false }, + { "text": playerNames[1]? playerNames[1] + ": " + positions[1] : ("Kein Spieler"), "status": false }, + { "text": playerNames[2]? playerNames[2] + ": " + positions[2] : ("Kein Spieler"), "status": false }, + { "text": playerNames[3]? playerNames[3] + ": " + positions[3] : ("Kein Spieler"), "status": false }, 0, false); + card.showCard(); + show_card = true; + }); + + app.stage.addChild(score_button); + score_button.addChild(score_button_text); }); - app.stage.addChild(score_button); - score_button.addChild(score_button_text); - socket.on('first player', function () { my_turn.text = "Your Turn"; }); @@ -230,25 +237,25 @@ function start_game() { case 0: positions[0] = data.position; player_a.clear(); - player_a = generate_circle(new PIXI.Graphics(), y, x, 'yellow', 1); + player_a = generate_circle(new PIXI.Graphics(), x, y, 'yellow', 1); app.stage.addChild(player_a); break; case 1: positions[1] = data.position; player_b.clear(); - player_b = generate_circle(new PIXI.Graphics(), y, x, 'blue', 2); + player_b = generate_circle(new PIXI.Graphics(), x, y, 'blue', 2); app.stage.addChild(player_b); break; case 2: positions[2] = data.position; player_c.clear(); - player_c = generate_circle(new PIXI.Graphics(), y, x, 'green', 3); + player_c = generate_circle(new PIXI.Graphics(), x, y, 'green', 3); app.stage.addChild(player_c); break; case 3: positions[3] = data.position; player_d.clear(); - player_d = generate_circle(new PIXI.Graphics(), y, x, 'red', 4); + player_d = generate_circle(new PIXI.Graphics(), x, y, 'red', 4); app.stage.addChild(player_d); break; } @@ -273,7 +280,7 @@ function generate_card_stack(sprite, x, y, onclick) { function generate_red_border(graphics) { graphics.lineStyle(sprite_size * 0.10, 0x862323, 1); - graphics.drawRect(sprite_size * 9 - sprite_size * 0.2, sprite_size * 9 - sprite_size * 0.2, sprite_size * 1.5, sprite_size * 1.5); + graphics.drawRect(sprite_size * 1 - sprite_size * 0.2, sprite_size * 9 - sprite_size * 0.2, sprite_size * 1.5, sprite_size * 1.5); return graphics; } @@ -292,6 +299,9 @@ function generate_circle(graphics, x, y, color, offset) { case 'blue': graphics.beginFill(0x4169E1, 1); break; + case 'white': + graphics.beginFill(0xFFFFFF, 1); + break; } switch (offset) { case 1: @@ -341,4 +351,4 @@ function resize() { app.stage.scale.set(size / game_board_size, size / game_board_size); app.renderer.resize(size, size); -} +} \ No newline at end of file