From 8d6272c85db83c166c5ed88064902a51eadbf602 Mon Sep 17 00:00:00 2001 From: Namonay Date: Mon, 25 Mar 2024 14:53:38 +0100 Subject: [PATCH] add: loud buzzer --- frontend/static/js/api/Matchmaking.js | 1 + frontend/static/js/api/game/TicTacToeGame.js | 41 ++++++++++++------ .../js/api/game/sounds/incorrectbuzzer.mp3 | Bin 0 -> 26469 bytes 3 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 frontend/static/js/api/game/sounds/incorrectbuzzer.mp3 diff --git a/frontend/static/js/api/Matchmaking.js b/frontend/static/js/api/Matchmaking.js index 1bbec59..7081c5e 100644 --- a/frontend/static/js/api/Matchmaking.js +++ b/frontend/static/js/api/Matchmaking.js @@ -27,6 +27,7 @@ class MatchMaking return null; this.gamemode = gamemode + let url = `${window.location.protocol[4] === 's' ? 'wss' : 'ws'}://${window.location.host}/ws/matchmaking/${mode}`; this._socket = new WebSocket(url); diff --git a/frontend/static/js/api/game/TicTacToeGame.js b/frontend/static/js/api/game/TicTacToeGame.js index 871a465..08ddb78 100644 --- a/frontend/static/js/api/game/TicTacToeGame.js +++ b/frontend/static/js/api/game/TicTacToeGame.js @@ -19,16 +19,36 @@ class TicTacToe init() { - this.canvas.addEventListener("mousedown", (event) => { this.onClick(event) }, false); + this.canvas.addEventListener("mousedown", (event, morpion = this) => this.onClick(event, morpion)); } uninit() { - this.canvas.removeEventListener("mousedown", this.onClick, false); + this.canvas.addEventListener("mousedown", (event, morpion = this) => this.onClick(event, morpion)); } - onClick(event) + onClick(event, morpion) { + let x = event.offsetX; + let y = event.offsetY; + let targetMorpion, targetCase; + + function checkCase(targetMorpion, targetCase) + { + console.log("TargetMorpion :" + targetMorpion + " targetCase :" + targetCase); + return (morpion.game[targetMorpion][targetCase] == -1); + } + + function incorrectCase() + { + console.log("bozo"); + } + + function sendCase(targetMorpion, targetCase) + { + // send to backend (stp camille code bien) + } + function findPlace(x, morpion) { if (x <= morpion.gap || x >= morpion.gap + morpion.rectsize * 9) @@ -53,22 +73,15 @@ class TicTacToe return -1; } - let x = event.offsetX; - let y = event.offsetY; - let targetMorpion, targetCase; - targetMorpion = findPlace(x, this) + findPlace(y, this) * 3; if (findPlace(x, this) < 0 || findPlace(y, this) < 0) return -1; targetCase = findSquare(x, this.rectsize * 3 * findPlace(x, this) + this.gap, this) + findSquare(y, this.rectsize * 3 * findPlace(y, this) + this.gap, this) * 3; - console.log("TargetMorpion :" + targetMorpion + " targetCase :" + targetCase); - - - // if (sendCase(targetCase, targetMorpion)) // si la case est disponible - // putCase(targetCase, targetMorpion); // print the case - // else - // return ; + if (checkCase(targetMorpion, targetCase)) + sendCase(targetMorpion, targetCase); + else + incorrectCase(); } DrawSuperMorpion() diff --git a/frontend/static/js/api/game/sounds/incorrectbuzzer.mp3 b/frontend/static/js/api/game/sounds/incorrectbuzzer.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3df61fdf470654ffa28733a8b6e3f1cdb3338fc2 GIT binary patch literal 26469 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