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;
+ }
}