Collision entre le cercle et la ligne

This commit is contained in:
2026-02-23 09:41:54 +01:00
parent c666b02807
commit 866bd17e29
5 changed files with 103 additions and 12 deletions

View File

@@ -19,6 +19,10 @@ public class ZoneDessin extends JPanel {
// liste des objets graphiques
private ArrayList<ObjetGraphique> listeObjets = new ArrayList<ObjetGraphique>();
// indicateur qu'une défaite (perte de contact) est survenue
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;
public ZoneDessin(){
setLayout(new BorderLayout());
@@ -49,8 +53,33 @@ public class ZoneDessin extends JPanel {
obj.Animer();
}
// 2. on demande à redessiner
repaint();
// 2. vérifier collisions entre une Ligne et un Cercle
for (ObjetGraphique obj : listeObjets) {
if (obj instanceof Ligne) {
Ligne l = (Ligne) obj;
for (ObjetGraphique other : listeObjets) {
if (other instanceof Cercle) {
Cercle c = (Cercle) other;
// On commence à surveiller une fois que le centre du
// cercle est au-dessus d'un segment (le cercle est "sur la ligne").
if (l.estSurLaLigne(c.getX())) {
hadBeenOnLine = true;
// 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;
}
}
}
}
if (estArrete) break;
}
}
// 3. on demande à redessiner
repaint();
}
@Override
@@ -65,4 +94,9 @@ public class ZoneDessin extends JPanel {
obj.Afficher(g);
}
}
// Indique si une collision est survenue
public boolean aCollision() {
return collisionOccur;
}
}