commentaires

This commit is contained in:
2026-03-28 16:37:07 +01:00
parent 5660a6c5c6
commit 4ed39dd92a
5 changed files with 19 additions and 11 deletions

View File

@@ -14,18 +14,19 @@ public class Bonus extends ObjetCollectible {
@Override protected int getSeuilActivation() { return 220; }
@Override protected Color getCouleurCapture() { return Color.BLUE; }
@Override protected Color getCouleurCapture() { return Color.BLUE; } // couleur après avoir été ramasssé
@Override
protected double calculerY(double hauteurLigne) {
if (Math.random() > 0.5) return hauteurLigne - 10 - (Math.random() * 50);
if (Math.random() > 0.5) return hauteurLigne - 10 - (Math.random() * 50); // position du bonus
else return hauteurLigne + 10 + (Math.random() * 50);
}
@Override
protected void appliquerEffet(Joueur joueur) {
if (!monJeu.cheatMode) joueur.ajouterVie();
}
} // En cheat mode, le bonus ne sert à rien (on a déjà l'invincibilité)
@Override
protected void dessiner(Graphics g) {

View File

@@ -19,7 +19,7 @@ public class BonusTaille extends ObjetCollectible {
@Override
protected double calculerY(double hauteurLigne) {
if (Math.random() > 0.5) return hauteurLigne - 8 - (Math.random() * 45);
if (Math.random() > 0.5) return hauteurLigne - 8 - (Math.random() * 45); // position du bonus
else return hauteurLigne + 8 + (Math.random() * 45);
}

View File

@@ -182,7 +182,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener {
for (Joueur joueur : joueurs) {
joueur.mettreAJourRayon(rayonBase);
joueur.mettreAJourInvincibilite();
if (!cheatMode) joueur.verifierCollisionLigne(lili);
if (!cheatMode) joueur.verifierCollisionLigne(lili); // si cheat mode activé : plus de perte de vie
joueur.resterDansLigne(lili);
}

View File

@@ -19,12 +19,13 @@ public class Malus extends ObjetCollectible {
@Override
protected double calculerY(double hauteurLigne) {
if (Math.random() > 0.5) return hauteurLigne - 75 - (Math.random() * 30);
if (Math.random() > 0.5) return hauteurLigne - 75 - (Math.random() * 30); // position du malus
else return hauteurLigne + 75 + (Math.random() * 30);
}
@Override
protected void appliquerEffet(Joueur joueur) {
// On ne punit pas si le joueur est en cheat mode ou en période d'invincibilité (clignotement)
if (!monJeu.cheatMode && !joueur.estInvincible()) joueur.retirerVie();
}

View File

@@ -4,9 +4,11 @@ import java.awt.Color;
import java.awt.Graphics;
import java.util.List;
// Classe de base pour tous les objets qu'on peut ramasser (bonus, malus...)
// Elle gère toute la logique commune : apparition, déplacement, collision
public abstract class ObjetCollectible extends ObjetGraphique {
protected double taille;
protected boolean actif = false;
protected int compteurFrames = 0;
@@ -21,6 +23,7 @@ public abstract class ObjetCollectible extends ObjetGraphique {
this.joueurs = joueurs;
this.monJeu = j;
}
// Chaque sous-classe décide quand elle apparaît, où, quel effet elle a et comment elle se dessine
protected abstract int getSeuilActivation();
protected abstract double calculerY(double hauteurLigne);
@@ -44,6 +47,8 @@ public abstract class ObjetCollectible extends ObjetGraphique {
if (!actif) compteurFrames++;
if (compteurFrames >= getSeuilActivation() && !actif) {
// Quand on a attendu assez longtemps, l'objet spawn à droite de l'écran
actif = true;
dejaCapture = false;
x = 800;
@@ -58,12 +63,13 @@ public abstract class ObjetCollectible extends ObjetGraphique {
if (actif) {
double vitesseLigne = monJeu.gestionnaireNiveau.getVitesseScroll();
x -= vitesseLigne;
x -= vitesseLigne; // l'objet suit la vitesse du niveau
if (!dejaCapture) {
for (Joueur joueur : joueurs) {
if (joueur.verifierCollisionCollectible(x, y, taille, vitesseLigne)) {
appliquerEffet(joueur);
dejaCapture = true;
appliquerEffet(joueur); // délégué à la sous-classe
dejaCapture = true; // évite d'appliquer l'effet plusieurs fois
break;
}
}