<!doctype html> <html> <head> <meta name="description" content="Courtesy of [lovasoa] 15yr old brother - https://news.ycombinator.com/item?id=18866500"> <meta charset='UTF-8'> <title>Jeu vidéo de Noé</title> </head> <body style="text-align: center"> <canvas width="300" height="300">error</canvas> <script> canvas = document.querySelector("canvas") ctx = canvas.getContext("2d") canvas.onclick = function () { // Passage en plein écran lorsque l'on clique sur le canvas canvas.requestFullscreen().then(function () { // Verrouillage de l'orientation 'portrait' lorsque l'on passe en plein écran screen.lockOrientationUniversal = screen.lockOrientation || screen.mozLockOrientation || screen.msLockOrientation; screen.lockOrientationUniversal("portrait-primary") }) } //variables score = 0 accelerationMax = 1 speedLimit = 15 friction = 0.95 brake = 0.2 vitesseEnnemi = 0 spawn = 0 powerUpSpeed = 0.3 adaptationEnnemi = 20 PowerUpspawnRate = 0.8 ennemi = { x: canvas.width / 2, y: canvas.height / 2, width: 35, height: 10, } hero = { x: 0, y: 0, width: 25, height: 25, speed: { x: 0, y: 0, }, acceleration: { x: 0, y: 0, } } reward = { x: 100, y: 100, width: adaptationEnnemi, height: adaptationEnnemi, } powerUp = { x: Math.random() * canvas.width, y: Math.random() * canvas.height, width: 10, height: 10, speed: 0.3 } function distance(hy, hx, ey, ex) { return Math.sqrt(Math.pow(hy - ey, 2) + Math.pow(hx - ex, 2)) } function update() { //distance function distance(hy, hx, ey, ex) { return Math.sqrt(Math.pow(hy - ey, 2) + Math.pow(hx - ex, 2)) } var norme = distance(hero.y, hero.x, ennemi.y, ennemi.x) //ennemi var vy = (hero.y - ennemi.y) * vitesseEnnemi / norme var vx = (hero.x - ennemi.x) * vitesseEnnemi / norme if (score >= 10) { ennemi.y += vy ennemi.x += vx vitesseEnnemi = score / adaptationEnnemi } //acceleration hero.speed.x += hero.acceleration.x hero.speed.y += hero.acceleration.y hero.x += hero.speed.x hero.y += hero.speed.y if (hero.speed.x > speedLimit) { hero.speed.x = speedLimit } if (hero.speed.y > speedLimit) { hero.speed.y = speedLimit } hero.speed.x *= friction hero.speed.y *= friction //test collision murs if (hero.y + hero.height < 0) { hero.y = canvas.height } if (hero.y > canvas.height) { hero.y = 0 } if (hero.x + hero.width < 0) { hero.x = canvas.width } if (hero.x > canvas.width) { hero.x = 0 } //collisions if (collision(reward, hero)) { score += 1 reward.x = Math.random() * (canvas.width - reward.width) reward.y = Math.random() * (canvas.height - reward.height) if (spawn < PowerUpspawnRate) { spawn = Math.random() } } if (score >= 10) { if (collision(ennemi, hero)) { score -= Math.round(score / 10) ennemi.x = canvas.width / 2 ennemi.y = canvas.height / 2 hero.x = 1 hero.y = 1 } } if (spawn > PowerUpspawnRate) { if (collision(powerUp, hero)) { score += 5 powerUp.x = Math.random() * (canvas.width - powerUp.width) powerUp.y = Math.random() * (canvas.height - powerUp.height) spawn = Math.random() } } draw() requestAnimationFrame(update) } function draw() { ctx.fillStyle = 'white' ctx.fillRect(0, 0, canvas.width, canvas.height) // White background ctx.strokeRect(0, 0, canvas.width, canvas.height) ctx.fillStyle = 'black' ctx.fillRect(hero.x, hero.y, hero.width, hero.height) ctx.fillStyle = 'blue' ctx.fillRect(reward.x, reward.y, reward.width, reward.height) ctx.fillStyle = 'black' ctx.fillText("score: " + score, canvas.width / 2, 10) if (score >= 10) { ctx.fillStyle = 'red' ctx.fillRect(ennemi.x, ennemi.y, ennemi.width, ennemi.height) } if (spawn > PowerUpspawnRate) { ctx.fillStyle = 'cyan' ctx.fillRect(powerUp.x, powerUp.y, powerUp.width, powerUp.height) } } update() function collision(r, h) { var xin = h.x + h.width >= r.x && h.x <= r.x + r.width, yin = h.y + h.height >= r.y && h.y <= r.y + r.height return xin && yin } function keyDown(evt) { if (evt.key === "ArrowDown") { hero.acceleration.y = accelerationMax } if (evt.key === "ArrowUp") { hero.acceleration.y = -accelerationMax } if (evt.key === "ArrowRight") { hero.acceleration.x = accelerationMax } if (evt.key === "ArrowLeft") { hero.acceleration.x = -accelerationMax } if (evt.key === "Shift") { hero.speed.x *= brake hero.speed.y *= brake } } function keyUp(evt) { if (evt.key === "ArrowRight" || evt.key === "ArrowLeft") { hero.acceleration.x = 0 } if (evt.key === "ArrowUp" || evt.key === "ArrowDown") { hero.acceleration.y = 0 } } function handleOrientation(event) { var beta = event.beta; var gamma = event.gamma; hero.acceleration.x = gamma * 0.1 hero.acceleration.y = beta * 0.1 } window.ondeviceorientation = handleOrientation window.onkeyup = keyUp window.onkeydown = keyDown </script> </body> </html>