aboutsummaryrefslogtreecommitdiff
path: root/game.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'game.mjs')
-rw-r--r--game.mjs60
1 files changed, 52 insertions, 8 deletions
diff --git a/game.mjs b/game.mjs
index 7b5d4c9..75c4906 100644
--- a/game.mjs
+++ b/game.mjs
@@ -1,3 +1,5 @@
+import { getMatchCount, shuffle } from "./utils.mjs";
+
class Team {
constructor(player_1, player_2) {
this.player_1 = player_1;
@@ -11,7 +13,7 @@ class Team {
}
}
-class Game {
+export class Game {
constructor(court, team_1, team_2) {
this.court_id = court.id;
this.court_status = court.status;
@@ -29,19 +31,61 @@ class Game {
}
}
+export function generateDummyGames(courts) {
+ let team = new Team("---", "---");
+ let games = [];
+ for (const court of courts ) {
+ let game = new Game(court, team, team);
+ games.push(game);
+ }
+ return games;
+}
+
export class Round {
- constructor(number, courts) {
+ constructor(number, games) {
this.number = number;
- this.courts = courts;
+ this.games = games;
}
- render() {
- let output = `<h2 class="subtitle"> Round ${this.number} </h3><table class="table is-fullwidth"><thead><tr><th align="center">Court</th><th align="center" colspan='2'>Team 1</th><th colspan='2' align="center">Team 2</th></tr></thead>`;
- let team = new Team("---", "---");
- for (const court of this.courts ) {
- let game = new Game(court, team, team);
+ render(description) {
+ let heading = typeof description !== 'undefined' ? description : "Round " + this.number;
+ let output = `<h2 class="subtitle">${heading}</h3><table class="table is-fullwidth"><thead><tr><th align="center">Court</th><th align="center" colspan='2'>Team 1</th><th colspan='2' align="center">Team 2</th></tr></thead>`;
+ for (const game of this.games ) {
output += game.render()
}
output += "</table>";
return output;
}
+}
+
+export function proposeGames(players, courts) {
+ console.log("Proposing new games!");
+ let possibleMatches = getMatchCount(players, courts);
+ let requiredPlayers = possibleMatches * 4;
+ console.log("Required players are " + requiredPlayers);
+ const activeCourts = courts.filter(function (c) { return c.status });
+ const inactiveCourts = courts.filter(function (c) { return !c.status });
+ const activePlayers = players.filter(function (p) { return p.status;});
+ console.log("Total reserved courts are " + inactiveCourts.length + ".");
+ console.log("Total possible matches are " + possibleMatches + ".");
+ console.log("Active players are:");
+ console.log(activePlayers.map((i) => {return i.name;}).join(','));
+ const shuffledPlayers = shuffle(activePlayers);
+ shuffledPlayers.sort((a, b) => a.totalPlayed - b.totalPlayed);
+ const selectedPlayers = shuffledPlayers.slice(0, requiredPlayers);
+ selectedPlayers.sort((a, b) => a.level - b.level);
+ console.log("Selected players are:");
+ console.log(selectedPlayers.map((i) => {return i.name;}).join(','));
+ console.log("The matches are:");
+ let games = [];
+ for (let index = 0; index < possibleMatches; index++) {
+ const startIndex = 4 * index;
+ const endIndex = startIndex + 4;
+ const courtPlayers = selectedPlayers.slice(startIndex, endIndex);
+ const team_1 = new Team(courtPlayers[0].name, courtPlayers[3].name);
+ const team_2 = new Team(courtPlayers[1].name, courtPlayers[2].name);
+ const game = new Game(activeCourts[index], team_1, team_2);
+ game.print();
+ games.push(game);
+ }
+ return games;
} \ No newline at end of file