diff --git a/src/BonusTaille.java b/src/BonusTaille.java new file mode 100644 index 0000000..a746950 --- /dev/null +++ b/src/BonusTaille.java @@ -0,0 +1,88 @@ +package linea; + +import java.awt.Color; +import java.awt.Graphics; + +public class BonusTaille extends ObjetGraphique { + + protected double taille = 12; + protected boolean actif = false; + protected int compteurFrames = 200; // pour avoir une position differente des autres bonuss + protected boolean dejaCapture = false; + + protected Ligne maLigne; + protected Cercle monCercle; + protected Jeu monJeu; + + public BonusTaille(Ligne l, Cercle c, Jeu j) { + this.maLigne = l; + this.monCercle = c; + this.monJeu = j; + this.couleur = Color.CYAN; + } + + @Override + void Afficher(Graphics g) { + if (actif) { + if (dejaCapture) { + g.setColor(new Color(255, 255, 255, 100)); + } else { + g.setColor(this.couleur); + } + g.fillOval((int)Math.round(x), (int)Math.round(y), (int)taille, (int)taille); + } + } + + @Override + void Animer() { + if (!actif) { + compteurFrames++; + } + + + if (compteurFrames >= 320 && !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 - 8 - (Math.random() * 45); + } else { + y = hauteurLigne + 8 + (Math.random() * 45); + } + + 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.activerBonusTaille(); + dejaCapture = true; + } + } + } + + if (x + taille < 0) { + actif = false; + } + } + } +} diff --git a/src/Jeu.java b/src/Jeu.java index d85a911..a0dee5c 100644 --- a/src/Jeu.java +++ b/src/Jeu.java @@ -42,6 +42,8 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { public int typeInvincibilite = 0; public boolean invincibiliteRouge = false; + protected boolean bonusTailleActif = false; + protected int compteurBonusTaille = 0; protected String pseudo = ""; protected JFrame fenetre; @@ -116,9 +118,10 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { public void lancerPartie(String pseudoSaisi) { pseudo = pseudoSaisi; - // C'est cette ligne qui donne vie au bonus ! + // lignes pour ajouter les bonus ecran.ajouterObjet(new Bonus(lili, demiCercleAvant, this)); ecran.ajouterObjet(new Malus(lili, demiCercleAvant, this)); + ecran.ajouterObjet(new BonusTaille(lili, demiCercleAvant, this)); // A FAIRE : placer dans l'écran tous les objets graphiques nécessaires ecran.ajouterObjet(demiCercleArriere); @@ -142,6 +145,8 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { estGameOver = false; compteurInvincible = 0; invincibiliteRouge = false; + bonusTailleActif = false; + compteurBonusTaille = 0; gestionnaireNiveau.reinitialiser(); gestionnaireFinDePartie.reinitialiser(); ecran.demarrer(); @@ -154,6 +159,12 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { } + public void activerBonusTaille() { + bonusTailleActif = true; + // A 40ms par tick d'horloge, 150 frames = environ 6 secondes de bonus + compteurBonusTaille = 150; + } + @Override public void actionPerformed(ActionEvent e) { if (estGameOver == true) { @@ -168,6 +179,16 @@ public class Jeu implements KeyListener, ActionListener, MouseListener { ecran.setCouleurFond(gestionnaireNiveau.getCouleurFondInterpolee()); double rayon = gestionnaireNiveau.getRayonCercle(); + + + if (bonusTailleActif == true) { + rayon = rayon + 30; + compteurBonusTaille = compteurBonusTaille - 1; + + if (compteurBonusTaille <= 0) { + bonusTailleActif = false; + } + } demiCercleAvant.setRayon(rayon); demiCercleArriere.setRayon(rayon);