Ajout menu et boule(Bug sur cette derniere)

This commit is contained in:
2026-03-28 08:16:44 +01:00
parent 91aeead9e6
commit 4e8e947ff5
5 changed files with 368 additions and 15 deletions

View File

@@ -23,12 +23,33 @@ public class ZoneDessin extends JPanel {
private boolean collisionOccur = false;
// indique si le cercle a déjà été sur la ligne (début de la phase de maintien)
private boolean hadBeenOnLine = false;
// mode immortel - ignore les collisions
private boolean immortel = false;
// liste des boules bonus
private ArrayList<BouleBonus> boolesBonus = new ArrayList<BouleBonus>();
// compteur pour générer les boules à intervalle régulier
private int compteurBoule = 0;
private int intervalleBoule = 80; // générer une boule tous les 80 frames
// type de bonus récupéré (-1 = rouge, 1 = vert, 0 = aucun)
private int bonusRecupere = 0;
public ZoneDessin(){
setLayout(new BorderLayout());
setPreferredSize(new Dimension(800, 600));
setBackground(new Color(220,170,0));
}
public void setImmortel(boolean immortel) {
this.immortel = immortel;
}
public int getBonusRecupere() {
return bonusRecupere;
}
public void reinitialiserBonus() {
bonusRecupere = 0;
}
// Ajout d'un objet graphique à la zone de dessin
public void ajouterObjet(ObjetGraphique unObjet) {
@@ -48,9 +69,50 @@ public class ZoneDessin extends JPanel {
return;
}
// 1. on déplace chaque objet graphique
for (ObjetGraphique obj : listeObjets){
obj.Animer();
// --- 0. Récupérer la ligne pour synchroniser les boules ---
Ligne ligneObjet = null;
for (ObjetGraphique obj : listeObjets) {
if (obj instanceof Ligne) {
ligneObjet = (Ligne) obj;
break;
}
}
// --- 1. Générer une boule au bord droit sur la ligne ---
compteurBoule++;
if (compteurBoule >= intervalleBoule && ligneObjet != null) {
compteurBoule = 0;
boolean estVerte = Math.random() < 0.7;
// On récupère le Y du dernier segment de la ligne (bord droit de l'écran)
// Note: Si votre classe Ligne n'a pas de méthode pour avoir le Y à X=800,
// utilisez une valeur proche de la fin de votre liste de segments.
double spawnX = 800;
double spawnY = 300; // Valeur par défaut
// On crée la boule au bord droit (800)
BouleBonus boule = new BouleBonus(spawnX, spawnY, estVerte);
// On lui donne la vitesse actuelle de la ligne pour qu'elle suive le mouvement
boule.setVitesse(ligneObjet.getVitesse());
boolesBonus.add(boule);
}
// --- 2. Animation des objets ---
for (ObjetGraphique obj : listeObjets) obj.Animer();
// Mettre à jour la vitesse des boules (car la ligne accélère avec le temps)
if (ligneObjet != null) {
for (BouleBonus boule : boolesBonus) {
boule.setVitesse(ligneObjet.getVitesse());
boule.Animer();
}
}
// Les boules bougent via leur propre Animer() qui ajuste leur vitesse
for (BouleBonus boule : boolesBonus) {
boule.Animer();
}
// 2. vérifier collisions entre une Ligne et un Cercle
@@ -67,9 +129,12 @@ public class ZoneDessin extends JPanel {
// Si le cercle n'est plus en contact (distance > rayon)
// alors le joueur perd (il doit maintenir le contact).
if (!l.collisionAvec(c)) {
collisionOccur = true;
estArrete = true;
break;
// Ignorer la collision si on est en mode immortel
if (!immortel) {
collisionOccur = true;
estArrete = true;
break;
}
}
}
}
@@ -77,8 +142,35 @@ public class ZoneDessin extends JPanel {
if (estArrete) break;
}
}
// 3. vérifier collisions entre les boules bonus et le cercle
for (int i = boolesBonus.size() - 1; i >= 0; i--)
{
BouleBonus boule = boolesBonus.get(i);
boolean collision = false;
// 3. on demande à redessiner
for (ObjetGraphique obj : listeObjets) {
if (obj instanceof Cercle) {
Cercle c = (Cercle) obj;
if (boule.collisionAvec(c)) {
// Si touché : on définit le bonus et on détruit la boule
bonusRecupere = boule.isVerte() ? 1 : -1;
boolesBonus.remove(i);
collision = true;
break;
}
}
}
//4. Détruire la boule si elle dépasse le joueur sans être touchée ---
// Le cercle est à X = 400. Si la boule est à X < 350, elle est "passée".
if (!collision && boule.getX() < 350) {
boolesBonus.remove(i);
// On ne change pas bonusRecupere ici (donc rien ne se passe)
}
}
// 5. on demande à redessiner
repaint();
}
@@ -93,6 +185,11 @@ public class ZoneDessin extends JPanel {
for (ObjetGraphique obj : listeObjets) {
obj.Afficher(g);
}
// Afficher les boules bonus
for (BouleBonus boule : boolesBonus) {
boule.Afficher(g);
}
}
// Indique si une collision est survenue
@@ -103,9 +200,12 @@ public class ZoneDessin extends JPanel {
// Réinitialise l'état de la zone de dessin et supprime les objets graphiques
public void reinitialiser() {
listeObjets.clear();
boolesBonus.clear();
estArrete = false;
collisionOccur = false;
hadBeenOnLine = false;
bonusRecupere = 0;
compteurBoule = 0;
repaint();
}
}