From 0a4825d9ef0bc351ae0cf90a58073bcd0fb8182d Mon Sep 17 00:00:00 2001 From: Marc Date: Tue, 17 Mar 2026 14:40:12 +0100 Subject: [PATCH] Ajout de malus, ( mm logique que bonus ) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit perd 1 vie par malus, il faut l'éviter --- src/Bonus.java | 4 +-- src/Jeu.java | 1 + src/Malus.java | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 src/Malus.java diff --git a/src/Bonus.java b/src/Bonus.java index 6e13600..688fa9b 100644 --- a/src/Bonus.java +++ b/src/Bonus.java @@ -19,14 +19,14 @@ public class Bonus extends ObjetGraphique { this.maLigne = l; this.monCercle = c; this.monJeu = j; - this.couleur = Color.RED; + this.couleur = Color.GREEN; } @Override void Afficher(Graphics g) { if (actif) { if (dejaCapture) { - g.setColor(Color.ORANGE); + g.setColor(Color.BLUE); } else { g.setColor(this.couleur); } diff --git a/src/Jeu.java b/src/Jeu.java index 2bfb181..af2c91b 100644 --- a/src/Jeu.java +++ b/src/Jeu.java @@ -115,6 +115,7 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { // C'est cette ligne qui donne vie au bonus ! ecran.ajouterObjet(new Bonus(lili, demiCercleAvant, this)); + ecran.ajouterObjet(new Malus(lili, demiCercleAvant, this)); // A FAIRE : placer dans l'écran tous les objets graphiques nécessaires ecran.ajouterObjet(demiCercleArriere); diff --git a/src/Malus.java b/src/Malus.java new file mode 100644 index 0000000..463591e --- /dev/null +++ b/src/Malus.java @@ -0,0 +1,91 @@ +package linea; + +import java.awt.Color; +import java.awt.Graphics; + +public class Malus extends ObjetGraphique { + + protected double taille = 10; + protected boolean actif = false; + protected int compteurFrames = 0; + protected boolean dejaCapture = false; + + protected Ligne maLigne; + protected Cercle monCercle; + protected Jeu monJeu; + + public Malus(Ligne l, Cercle c, Jeu j) { + this.maLigne = l; + this.monCercle = c; + this.monJeu = j; + this.couleur = Color.RED; + } + + @Override + void Afficher(Graphics g) { + if (actif) { + if (dejaCapture) { + g.setColor(Color.black); + } else { + g.setColor(this.couleur); + } + g.fillRect((int)Math.round(x), (int)Math.round(y), (int)taille, (int)taille); + } + } + + @Override + void Animer() { + if (!actif) { + compteurFrames++; + } + + if (compteurFrames >= 250 && !actif) { + + actif = true; + dejaCapture = false; + + x = 800; + + double hauteurLigne = 300; + if (maLigne.dernierSegment != null) { + hauteurLigne = maLigne.dernierSegment.y; + } + + if (Math.random() > 0.5) { + y = hauteurLigne - 75 - (Math.random() * 30); + } else { + y = hauteurLigne + 75 + (Math.random() * 30); + } + + if (y < 20) y = 20; + if (y > 550) y = 550; + + compteurFrames = 0; + } + + if (actif) { + double vitesseLigne = monJeu.gestionnaireNiveau.getVitesseScroll(); + x -= vitesseLigne; + + double centreX = x + (taille / 2.0); + + if (centreX <= monCercle.x && centreX > monCercle.x - vitesseLigne) { + + double hautCercle = monCercle.y - monCercle.getRayon(); + double basCercle = monCercle.y + monCercle.getRayon(); + + if (y > hautCercle && (y + taille) < basCercle) { + + if (!dejaCapture) { + monJeu.vies -= 1; + dejaCapture = true; + } + } + } + + if (x + taille < 0) { + actif = false; + } + } + } +} \ No newline at end of file