- /* Before closing out the current round, we accumulate that score
- * for each player into their runnning total. */
- for (let score of this.state.scores.scores) {
- const player = this.players.find(p => p.name === score.player);
- if (player.score)
- player.score += score.score;
- else
- player.score = score.score;
-
- /* And broadcast that new score out. */
- this.broadcast_event('player-update', player.info_json());
+ /* Before closing out the current round, we accumulate into each
+ * player's overall score the results from the current round.
+ *
+ * Note: Rather than applying the actual points from each round
+ * into the player's score, we instead accumulate up the number of
+ * players that they bested in each round. This ensures that each
+ * round receives an equal weight in the overall scoring. */
+ let bested = this.state.scores.scores.reduce(
+ (total, score) => total + score.players.length, 0);
+ for (let i = 0; i < this.state.scores.scores.length; i++) {
+ const score = this.state.scores.scores[i];
+ bested -= score.players.length;
+ for (let player_name of score.players) {
+ const player = this.players.find(p => p.name === player_name);
+ if (player.score)
+ player.score += bested;
+ else
+ player.score = bested;
+
+ /* And broadcast that new score out. */
+ this.broadcast_event('player-update', player.info_json());
+ }