FORUM D’ENTRAIDE INFORMATIQUE (FEI)
Site d’assistance et de sécurité informatique

Entraide concernant le webmastering (administration de sites).
Règles du forum : Entraide concernant le webmastering (administration de sites). Pour se faire aider à choisir un hébergeur, le service le mieux adapté selon ses objectifs, se faire aider à la création d'un site (problèmes de programmation, d'organisation, résolution de bugs...).
Merci de lire et de respecter la charte générale du forum.
  • Avatar du membre
#215205
document.addEventListener('DOMContentLoaded', () => {
const board = document.getElementById('board');
const startButton = document.getElementById('start-button');
const coinsDisplay = document.getElementById('coins');
const livesDisplay = document.getElementById('lives');
const gameOverDisplay = document.getElementById('game-over');

let coins = 20;
let lives = 10;
let interval ;// ?
let enemies = [];
let towers = [];
let lasers = [];

startButton.addEventListener('click', () => {
interval = setInterval(spawnEnemy, 1000); // Augmente la cadence de spawn

startButton.disabled = true; // Désactive le bouton de démarrage lorsque le jeu commence
});

board.addEventListener('click', (event) => {
if (coins >= 5) { // Augmente le coût de la tour
coins -= 5; // Décrémente le coût des pièces
updateCoinsDisplay(); // Met à jour l'affichage des pièces
const tower = createTower(event.clientX, event.clientY); // Crée une nouvelle tour
board.appendChild(tower); // Ajoute la tour au tableau de jeu
towers.push(tower); // Ajoute la tour à la liste des tours
setInterval(() => {
let targetEnemy = findNearestEnemy(tower);
if (targetEnemy) {
shootLaser(tower, targetEnemy); // Tirer un laser vers l'ennemi cible
}
}, 500); // Intervalle de tir régulier
} else {
alert('Vous n\'avez pas assez de pièces pour acheter une tour.');
}
});

function createTower(x, y) {
const tower = document.createElement('div');
tower.classList.add('tower');
tower.style.left = x - 25 + 'px';
tower.style.top = y - 25 + 'px';
tower.damage = 1;
return tower;
}

function spawnEnemy() {
const enemy = document.createElement('div');
enemy.classList.add('enemy');
enemy.style.left = '0px';
enemy.style.top = Math.floor(Math.random() * 350) + 'px';
enemy.health = 3; // Définir la santé initiale de l'ennemi

// Créer et ajouter la barre de santé de l'ennemi
const healthBar = document.createElement('div');
healthBar.classList.add('enemy-health-bar');
enemy.appendChild(healthBar);

board.appendChild(enemy);
enemies.push(enemy);
moveEnemy(enemy);
}

function moveEnemy(enemy) {
enemy.interval = setInterval(() => {
if (!gameOverDisplay.style.display) {
const currentPosition = parseFloat(enemy.style.left);
if (currentPosition >= 550) { // ?
clearInterval(enemy.interval);
board.removeChild(enemy);
const index = enemies.indexOf(enemy);
enemies.splice(index, 1);
lives--;
updateLivesDisplay();
if (lives <= 0) {
gameOver();
}
} else {
enemy.style.left = currentPosition + 5 + 'px'; // Déplacer l'ennemi
}
}
}, 40);
}

function findNearestEnemy(tower) {
let nearestEnemy = null;
let minDistance = Infinity;

enemies.forEach(enemy => {
const distance = calculateDistance(tower, enemy);
if (distance < minDistance) {
minDistance = distance;
nearestEnemy = enemy;
}
});

return nearestEnemy;
}

function calculateDistance(tower, enemy) {
const towerX = parseFloat(tower.style.left) + 25;
const towerY = parseFloat(tower.style.top) + 25;
const enemyX = parseFloat(enemy.style.left) + 25;
const enemyY = parseFloat(enemy.style.top) + 25;

return Math.sqrt(Math.pow(enemyX - towerX, 2) + Math.pow(enemyY - towerY, 2));
}

function shootLaser(tower, enemy) {
const laser = document.createElement('div');
laser.classList.add('laser');
board.appendChild(laser);

// Coordonnées de départ du laser
const startX = parseFloat(tower.style.left) + 25;
const startY = parseFloat(tower.style.top) + 25;

// Coordonnées de fin du laser (ennemi)
const endX = parseFloat(enemy.style.left) + 25;
const endY = parseFloat(enemy.style.top) + 25;

// Calculer la longueur et l'angle du laser
const distance = Math.sqrt(Math.pow(endX - startX, 2) + Math.pow(endY - startY, 2));
const angle = Math.atan2(endY - startY, endX - startX) * (180 / Math.PI);

// Positionner et orienter le laser
laser.style.width = distance + 'px';
laser.style.left = startX + 'px';
laser.style.top = startY + 'px';
laser.style.transform = 'rotate(' + angle + 'deg)';

// Ajouter le laser à la liste des lasers
lasers.push(laser);

// Supprimer le laser après un court délai
setTimeout(() => {
board.removeChild(laser);
lasers.splice(lasers.indexOf(laser), 1); // Supprimer le laser de la liste
updateEnemyHealth(enemy, tower.damage); // Mettre à jour la santé de l'ennemi après le tir
}, 250); // Réduit la durée de vie du laser
}

function updateEnemyHealth(enemy, damage) {
enemy.health -= damage;
const healthBar = enemy.querySelector('.enemy-health-bar');
const healthPercentage = (enemy.health / 10) * 100;
healthBar.style.width = healthPercentage + '%';
if (enemy.health <= 0) {
coins += 1;
updateCoinsDisplay();
clearInterval(enemy.interval); // Arrête le mouvement de l'ennemi s'il est tué
board.removeChild(enemy);
const index = enemies.indexOf(enemy);
enemies.splice(index, 1);
}
}

function updateCoinsDisplay() {
coinsDisplay.textContent = 'Pièces: ' + coins;
}

function updateLivesDisplay() {
livesDisplay.textContent = 'Vies: ' + lives;
}

function gameOver() {
clearInterval(interval);
gameOverDisplay.style.display = 'block'; // Affiche le message GAME OVER
}
});
Merci trop d'avance Bonne nuit à demain

Hello everybody. Lately I have been very unlucky[…]

Having a coupon code is so convenient and helps a […]

Long-distance relationship

Hello everyone! Lately I have been thinking abou[…]

I appreciate you sharing this knowledge. I adore y[…]