From e50f2b1b1b43628b80dc62c9175f8a528d5ca1dd Mon Sep 17 00:00:00 2001 From: Constant Date: Mon, 23 Feb 2026 11:53:42 +0100 Subject: [PATCH] update: collision ligne-cercle --- linea/linea/GestionBDD.class | Bin 0 -> 3633 bytes linea/linea/Jeu.java | 4 +- linea/linea/Ligne.java | 70 ++++++++++------------------------- score.db | Bin 12288 -> 12288 bytes 4 files changed, 21 insertions(+), 53 deletions(-) create mode 100644 linea/linea/GestionBDD.class diff --git a/linea/linea/GestionBDD.class b/linea/linea/GestionBDD.class new file mode 100644 index 0000000000000000000000000000000000000000..7a84d9ad9da976729d1cddb5832eb6f6db8b322a GIT binary patch literal 3633 zcmbVO&r@6175*MbJRu&&mThdA1iw1emOug*C#j7b909_XEeTssfFVhfhxAN@g+!j7 zY@D=7oVrb$nXbCXWS2!co=!8(kA-77P297w+zS3eC*XBsVZbnp3b z&;7o0&eh-l^XOXuGx)%Z4s@z;X>g-U!TvS#mN`~1i>qUED{EHPQP6chU(7p`3OWP9 z1r;6|74k*P9J^?hoqVY{H8bOZSHYpR+)8$${6-<~SQAFJWLu-T6)!aOs@SKY5BnAL z%kZ=ro3Zn^EIVly%~i`*(7S3m)1_jOCo-ghU?9=T#Bl6@j3z}Jk{ zG*O^hn^v~sSPBmBh3~S6F{I(gq7vNMLaA)2IMv8Z7DeWDyL8)JDOg^dL{P&pMo6BS z%Ndo84Z>Wuate;N2XA^rf(zotLn=mjek;9eiP&b=+7P^Z5yoi^KN08mZIE<_$!Bk7 zY%^69CA(gi10Z~sEBAdj~5giYhGcODVwHjIdQ?3I}nct7reND7gaq~#ov8d8`em-P~v-w=SxrjH9fX-hW}uQ>U_Sk$)7JBfVR@!}dfJ(yQ8 zV#E@$=}e6neKtLpY&73odWIc0wIo^6XJW>*D78fm*RiBPtDkwTV%c{T1pYTMX{%f* zIELkrkeBeXidQuJ46nAAeA7gMt7vVK2F|W!4@~kQ%SCu*HRQk>c5(Dbs`l)OxEHH< zT}58Q8g42$AX%4S)5(&_bb|Qo=AL|W z*pwZ!=q!jk5U=S{j-oHY5ud88uUK|Qw7UXtvrEgY15Ty7#>huk${b8I>6P7@G&iJ+ zig%xQPZ~w2nQJA^AlndgnFkWG1tMp2GHqBkqn0Y=gjJSm9_4EkcoVM(i`vMq7EPxj z0-V}qaK7!Lb&?{J^lF`vtbWsKF3k@iNd&m=4N4>U`Y~(ewEZ+g|*fJ1*LU zdB`ss2Pgr0yQx|A9k}uk2NNSz98r)A4Oj7W2NpwH7z$PKjDq_ZNO5(jvFe#{h5fDv z2!tPxY~cj`Lc++OxPGZ0~RX)9=~>HC6E6(tYRx;VtwxH?)Z^zuVs>Aa_5mQzNUqMU7nk zaB7A>=RJ<|g-wxzdAy8QDf`LECgt0_@B5T}_&q+R`~&`kKU4Pb4qrF9n#BPkF#!+% z9rTdjK1S=ui;OyjAf~yRW%NnLoMqHW#+qfcNyfOuD6{wr>*23_vPD1K#r|zNx>c+< zm>X324&Zo7R{nl;?NIIJkQ6^@QzP;TlG_Y+()=r?(ScvHlip{0);j55+!3AhH(z<@ z{2|RLc8DZ-H0-NLik}ya)6H$t%1-I7jU&#S?%K>b?E19MrsTcFrd;mDrlh&qXmZuo zX#dA->-?1SxSzxa+0zQ%ZA4>U0e19a_WWqzl5&N5F*<3q|%C?B!(zTxk0 uN%nUfm7*Blgm0UPkF)k_qg^G{E#>Z7_`!2j!Ea<8{Pw?^R2

score : " + this.score + "

"); } diff --git a/linea/linea/Ligne.java b/linea/linea/Ligne.java index 8c601dc..11da993 100644 --- a/linea/linea/Ligne.java +++ b/linea/linea/Ligne.java @@ -98,65 +98,33 @@ public class Ligne extends ObjetGraphique{// Hérite de la classe ObjetGraphique } - //--------------------------------------------------------------------------------------- - // Méthode permettant de vérifier si la ligne est à l'intérieur du cercle - // Principe: On a le rayon du cercle qui ne varie pas - // On parcourt tous les points du segment courant - // Et on calcule la distance entre chacun de ces points et le centre du cercle - // Si la distance est supérieure au rayon du cercle, alors le point n'est pas dans le cercle(GAME OVER) - // Sinon le segment courant est dans le cercle - // Remarque: On a définit la position du cercle grâce à son centre - // Autrement dit, les coordonnées du centre du cercle sont la position du cercle - // Raison pour laquelle au début la ligne est toujours dans le cercle - // Car yCercle = yLigne = 200 (Voir et lire le code attentivement) !!!! - // Formule de la distance : d = sqrt( (x2-x1)^2 + (y2-y1)^2 ) - // !!! Attention: il faut vérifier si le segment courant existe avant de faire les calculs - // Sinon l'écran rique de se figer à cause d'un nullPointerException - //---------------------------------------------------------------------------------------- + //------------------------------------------------------------------------- + // Méthode qui vérifie si la ligne est dans le cercle + // Principe: + // 1- On détermine la hauteur du point du segment qui se trouve au niveau du cercle + // 2- On calcule la distane entre ce point et le centre du cercle + // 3- On compare cette distance avec le rayon du cercle + //------------------------------------------------------------------------- public boolean estDansCercle(Cercle c){ boolean dansCercle = false; - // Si aucun segment courant n'a encore été déterminé (peut arriver - // avant le premier paint), on tente de le retrouver ici pour - // éviter un NullPointerException qui fige l'EDT. - if (this.SegCourant == null) { - for (Segment s : this.listeSegments) { - if ((s.x <= xCercle) && ((s.x + s.xLong) >= xCercle)) { - this.SegCourant = s; - // On peut s'arrêter dès qu'on a trouvé le segment courant - break; - } - } - // fallback : prendre le premier segment si aucune correspondance - if (this.SegCourant == null && !this.listeSegments.isEmpty()) { - this.SegCourant = this.listeSegments.get(0); - this.SegCourant.setCouleur(Color.BLACK); - } - } + if(this.SegCourant != null){ + // 1- On détermine la hauteur du point du segment qui se trouve au niveau du cercle + // En utilisant la formule de Thales + // Ce point se touve à la position xPoint = xCercle + double yPoint = this.SegCourant.y + (this.SegCourant.yLong / this.SegCourant.xLong) * (this.xCercle - this.SegCourant.x); + double xPoint = this.xCercle; - // Si toujours null (liste vide), on ne peut pas vérifier - if (this.SegCourant == null) { - return false; - } - double yCercle = c.getY(); - for(int i = 0; i <= 50; i++){ - double xPoint = this.SegCourant.x + (i/50.0)*this.SegCourant.xLong; - double yPoint = this.SegCourant.y + (i/50.0)*this.SegCourant.yLong; - double distance = Math.sqrt(Math.pow((xCercle - xPoint), 2) + Math.pow((yCercle - yPoint), 2)); - if(distance <= c.getRayon()){ - // Le point i du segment courant est dans le cercle, on peut continuer à vérifier les autres points du segment + // 2- On calcule la distance entre ce point et le centre du cercle + double distance = Math.sqrt(Math.pow(xPoint - c.x, 2) + Math.pow(yPoint - c.y, 2)); + + // 3- On compare cette distance avec le rayon du cercle + if(distance <= c.rayon){ this.SegCourant.setCouleur(Color.GREEN); dansCercle = true; - break; }else{ - // On peut s'arrêter dès qu'on trouve un point hors du cercle, car le segment courant n'est plus dans le cercle this.SegCourant.setCouleur(Color.RED); dansCercle = false; - // A FAIRE: On doit arrêter le jeu si la ligne n'est pas dans le cercle - // PROBLEME: Le jeu s'arrête dès le lancement car au départ la ligne n'est - // pas dans le cercle (la ligne est à droite du cercle, et elle se déplace vers la gauche) - // SOLUTION: Le jeu commence quand la ligne est dans le cercle, - // et il s'arrête quand la ligne n'est plus dans le cercle - //break; + } } return dansCercle; diff --git a/score.db b/score.db index 2c6428b9eeb4112b5ed871535d090cbe88851aac..99acba8184aa3c84199bc1502c45f5d4650b9f86 100644 GIT binary patch delta 79 zcmZojXh@hK&B!!S#+i|6W5N=CHb(yU4E*mm3o1P3mt|n!XJlbuR5Uj-Ff!9MFw!+L g=4D`DVC4VG!2cDjWMTjZHzy;rBxiAQeo<;M01Gw~5&!@I delta 117 zcmZojXh@hK&B!uQ#+i|2W5N=CE@u8S4E*o;@A9A7EGV##-;SS|g@I8~&d9*XOxM6j z*U(aciG_hlk?}S{gr5