From 162a37c567f8f2839a4968a784d4583b2e9d5e49 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 9 Jun 2020 21:28:23 -0700 Subject: [PATCH] Add scoring once all players have submitted And a not-quite-yet-fully-functional /reset, (or maybe it works but the client is broken). This was a 90-minute flurry of coding, so I haven't looked closely yet at where the bugs are. --- empathy.js | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/empathy.js b/empathy.js index 9bc5740..3ec4a7b 100644 --- a/empathy.js +++ b/empathy.js @@ -13,6 +13,14 @@ class Empathy extends Game { this.next_prompt_id = 1; } + reset() { + this.state.active_prompt = null; + this.state.players_answered = 0; + this.answers = []; + + this.broadcast_event_object('game-state', this.state); + } + add_prompt(items, prompt_string) { const prompt = new Prompt(this.next_prompt_id, items, prompt_string); this.next_prompt_id++; @@ -77,11 +85,54 @@ class Empathy extends Game { /* And notify players how many players have answered. */ this.state.players_answered++; - this.broadcast_event_object('answered', this.state.players_answered); return { valid: true }; } + + compute_scores() { + const word_submitters = {}; + const scores = []; + + for (let a of this.answers) { + for (let word of a.answers) { + if (word_submitters[word]) + word_submitters[word].push(a.player.name); + else + word_submitters[word] = [a.player.name]; + } + } + + for (let a of this.answers) { + let score = 0; + for (let word of a.answers) { + score += word_submitters[word].length; + } + scores.push({ + player: a.player.name, + score: score + }); + } + + scores.sort((a,b) => { + return b.score - a.score; + }); + + const word_submitters_arr = []; + for (let word in word_submitters) + word_submitters_arr.push({word: word, players: word_submitters[word]}); + + word_submitters_arr.sort((a,b) => { + return b.players.length - a.players.length; + }); + + this.state.scores = { + scores: scores, + words: word_submitters_arr + }; + + this.broadcast_event_object('scores', this.state.scores); + } } Empathy.router = express.Router(); @@ -137,6 +188,14 @@ router.post('/answer/:prompt_id([0-9]+)', (request, response) => { request.session.id, request.body.answers); response.json(result); + + if (game.answers.length >= game.players.length) + game.compute_scores(); +}); + +router.post('/reset', (request, response) => { + const game = request.game; + game.reset(); }); Empathy.meta = { -- 2.43.0