fix game over + mode triche + début malus bonus

This commit is contained in:
2026-03-10 20:01:39 +01:00
parent a2166b74e1
commit de396311fc
3 changed files with 72 additions and 4 deletions

View File

@@ -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);
}
}

View File

@@ -37,8 +37,12 @@ public class Jeu implements KeyListener, ActionListener{
// un label qui servira à afficher le score // un label qui servira à afficher le score
protected JLabel labScore; protected JLabel labScore;
protected JLabel labTriche;
protected boolean jeuCommence = false; protected boolean jeuCommence = false;
protected boolean modeTriche = false;
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// METHODES // METHODES
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
@@ -48,13 +52,18 @@ public class Jeu implements KeyListener, ActionListener{
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
public Jeu(){ public Jeu(){
// Gestion du score : a réactiver en fin de TP, inutile au début // Gestion du score : a réactiver en fin de TP, inutile au début
ecran.setLayout(null);
labScore = new JLabel(); labScore = new JLabel();
labScore.setText("<html><h3>score : 0</h3></html>"); labScore.setText("<html><h3>score : 0</h3></html>");
labScore.setBounds(20, 0, 200, 50); labScore.setBounds(20, 0, 200, 50);
ecran.add(labScore); ecran.add(labScore);
labTriche = new JLabel();
labTriche.setText("<html><h3 style='color:red;'>Mode de triche activé</h3></html>");
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);
} }
@@ -79,6 +88,11 @@ public class Jeu implements KeyListener, ActionListener{
demiCercleAvant.Monter(); demiCercleAvant.Monter();
demiCercleArriere.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 // 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 // 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.horloge.stop(); // 1. Arrêter le temps
this.ecran.partiePerdue = true; // 2. Signaler à l'écran this.ecran.partiePerdue = true; // 2. Signaler à l'écran
this.ecran.repaint(); // 3. Forcer l'affichage du texte this.ecran.repaint(); // 3. Forcer l'affichage du texte

View File

@@ -26,6 +26,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
// Stockage des segments afin de pouvoir les afficher et les animer plus tard // Stockage des segments afin de pouvoir les afficher et les animer plus tard
protected ArrayList<Segment> listeSegments = new ArrayList<>(); protected ArrayList<Segment> listeSegments = new ArrayList<>();
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// METHODES // METHODES
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
@@ -129,4 +130,7 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique
} }
return dansCercle; return dansCercle;
} }
public Segment getSegCourant() {
return this.SegCourant;
}
} }