2026-02-03 13:50:27 +01:00
|
|
|
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
|
|
|
|
|
//-------------------------------------------------------------------------
|
2026-02-03 15:36:11 +01:00
|
|
|
public void Monter(){
|
|
|
|
|
|
2026-02-03 13:50:27 +01:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|