package linea; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Arc2D; public class Cercle extends ObjetGraphique{ // il s'agit plutôt d'arcs de cercle // 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 //------------------------------------------------------------------------- protected double rayon = 30; protected double depY = 0; // déplacement // début et fin de l'arc, en degrés protected double debut = 0; protected double fin = 360; // Est-ce que le joueur est en train d'appuyer sur "up" protected boolean montee = false; // Vitesse du cercle protected double vitesse = -1.0; // Un pas pour l'application des forces, permet de régler // un peu la jouabilité protected double pas = 0.2; // Valeur de la force (norme) appliquée lorsque le joueur appuie sur up protected double impulsion = 25; //------------------------------------------------------------------------- // METHODES //------------------------------------------------------------------------- //------------------------------------------------------------------------- // Constructeurs de la classe //------------------------------------------------------------------------- public Cercle(){ x=400; y=200; } public Cercle(double debutArc, double finArc){ x=400; y=200; debut = debutArc; fin = finArc; } //------------------------------------------------------------------------- // Méthode d'accès en lecture au rayon, peut être utile // par exemple pour la classe qui vérifiera si la ligne passe dans le // cercle //------------------------------------------------------------------------- public double getRayon(){ return rayon; } //------------------------------------------------------------------------- // Méthode qui note que up a été appuyée // -> le booléen permet de ne plus être tributaire // de la vitesse de répétition du clavier //------------------------------------------------------------------------- public void Monter(){ montee = true; } //------------------------------------------------------------------------- // Méthode qui note que up a été relâchée //------------------------------------------------------------------------- public void ArreterMonter(){ montee = false; } //------------------------------------------------------------------------- // Redéfinition de la méthode Afficher, spécifiquement pour la classe //------------------------------------------------------------------------- @Override void Afficher(Graphics g) { // choix de la couleur et de l'épaisseur Graphics2D g2D = (Graphics2D) g; g2D.setStroke(new BasicStroke(5.0f)); g.setColor(this.couleur); // dessin de l'arc g2D.draw(new Arc2D.Double(x-rayon/2, y-rayon, rayon, rayon*2, debut, fin, Arc2D.OPEN)); } //------------------------------------------------------------------------- // Redéfinition de la méthode Animer, spécifiquement pour la classe //------------------------------------------------------------------------- @Override void Animer() { // pas est à prendre comme un "delta t" // chute libre vitesse = vitesse + 9.81 * pas; // impulsion if (montee==true) { vitesse = vitesse - impulsion *pas; } depY = 1/2 * 9.81 + vitesse * pas; if (depY<-10) { depY=-10; } if (depY>10){ depY =10; } y+=depY; } }