console.log("BALLLLLLLLS"); let canvas = document.getElementById('scene'); let ctx = canvas.getContext("2d"); let resizeCanvas = () => { canvas.width = window.innerWidth; canvas.height = window.innerHeight; } resizeCanvas() let onResize = (event) => { resizeCanvas() } window.addEventListener('resize', onResize); let touché = 100000000; //let hitSound = new Audio("/user/themes/quark/images/son/hit.mp3"); let tps = 0; let timer = setInterval(() => { tps++; console.log(tps); if (tps <= 0) { clearInterval(timer); console.log("NOOOO TIME"); } }, 1000); // let tps = 60; // let timer = null; // let tpsTableau = [10, 30, 60, 120]; // const ui = document.getElementById("ui"); // tpsTableau.forEach(valeur => { // const bouton = document.createElement("button"); // bouton.textContent = `${valeur} sec`; // bouton.dataset.time = valeur; // bouton.addEventListener("click", () => { // console.log("CA CLIQUE OUUUUU"); // lancerTimer(valeur); // }); // ui.appendChild(bouton); // }); // function lancerTimer(valeur) { // clearInterval(timer); // stop ancien timer // tps = valeur; // timer = setInterval(() => { // tps--; // if (tps <= 0) { // clearInterval(timer); // tps = 0; // console.log("NOOOO TIME"); // } // }, 1000); // } class P1 { constructor(x, y, s) { this.pos = { x: x, y: y } this.size = s this.vx = 20 this.vy = 20 // this.img = new Image(); // this.img.onload = () => { // this.draw(); // }; // this.img.src = "/user/themes/quark/images/perso.png"; // console.log("img", this.img.src); this.imgNormal = new Image(); this.imgNormal.src = "/user/themes/quark/images/perso.png"; this.imgsad = new Image(); this.imgsad.src = "/user/themes/quark/images/persosad.png"; this.img = this.imgNormal; this.isTouched = false; } draw() { ctx.drawImage(this.img, this.pos.x, this.pos.y, this.size, this.size); } bong(){ // if(this.pos.x >= canvas.width || this.pos.x <= 0){ // this.pos.x = 0; // this.vx = Math.abs(this.vx); // // this.vx = -this.vx; // console.log("ça touche :("); // } // if(this.pos.y >= canvas.height || this.pos.y <= 0){ // this.vy = -this.vy; // console.log("ça touche :("); // } if (this.pos.x <= 0) { this.pos.x = 0; // this.vx = Math.abs(this.vx); } if (this.pos.x >= canvas.width-50) { this.pos.x = canvas.width-50; // this.vx = -Math.abs(this.vx); } if (this.pos.y <= 0) { this.pos.y = 0; // this.vy = Math.abs(this.vy); } if (this.pos.y >= canvas.height-50) { this.pos.y = canvas.height-50; // this.vy = -Math.abs(this.vy); } this.draw(); } hit() { if (this.isTouched) return; this.isTouched = true; this.img = this.imgsad; setTimeout(() => { this.img = this.imgNormal; this.isTouched = false; }, 400); } } let p1 = []; let monP1; function createP1() { monP1 = new P1( canvas.width/2, canvas.height/2, 50 ); monP1.draw() ; p1.push(monP1); } createP1(); let hitSound; window.addEventListener("keydown", (event) => { if (!hitSound) { hitSound = new Audio("/user/themes/quark/images/son/hit.mp3"); } if (event.key === "ArrowLeft") { monP1.pos.x -= monP1.vx //console.log("gauche"); } if (event.key === "ArrowRight") { monP1.pos.x += monP1.vx //console.log("droite"); } if (event.key === "ArrowUp") { monP1.pos.y -= monP1.vy //console.log("haut"); } if (event.key === "ArrowDown") { monP1.pos.y += monP1.vy //console.log("bas"); } ctx.clearRect(0, 0, canvas.width, canvas.height); monP1.draw(); monP1.bong(); }); class Boule { constructor(x, y, s) { // this.x = x; // this.y = y; this.pos = { x: x, y: y } this.size = s this.vx = -10+Math.random()*10; this.vy = -10+Math.random()*10; // this.color = 'hsl(360, 50%, 50%)' this.color = { h:0, s:0, l:100 } } draw(){ ctx.globalCompositeOperation = this.blend; ctx.beginPath(); ctx.fillStyle = `hsl(${this.color.h},${this.color.s}%,${this.color.l}%)`; ctx.arc(this.pos.x, this.pos.y, this.size, 0, 2 * Math.PI); ctx.fill(); } move(){ this.pos.x += this.vx; this.pos.y += this.vy; if(this.pos.x >= canvas.width || this.pos.x <= 0){ this.vx *= -1; } if(/* this.pos.y >= canvas.height || */ this.pos.y <= 0){ this.vy *= -1; } this.draw(); } } let boules = []; let maboule; function createBoule(){ maboule = new Boule( canvas.width, // Math.random()*canvas.width, canvas.height, // Math.random()*canvas.height, 2+Math.random()*10 ); maboule.draw(); boules.push(maboule); } setInterval(()=>{ createBoule(); }, 500) function collisionP1Boule(p1, boule) { let dx = (p1.pos.x + p1.size / 2) - boule.pos.x; let dy = (p1.pos.y + p1.size / 2) - boule.pos.y; let distance = Math.sqrt(dx * dx + dy * dy); return distance < (p1.size / 2 + boule.size); } let anime = () => { ctx.clearRect(0, 0, canvas.width, canvas.height); for (let i = 0; i < boules.length; i++) { for (let j = i + 1; j < boules.length; j++) { let a = boules[i]; let b = boules[j]; let dist = Math.hypot(b.pos.x - a.pos.x, b.pos.y - a.pos.y); if (dist < a.size + b.size) { let nx = (b.pos.x - a.pos.x) / dist; let ny = (b.pos.y - a.pos.y) / dist; let vA = a.vx * nx + a.vy * ny; let vB = b.vx * nx + b.vy * ny; a.vx += (vB - vA) * nx; a.vy += (vB - vA) * ny; b.vx += (vA - vB) * nx; b.vy += (vA - vB) * ny; } } } for (let i = boules.length - 1; i >= 0; i--) { let boule = boules[i]; boule.move(); if (collisionP1Boule(monP1, boule)) { touché--; monP1.hit(); console.log("touhché bouuuuuh"); if (hitSound) { hitSound.currentTime = 0; hitSound.play(); } boules.splice(i, 1); } } monP1.draw(); ctx.fillStyle = "white"; ctx.font = "20px Arial"; ctx.fillText("Boules touchées avant de perdre : " + touché + " (oui c'est beaucoup)", 20, 30); ctx.fillText("Timer : " + tps + " secondes (oupsi ça augmente)", 20, 60); ctx.fillText("Esquive les boules de neige :D", canvas.width - 320, 30); requestAnimationFrame(anime); }; window.requestAnimationFrame(anime);