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; // Évite l'effet "chute incontrôlable" quand on reprend la montée tard. if (vitesse > 2.0) { vitesse = 2.0; } } //------------------------------------------------------------------------- // 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)); } // Accesseur pour savoir si le joueur maintient la montée public boolean isMontee() { return montee; } //------------------------------------------------------------------------- // Redéfinition de la méthode Animer, spécifiquement pour la classe //------------------------------------------------------------------------- @Override void Animer() { double gravite = 0.95; double poussee = 1.45; double amortissement = 0.92; if (montee==true) { vitesse -= poussee; } else { vitesse += gravite; } // Lissage global pour un ressenti plus régulier. vitesse *= amortissement; if (vitesse < -6.5) { vitesse = -6.5; } if (vitesse > 6.5) { vitesse = 6.5; } depY = vitesse; y += depY; //position if(y<= 0 + rayon){ y = 0 + rayon; vitesse = 0; }else if(y>=600 - rayon){ y = 600 - rayon; vitesse = 0; } } }