diff --git a/linea/linea/BonusMalus.java b/linea/linea/BonusMalus.java new file mode 100644 index 0000000..8dc1311 --- /dev/null +++ b/linea/linea/BonusMalus.java @@ -0,0 +1,50 @@ +package linea; + +import java.awt.Color; +import java.awt.Graphics; + +public class BonusMalus extends ObjetGraphique { + + public boolean estBonus; + public boolean actif = true; // Permet de le faire disparaître une fois ramassé + public int taille = 15; + + public BonusMalus(double startX, double startY, boolean bonus) { + this.x = startX; + this.y = startY; + this.estBonus = bonus; + } + + @Override + void Afficher(Graphics g) { + if (!actif) return; // S'il a été ramassé, on ne le dessine plus + + if (estBonus) { + g.setColor(Color.green); // Carré jaune (Bonus) + g.fillRect((int)x, (int)y - taille / 2, taille, taille); + } else { + g.setColor(Color.red); // Triangle rouge (Malus) + int[] xPoints = {(int)x, (int)x + taille / 2, (int)x + taille}; + int[] yPoints = {(int)y + taille / 2, (int)y - taille / 2, (int)y + taille / 2}; + g.fillPolygon(xPoints, yPoints, 3); + } + } + + @Override + void Animer() { + this.x -= 5; // Il se déplace vers la gauche à la même vitesse que la ligne + } + + // Vérifie si le joueur touche l'objet + public boolean estTouche(Cercle c) { + if (!actif) return false; + + // Calcul de la distance entre le centre de l'objet et le centre du joueur + double centreItemX = x + taille / 2.0; + double centreItemY = y; + double distance = Math.sqrt(Math.pow(centreItemX - c.x, 2) + Math.pow(centreItemY - c.y, 2)); + + // Si la distance est inférieure au rayon du joueur, c'est touché ! + return distance < (c.getRayon() + taille / 2.0); + } +} \ No newline at end of file diff --git a/linea/linea/Jeu.java b/linea/linea/Jeu.java index 190b380..4c28b94 100644 --- a/linea/linea/Jeu.java +++ b/linea/linea/Jeu.java @@ -37,7 +37,11 @@ public class Jeu implements KeyListener, ActionListener{ // un label qui servira à afficher le score protected JLabel labScore; + protected JLabel labTriche; + protected boolean jeuCommence = false; + + protected boolean modeTriche = false; //------------------------------------------------------------------------- // METHODES @@ -48,13 +52,18 @@ public class Jeu implements KeyListener, ActionListener{ //------------------------------------------------------------------------- public Jeu(){ // Gestion du score : a réactiver en fin de TP, inutile au début + ecran.setLayout(null); labScore = new JLabel(); labScore.setText("

score : 0

"); labScore.setBounds(20, 0, 200, 50); ecran.add(labScore); - + labTriche = new JLabel(); + labTriche.setText("

Mode de triche activé

"); + labTriche.setBounds(600, 0, 200, 50); // Placé en haut à droite (la fenêtre fait 800 de large) + labTriche.setVisible(false); // Caché par défaut au lancement + ecran.add(labTriche); } @@ -78,7 +87,12 @@ public class Jeu implements KeyListener, ActionListener{ // On demande aux deux demi-cercle de "monter" demiCercleAvant.Monter(); demiCercleArriere.Monter(); - } + } + + if(keyCode==32){//touche espace + modeTriche =!modeTriche; + labTriche.setVisible(modeTriche); //afficher ou cacher le label + } } //------------------------------------------------------------------------- @@ -229,7 +243,7 @@ public class Jeu implements KeyListener, ActionListener{ // NB: Le jeu commence quand la ligne est dans le cercle // Au début le ligne n'est pas dans le cercle car la ligne est à droite du cercle, et elle se déplace vers la gauche //------------------------------------------------------------------------------------------------------------------- - if (this.jeuCommence) { + if (this.laLigne.getSegCourant()!=null && !this.modeTriche) { // Le jeu s'arrête si le joueur n'a pas traversé la première ligne this.horloge.stop(); // 1. Arrêter le temps this.ecran.partiePerdue = true; // 2. Signaler à l'écran this.ecran.repaint(); // 3. Forcer l'affichage du texte diff --git a/linea/linea/Ligne.java b/linea/linea/Ligne.java index 11da993..2b070ed 100644 --- a/linea/linea/Ligne.java +++ b/linea/linea/Ligne.java @@ -10,7 +10,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique // Ne pas oublier qu'il y a des propriétés et méthodes reçues par l'héritage //------------------------------------------------------------------------- - // PROPRIETES + // PROPRIETES //------------------------------------------------------------------------- // nb de Segments qui composent la ligne @@ -25,6 +25,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique // Propriété listes de segements: Une ligne est constitué de plusieurs segments. // Stockage des segments afin de pouvoir les afficher et les animer plus tard protected ArrayList listeSegments = new ArrayList<>(); + //------------------------------------------------------------------------- // METHODES @@ -129,4 +130,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique } return dansCercle; } + public Segment getSegCourant() { + return this.SegCourant; + } }