diff --git a/Webservice/Game.js b/Webservice/Game.js index 1b3d6c6..ae8eae2 100644 --- a/Webservice/Game.js +++ b/Webservice/Game.js @@ -1,5 +1,5 @@ const Player = require('./Player'); -const Hunter = require("./Hunter"); +const Hunter = require('./Hunter'); class Game { @@ -93,15 +93,15 @@ class Game { } } - getPlayerNames(){ + getPlayerNames() { return this.playerNames; } - addPlayerName(playerName){ + addPlayerName(playerName) { this.playerNames.push(playerName); } - removePlayerName(playerName){ + removePlayerName(playerName) { this.playerNames.splice(this.playerNames.indexOf(playerName), 1) } } diff --git a/Webservice/Hunter.js b/Webservice/Hunter.js index b244d18..7f121a6 100644 --- a/Webservice/Hunter.js +++ b/Webservice/Hunter.js @@ -4,13 +4,17 @@ class Hunter { this.isAlive = false; } + getPosition() { + return this.position; + } + move_by(amount) { this.position += amount; } hunt(playerArray) { for (let i = 0; i < playerArray.length; i++) { - if (playerArray[i].position <= this.position) { + if (playerArray[i].position <= this.position - 1) { playerArray[i].isAlive = false; } } diff --git a/Webservice/server.js b/Webservice/server.js index 0431454..a8ac523 100644 --- a/Webservice/server.js +++ b/Webservice/server.js @@ -2,10 +2,10 @@ const Game = require('./Game'); const express = require('express'); const fs = require('fs'); -const {instrument} = require("@socket.io/admin-ui"); +const { instrument } = require("@socket.io/admin-ui"); const app = express(); const server = require('http').createServer(app); -const {Server} = require("socket.io"); +const { Server } = require("socket.io"); const io = new Server(server); let cards = JSON.parse(fs.readFileSync(__dirname + '/../data/fragen_10_06_21_final_new_format.json')); @@ -111,7 +111,6 @@ io.on('connection', socket => { } else { io.to(socket.id).emit('error', 'It\'s not your turn'); } - }); socket.on('get card', function (difficulty) { @@ -119,7 +118,7 @@ io.on('connection', socket => { if (game[socket.room].currentStatus !== Game.STATUS.ONGOING) return; if (game[socket.room].current_player_is(socket.username)) { - io.in(socket.room).emit('card', {'username': socket.username, 'card': getRandomCard(difficulty)}); + io.in(socket.room).emit('card', { 'username': socket.username, 'card': getRandomCard(difficulty) }); generate_log_message(socket.room, socket.username, "CARD", difficulty); } else { @@ -147,16 +146,18 @@ io.on('connection', socket => { io.in(socket.room).emit('player moved', { "next_player": game[socket.room].players[game[socket.room].currentPlayerIndex].name, "player": index, - "position": position + "position": position, + "state": game[socket.room].currentStatus, }); + io.in(socket.room).emit('update Hunter', game[socket.room].hunter.getPosition()); + switch (game[socket.room].currentStatus) { case Game.STATUS.IS_WON: - //TODO show clients the winner - //game[socket.room].winnerIndex + console.log("FINISHED"); break; case Game.STATUS.IS_DRAW: - //TODO show clients that nobody wins + console.log("DRAW"); break; default: break; diff --git a/public/js/Card.js b/public/js/Card.js index a4a7368..4fe5906 100644 --- a/public/js/Card.js +++ b/public/js/Card.js @@ -1,4 +1,4 @@ -function Card(game_board_size, question, answer_1, answer_2, answer_3, answer_4, difficulty, your_turn) { +function Card(game_board_size, question, answer_1, answer_2, answer_3, answer_4, difficulty, your_turn, game_state) { this.card = new PIXI.Graphics(); this.question = question; this.answer_1 = answer_1; @@ -68,8 +68,13 @@ function Card(game_board_size, question, answer_1, answer_2, answer_3, answer_4, this.card.addChild(header); if (difficulty === 0) { - for (let i = 0; i < positions.length; i++) { - if (positions[i] > 15) this.question = "Gewinner: " + playerNames[i]; + if (game_state == 3) { + for (let i = 0; i < positions.length; i++) { + if (positions[i] > 15) this.question = "Gewinner: " + playerNames[i]; + } + } + else if (game_state == 2) { + this.question = "Unentschieden."; } } @@ -123,7 +128,7 @@ function Card(game_board_size, question, answer_1, answer_2, answer_3, answer_4, // OK-Button - if (difficulty === 0 && (positions[0] > 15 || positions[1] > 15 || positions[2] > 15 || positions[3] > 15)) { + if (game_state == 2 || game_state == 3) { this.card.addChild(new Button(0xffffff, 0xcccccc, 0xffffff, this.card_width - 40, 100, this.card_x + 20, this.card_y + this.card_height - 120, "New Game", null, function () { window.location.reload(); }).getButton()); diff --git a/public/js/game.js b/public/js/game.js index 045ebc5..1b8246c 100644 --- a/public/js/game.js +++ b/public/js/game.js @@ -57,7 +57,7 @@ function start_game() { sprites.forEach(sprite => app.stage.addChild(sprite.getSprite())); // Red border - let red_border = generate_red_border(new PIXI.Graphics()); + let red_border = generate_red_border(new PIXI.Graphics(), 1, 9); app.stage.addChild(red_border); @@ -174,9 +174,9 @@ function start_game() { 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[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 @@ -268,13 +268,14 @@ function start_game() { break; } - if (x === 1 && y === 9 && data.position !== 0) { + if (data.state == 2 || data.state == 3) { 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); + { "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, data.state); + red_border.clear(); card.showCard(); show_card = true; } @@ -282,6 +283,14 @@ function start_game() { if (next_player === username) my_turn.text = "Your Turn"; }); + socket.on('update Hunter', function (position) { + x = sprites[position].coord_x; + y = sprites[position].coord_y; + red_border.clear(); + red_border = generate_red_border(new PIXI.Graphics(), x, y); + app.stage.addChild(red_border); + }); + resize(); } @@ -297,9 +306,9 @@ function generate_card_stack(sprite, x, y, onclick) { return sprite; } -function generate_red_border(graphics) { +function generate_red_border(graphics, x, y) { graphics.lineStyle(sprite_size * 0.10, 0x862323, 1); - graphics.drawRect(sprite_size * 1 - sprite_size * 0.2, sprite_size * 9 - sprite_size * 0.2, sprite_size * 1.5, sprite_size * 1.5); + graphics.drawRect(sprite_size * x - sprite_size * 0.2, sprite_size * y - sprite_size * 0.2, sprite_size * 1.5, sprite_size * 1.5); return graphics; }