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

Aide je n'arrive pas à faire avancer mes ennemis... SVP

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.

Répondre

Afin d’empêcher la création automatisée de comptes, nous vous demandons de réussir le défi ci-contre.
Smileys
:D :) :-) ;) :| :( :cry: :cheers: :hourra: :mv: :lol: :mdr: :bonjour: :hello: :jap: :siffle: :bisou: :P :o :x :roll: :good: :bad: :super: :reflexion: :suspect: :? :oops: :peur: :zen: :boude: :bug:

Revue du sujet : Aide je n'arrive pas à faire avancer mes ennemis... SVP Étendre la vue

Aide je n'arrive pas à faire avancer mes ennemis... SVP

par Julien2607 » sam. 30 mars 2024 01:11
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

Bonjour Alain Votre disque (SSD) est très[…]

Bonjour, pour linkedin avez vous tentez cette pag[…]

Game

Il n'y a pas si longtemps, j'ai trouvé un s[…]

Mostbet — bookmaker

Mostbet - bookmaker et casino Mosbet. Mostbet est […]