Skip to content

Commit

Permalink
ayy
Browse files Browse the repository at this point in the history
  • Loading branch information
Axxiar committed Apr 4, 2022
1 parent 49425a3 commit 69bff0b
Showing 1 changed file with 63 additions and 8 deletions.
71 changes: 63 additions & 8 deletions js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ window.onload = () => {
root.style.setProperty('--light', randomColor[0]);
root.style.setProperty('--dark', randomColor[1]);

//Récupérer les paramètres choisis dans index.html
let passedArgs = new URLSearchParams(window.location.search)
pseudo = passedArgs.get("pseudo")
difficulte = passedArgs.get("difficulty")
Expand All @@ -35,9 +36,12 @@ window.onload = () => {

// obligé de cleanup, au cas où un petit rigolo change l'URL...
if (pseudo == undefined || pseudo.replaceAll(" ", "") == "") {
pseudo = choice(["Théophile", "L'anonyme dissident", "Rick Astley", "Bababooey", "The Rock", "Risitas", "xX_SudokuMaster75_Xx", "5UD0KU_PGM", "DarkFlameMaster", "D4RKSaSuke"])
pseudo = choice(["Théophile", "L'anonyme dissident", "Rick Astley",
"Bababooey", "The Rock", "Risitas", "xX_SudokuMaster75_Xx", "5UD0KU_PGM",
"DarkFlameMaster", "D4RKSaSuke"])
}

// cleanup de la difficulté
let isDifficValid = false
for (let i of Array.apply(null, document.getElementById("time").options)) {
if (difficulte == i.value) {
Expand All @@ -47,40 +51,54 @@ window.onload = () => {
}
if (!isDifficValid) document.getElementById("time").value = "15min"
else document.getElementById("time").value = difficulte


setUp();
alert("Bienvenue " + pseudo + "!\n")
//démarrer brython
brython();

document.getElementById("board").oncontextmenu = (event) => {
pullOut(event.path[0])
console.log()
return false
//préparer la suppression clic droit
if (navigator.oscpu.contains("Linux")) {
document.getElementById("board").oncontextmenu = (event) => {
pullOut(event.target[0])
return false
}
} else {
document.getElementById("board").oncontextmenu = (event) => {
pullOut(event.path[0])
return false
}
}
}

window.onclick = () => {
// A cause de la sécurité anti-autoplay, on doit attendre que l'utilisateur clique avant de jouer une musique
if (setUpMusic) return
setUpMusic = true
music()
}

//Fonction qu'on va remplacer dans Python. On la crée pour que l'interpréteur JS ne se plaigne pas, puis on l'assigne dans Python
function pullOut(a) {

}

//Redémarrer le chrono à un début de partie
function startChrono() {
secs = 0
minutes = 0
Time()
}

//Stopper le chrono
function stopChrono() {
clearTimeout(promise)

//obligé
clearTimeout(promise + 1)
}

//Créer la couleur d'arrière-plan du site, et sa version "foncée"
function randomRgb() {
let red = Math.floor((1 + Math.random()) * 256 / 2) - 20;
let green = Math.floor((1 + Math.random()) * 256 / 2) - 20;
Expand All @@ -92,7 +110,7 @@ function randomRgb() {
return ["rgb(" + red + ", " + green + ", " + blue + ")", "rgb(" + darkRed + ", " + darkGreen + ", " + darkBlue + ")"];
}


//Mettre le volume à 0 (cette fonction n'arrête pas la musique)
function mute() {
let muteButton = document.getElementById("iMute")
if (isMuted) {
Expand All @@ -113,11 +131,14 @@ function mute() {
isMuted = !isMuted
}

//Arrêter prématurément l'animation (les flashs verts) de victoire, au cas où un joueur commence immédiatement une nouvelle partie
function clearWinAnim() {
for (const i of later) {
clearTimeout(i)
}
}

//La fonction qui s'occupe de faire apparaitre/disparaitre la bulle info
function toggleInfoDiv() {
infoDiv = document.getElementById("info");
if (infoDiv.style.display=="none") {
Expand Down Expand Up @@ -151,33 +172,43 @@ function toggleInfoDiv() {
}
}

//sudoku.html a-t-il des arguments avec lui?
function wereArgsPassed() {
return window.location.search != ""
}

//ajouter un attribut vide comme disabled (pour aider Python)
function addAttr(el, attr) {
let a = document.createAttribute(attr)
el.setAttributeNode(a)
}

//ajouter une classe (pour aider Python)
function addClass(id, classe) {
document.getElementById(id).classList.add(classe)
}

//vérifier si un élément a une classe (pour aider Python)
function hasClass(element, classe) {
return element.classList.contains(classe)
}

//supprimer une classe (pour aider Python)
function removeClass(element, classe) {
if (element.classList == undefined) { return; }
element.classList.remove(classe)
}

//Réplique de la fonction random.choice de Python: choisir un élément au hasard dans une liste et le retourner
function choice(choices) {
/* Array -> any
Hyp: liste non vide
*/
var index = Math.floor(Math.random() * choices.length);
return choices[index];
}

//Lancer une musique
function music() {
currentMusic = choice(bgMusic)
if (!currentMusic.paused) return
Expand All @@ -189,7 +220,9 @@ function music() {
currentMusic.play()
}

//quelques préliminaires
function setUp() {
//Quand une musique se termine, on attend 3 secondes et on en joue une autre
for (let mus of bgMusic) {
mus.onended = () => {
setTimeout(() => {
Expand All @@ -199,19 +232,26 @@ function setUp() {
}
}

//Dessiner un tableau vide
changeBoard(9)
//Confirmer que cette fonctin s'est lancée
hasSetUp = true;
}

function selectNumber() {
//si on est pas censés toucher à la grille (si on a gagné par exemple), alors annuler l'action
if (document.querySelector("body").classList.contains("uneditable")) return


if (numSelected != null) {
//si ce nombre était déja séléctionné, on le désélectionne
if (this.classList.contains("number-selected")) {
numSelected.classList.remove("number-selected");
return
}
numSelected.classList.remove("number-selected"); // on enlève le background si il y'a déjà un nombre de séléctionné
}
//sinon, on le séléctionne
numSelected = this;
numSelected.classList.add("number-selected");
}
Expand Down Expand Up @@ -290,38 +330,46 @@ function changeBoard(newSize) {
}
}

//un moyen de récupérer les cells sans saturer le code
function getAllCells() {
return document.getElementsByClassName("cell")
}

//un moyen de récupérer les chiffres sans saturer le code
function getAllDigits() {
return document.getElementsByClassName("number")
}

function win() {
//c'est une variable très importante, elle assure le bon fonctionnement de la musique et
//rend également la board intouchable quand on gagne
won = true

//on reset la musique
currentMusic.pause()
currentMusic.currentTime = 0

//on joue la musique de victoire, si on y a le droit
if (!isMuted) {
winSound.currentTime = 0
winSound.volume = 0.3
winSound.play()
}

//rendre la board et les digits intouchables
document.querySelector("body").classList.add("uneditable")

//désélectionner le nombre en cours
if (numSelected != null) {
numSelected.classList.remove("number-selected");
}

//si le joueur s'est trompé juste avant, on retire la propriété "faux" à toutes les cells, puisqu'on a gagné
for (let i of getAllCells()) {
i.classList.remove("wrong")
}

//anim
//anim (flashs verts, donc le premier devrait être synchro avec la musique)
for (let i = 0;i<3;i++) {
later.push(setTimeout(() => {
for (let cell of getAllCells()) {
Expand All @@ -342,6 +390,7 @@ function win() {

stopChrono()

//trier le leaderboard et le mettre à jour
updateLeaderboard()
}

Expand Down Expand Up @@ -420,6 +469,8 @@ function updateLeaderboard() {
//on coupe le nouveau dernier
leaderboard.length = 10
}

//placer le leaderboard
for (let pos in document.getElementsByClassName("lead")) {

if (JSON.stringify(leaderboard[pos]) == 'null') {
Expand Down Expand Up @@ -457,9 +508,12 @@ function updateLeaderboard() {
}
}

//logique du bouton abandonner
function giveUp() {
document.getElementById("giveup").blur()
if (won) return

//cette variable permet de ne pas avoir de problèmes avec la musique
wonByGiveup = true
document.querySelector("body").classList.add("uneditable")

Expand All @@ -468,6 +522,7 @@ function giveUp() {
numSelected.classList.remove("number-selected");
}

//faire une board rouge pour différencier
let cells = getAllCells()
for (let i in cells) {
cells[i].innerText = solution[i]
Expand Down

0 comments on commit 69bff0b

Please sign in to comment.