Calculator Tools Calculator Tools
Create

Esquive Rapide

Nov 21, 2023

About this app

Jeu rapide d'esquive où le joueur doit éviter les obstacles pour obtenir un score élevé.

Esquive Rapide Game Over! 🎮 Rejouer

Related apps

Put this on your site

Source

                    <!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Esquive Rapide</title>
<meta name="description" content="Jeu rapide d'esquive où le joueur doit éviter les obstacles pour obtenir un score élevé.">
<meta name="keywords" content="jeu, esquive, rapide, obstacles, score, HTML5, JavaScript">

<style>
body, html {
height: 100%;
margin: 0;
display: flex;
justify-content: center;
align-items: center;
background: linear-gradient(to top, #76b852, #8DC26F);
}
canvas {
border: 5px solid #333;
border-radius: 10px;
}
#gameOverScreen {
display: none;
position: absolute;
background-color: rgba(255,255,255,0.9);
border-radius: 10px;
padding: 20px;
text-align: center;
}
button {
padding: 10px 20px;
margin-top: 20px;
cursor: pointer;
background-color: #4CAF50;
border: none;
color: white;
font-size: 16px;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>

<canvas id="gameCanvas" width="480" height="320"></canvas>
<div id="gameOverScreen">
<h2>Game Over! 🎮</h2>
<p id="finalScore"></p>
<button id="restartButton">Rejouer</button>
</div>

<script>
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
const player = { x: canvas.width / 2, y: canvas.height - 30, width: 30, height: 30, color: '#FFD700' };
const obstacles = [];
const obstacleFrequency = 1500; // milliseconds
let score = 0;
let gameInterval;
let obstacleInterval;
let isGameOver = false;

function drawPlayer() {
ctx.fillStyle = player.color;
ctx.fillRect(player.x, player.y, player.width, player.height);
}

function addObstacle() {
obstacles.push({
x: Math.random() * (canvas.width - 20),
y: -20,
width: 20,
height: 20,
color: '#FF0000',
speed: 3
});
}

function drawObstacles() {
obstacles.forEach(obstacle => {
ctx.fillStyle = obstacle.color;
ctx.fillRect(obstacle.x, obstacle.y, obstacle.width, obstacle.height);
});
}

function updateObstacles() {
for (let i = obstacles.length -1; i >= 0; i--) {
obstacles[i].y += obstacles[i].speed;

// Check for collision with player
if (player.x < obstacles[i].x + obstacles[i].width &&
player.x + player.width > obstacles[i].x &&
player.y < obstacles[i].y + obstacles[i].height &&
player.y + player.height > obstacles[i].y) {
gameOver();
}

// Remove off-screen obstacles
if (obstacles[i].y > canvas.height) {
obstacles.splice(i, 1);
score++;
}
}
}

function gameOver() {
clearInterval(gameInterval);
clearInterval(obstacleInterval);
document.getElementById('finalScore').textContent = `Score final: ${score}`;
document.getElementById('gameOverScreen').style.display = 'block';
isGameOver = true;
}

function gameLoop() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawPlayer();
drawObstacles();
updateObstacles();
ctx.fillStyle = 'white';
ctx.fillText(`Score: ${score}`, 10, 20);
}

function restartGame() {
score = 0;
obstacles.length = 0;
isGameOver = false;
document.getElementById('gameOverScreen').style.display = 'none';
gameInterval = setInterval(gameLoop, 20);
obstacleInterval = setInterval(addObstacle, obstacleFrequency);
}

document.getElementById('restartButton').addEventListener('click', restartGame);

// Move player with mouse
canvas.addEventListener('mousemove', function(event) {
if (!isGameOver) {
const rect = canvas.getBoundingClientRect();
player.x = event.clientX - rect.left - player.width / 2;
}
});

// Start the game
restartGame();

// Set font for score display
ctx.font = '16px Arial';
</script>

</body>
</html>