import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.ArrayList; 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 //------------------------------------------------------------------------- // nb de Segments qui composent la ligne protected int nbSegments = 400; // position du cercle, pour déterminer quel est le segment courant protected double xCercle = 400; // à modifier // segment qui se trouve au niveau du cercle : on le mémorise pour accélérer les traitements protected Segment SegCourant; // 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 //------------------------------------------------------------------------- //------------------------------------------------------------------------- // Constructeur de la classe //------------------------------------------------------------------------- public Ligne(){ // Valeurs initiales pour la position de la Ligne double x = 800; double y = 200; double dx,dy; // Création de la liste de segments qui composent la ligne Segment s; for (int i=0; i= s.x) && ( xCercle <= (s.x + s.xLong) ) ){ this.SegCourant = s; } }else{ if( (this.SegCourant.x + this.SegCourant.xLong) < xCercle ){ if( (s.x <= xCercle) && ((s.x + s.xLong) >= xCercle) ){ this.SegCourant = s; } } } } } //------------------------------------------------------------------------- // Redéfinition de la méthode Animer, spécifiquement pour la classe Ligne //------------------------------------------------------------------------- @Override public void Animer() { // Principe : // on parcourt tous les segments et on décale chacun de 10 pixels (par exemple) // vers la gauche // On modifiera cette méthode en fonction du niveau de jeu for(Segment s: this.listeSegments){ s.x -= 5; } } //------------------------------------------------------------------------- // 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; 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; // 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; }else{ this.SegCourant.setCouleur(Color.RED); dansCercle = false; } } return dansCercle; } public Segment getSegCourant() { return this.SegCourant; } }