aboutsummaryrefslogtreecommitdiff
path: root/game.mjs
diff options
context:
space:
mode:
authorKaran Jayachandra <karan.jayachandra@nxp.com>2025-11-12 21:46:00 +0100
committerKaran Jayachandra <karan.jayachandra@nxp.com>2025-11-12 21:46:00 +0100
commit6dff11c285d4990bb9a5b11d6ac36d491bea8de3 (patch)
tree5b3930cb01c9ff78878e6a59caa84bfd96ee53f4 /game.mjs
parent0878eeb2200d609930ba597699933ed852e3ee98 (diff)
Added the history and working version for games
Diffstat (limited to 'game.mjs')
-rw-r--r--game.mjs202
1 files changed, 129 insertions, 73 deletions
diff --git a/game.mjs b/game.mjs
index bc5de34..d5000c3 100644
--- a/game.mjs
+++ b/game.mjs
@@ -1,4 +1,5 @@
-import { getMatchCount, shuffle } from "./utils.mjs";
+import { CourtManager } from "./court.mjs";
+import { getMatchCount, shuffle, Manager } from "./utils.mjs";
class Team {
constructor(playerOne, playerTwo) {
@@ -13,9 +14,9 @@ class Team {
}
}
-export class Game {
- constructor(court, team_1, team_2) {
- this.courtId = court.id;
+class Game {
+ constructor(courtId, team_1, team_2) {
+ this.courtId = courtId;
this.team_1 = team_1;
this.team_2 = team_2;
}
@@ -27,91 +28,146 @@ export class Game {
render() {
let type =
this.team_1.playerOne === "RESERVED" ? `class="is-danger is-dark"` : ``;
- // type = this.team_1.playerOne === "---" ? `class="is-warning is-dark"` : ``;
return `<tr ${type}><td align="center" style="width: 8%;">${
this.courtId + 1
}</td>${this.team_1.render()}${this.team_2.render()}</tr>`;
}
}
-export function generateDummyGames(courts, description) {
+function generateDummyGames(courts, description) {
let team = new Team(description, description);
let games = [];
for (const court of courts) {
- let game = new Game(court, team, team);
+ let game = new Game(court.id, team, team);
games.push(game);
}
return games;
}
-export class Round {
- constructor(games, number) {
- this.games = games;
- this.description =
- typeof number === "undefined" ? "Proposal" : "Round " + number;
+export class GameManager extends Manager {
+ constructor() {
+ super("game", []);
+ this.round = Number(localStorage.getItem("round")) || 0;
+ this.courts = new CourtManager();
+ console.log("Loading game data.");
+ let data = JSON.parse(localStorage.getItem(this.description));
+ if (data === null || data.length === 0) {
+ console.log("Game data unavailable: " + data);
+ this.generate();
+ return;
+ }
+ for (let i = 0; i < data.length; i++) {
+ let courtId = Number(data[i].courtId);
+ let teamOne = new Team(
+ data[i].team_1.playerOne,
+ data[i].team_1.playerTwo
+ );
+ let teamTwo = new Team(
+ data[i].team_2.playerOne,
+ data[i].team_2.playerTwo
+ );
+ this.listData.push(new Game(courtId, teamOne, teamTwo));
+ }
+ console.log("Loaded " + this.listData.length + " games.");
+ this.render();
+ this.addDescription();
}
- render() {
- let output = `<table class="table is-fullwidth"><thead><th colspan='5'>${this.description}</th><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();
+ generate() {
+ console.log("Generating the dummy round.");
+ this.listData = generateDummyGames(this.courts.listData, "---");
+ console.log("Loaded " + this.listData.length + " dummy round.");
+ this.store();
+ this.render();
+ this.addDescription();
+ }
+ addDescription() {
+ let description = this.proposed ? "Proposal" : "Round " + this.round;
+ document.getElementById("game_description").innerHTML = description;
+ }
+ propose(players) {
+ console.log("Proposing new games!");
+ let possibleMatches = getMatchCount(players, this.courts.listData);
+ let requiredPlayers = possibleMatches * 4;
+ console.log("Required players are " + requiredPlayers);
+ const activeCourts = this.courts.listData.filter(function (c) {
+ return c.status;
+ });
+ const inactiveCourts = this.courts.listData.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:");
+ this.listData = generateDummyGames(
+ activeCourts.slice(possibleMatches + 1),
+ "---"
+ );
+ this.listData = this.listData.concat(
+ generateDummyGames(inactiveCourts, "RESERVED")
+ );
+ 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].id, team_1, team_2);
+ game.print();
+ this.listData.push(game);
}
- output += "</table>";
- return output;
+ this.listData.sort((a, b) => a.courtId - b.courtId);
+ this.proposed = true;
+ this.render();
+ this.addDescription();
}
-}
-
-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 = generateDummyGames(
- activeCourts.slice(possibleMatches + 1),
- "---"
- );
- games = games.concat(generateDummyGames(inactiveCourts, "RESERVED"));
- 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);
+ confirm() {
+ this.proposed = false;
+ this.round += 1;
+ localStorage.setItem("round", this.round);
+ // Need to update the number of games played here
+ this.store();
+ this.addDescription();
+ document.getElementById("timer-start").click();
+ const notification = new Notyf({
+ duration: 30 * 1000,
+ position: { x: "center", y: "top" },
+ types: [
+ {
+ type: "success",
+ background: "green",
+ duration: 1000 * 1000,
+ dismissible: true,
+ },
+ ],
+ });
+ notification.success("Round confirmed!");
+ }
+ reset() {
+ localStorage.clear("round");
+ localStorage.clear("round");
+ window.location.reload();
}
- games.sort((a, b) => a.courtId - b.courtId);
- return games;
}