2026-02-10 16:39:21 +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
|
2026-03-28 14:31:55 +01:00
|
|
|
private static final BasicStroke ARC_STROKE = new BasicStroke(5.0f);
|
|
|
|
|
private static final double GRAVITE = 0.95;
|
|
|
|
|
private static final double POUSSEE = 1.45;
|
|
|
|
|
private static final double AMORTISSEMENT = 0.92;
|
|
|
|
|
private static final double VITESSE_MIN = -6.5;
|
|
|
|
|
private static final double VITESSE_MAX = 6.5;
|
|
|
|
|
private static final double BORD_HAUT = 0;
|
|
|
|
|
private static final double BORD_BAS = 600;
|
|
|
|
|
private final Arc2D.Double arc = new Arc2D.Double();
|
|
|
|
|
|
2026-02-10 16:39:21 +01:00
|
|
|
// 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;
|
2026-03-28 14:18:17 +01:00
|
|
|
// Évite l'effet "chute incontrôlable" quand on reprend la montée tard.
|
|
|
|
|
if (vitesse > 2.0) {
|
|
|
|
|
vitesse = 2.0;
|
|
|
|
|
}
|
2026-02-10 16:39:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
// 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;
|
2026-03-28 14:31:55 +01:00
|
|
|
g2D.setStroke(ARC_STROKE);
|
2026-02-10 16:39:21 +01:00
|
|
|
g.setColor(this.couleur);
|
|
|
|
|
|
|
|
|
|
// dessin de l'arc
|
2026-03-28 14:31:55 +01:00
|
|
|
arc.setArc(x - rayon / 2.0, y - rayon, rayon, rayon * 2.0, debut, fin, Arc2D.OPEN);
|
|
|
|
|
g2D.draw(arc);
|
2026-02-10 16:39:21 +01:00
|
|
|
}
|
|
|
|
|
|
2026-02-23 09:41:54 +01:00
|
|
|
// Accesseur pour savoir si le joueur maintient la montée
|
|
|
|
|
public boolean isMontee() {
|
|
|
|
|
return montee;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-10 16:39:21 +01:00
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
// Redéfinition de la méthode Animer, spécifiquement pour la classe
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
|
@Override
|
|
|
|
|
void Animer() {
|
2026-03-28 14:31:55 +01:00
|
|
|
if (montee) {
|
|
|
|
|
vitesse -= POUSSEE;
|
2026-03-28 14:18:17 +01:00
|
|
|
} else {
|
2026-03-28 14:31:55 +01:00
|
|
|
vitesse += GRAVITE;
|
2026-02-10 16:39:21 +01:00
|
|
|
}
|
2026-03-28 14:18:17 +01:00
|
|
|
|
|
|
|
|
// Lissage global pour un ressenti plus régulier.
|
2026-03-28 14:31:55 +01:00
|
|
|
vitesse *= AMORTISSEMENT;
|
2026-03-28 14:18:17 +01:00
|
|
|
|
2026-03-28 14:31:55 +01:00
|
|
|
if (vitesse < VITESSE_MIN) {
|
|
|
|
|
vitesse = VITESSE_MIN;
|
2026-02-10 16:39:21 +01:00
|
|
|
}
|
2026-03-28 14:31:55 +01:00
|
|
|
if (vitesse > VITESSE_MAX) {
|
|
|
|
|
vitesse = VITESSE_MAX;
|
2026-02-10 16:39:21 +01:00
|
|
|
}
|
2026-03-28 14:18:17 +01:00
|
|
|
|
|
|
|
|
depY = vitesse;
|
|
|
|
|
y += depY;
|
2026-02-10 16:39:21 +01:00
|
|
|
|
|
|
|
|
//position
|
2026-03-28 14:31:55 +01:00
|
|
|
if (y <= BORD_HAUT + rayon) {
|
|
|
|
|
y = BORD_HAUT + rayon;
|
2026-03-28 14:18:17 +01:00
|
|
|
vitesse = 0;
|
2026-03-28 14:31:55 +01:00
|
|
|
} else if (y >= BORD_BAS - rayon) {
|
|
|
|
|
y = BORD_BAS - rayon;
|
2026-03-28 14:18:17 +01:00
|
|
|
vitesse = 0;
|
2026-02-10 16:39:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|