1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| import java.awt.* ;
import java.util.ArrayList;
/**
* une EllipseAnime est une sorte de Ellipse qui
* possede un cap
* peut uniquement modifier son cap en tournant sur elle-meme
* sait si, oui ou non, elle est au bord de son espace
* peut avancer dans la direction de son cap
* peut se dessiner : elle materialise son cap
* @author (your name)
* @version (a version number or a date)
*/
public class EllipseAnime extends Ellipse {
private float cap;
public EllipseAnime() {super(); this.cap=0;}
public EllipseAnime(float capInit) {this.cap=capInit ;}
public EllipseAnime(float pdInit, float gdInit, float capInit) {super(pdInit, gdInit) ; this.cap=capInit ;}
public EllipseAnime(float xInit, float yInit, float pdInit, float gdInit, float capInit) {super(xInit, yInit, pdInit ,gdInit) ; this.cap=capInit ;}
public float getCap(){return this.cap ;}
/**
* une EllipseAnime sais s'il est bord de son espace
* @param les bords max de l'espace
* @return suis-je au bord ?
*/
public boolean auBord(float xMax, float yMax){
return (this.getX()+this.getGrandDiametre()>xMax-10 ||
this.getX()-this.getGrandDiametre()<10 ||
this.getY()+this.getGrandDiametre()>yMax-10 ||
this.getY()-this.getGrandDiametre()<10);
}
/**
* une EllipseAnime peut tourner d'un certain angle
* @param increment du cap
*/
public void tourner(float deltaC){this.cap=this.cap + deltaC ;}
/**
* une EllipseAnime peut avancer selon son cap
* s'il est au bord de son espace, il fait demi-tour
* @param longueur du deplacement
*/
public void avancer(float longueur){
if (this.auBord(xMax, yMax)) this.tourner(180);
float capEnRadian=this.cap*(float)(Math.PI/180); // conversion degre2radian
float x=longueur* (float) Math.cos(capEnRadian) ;
float y=longueur* (float) Math.sin(capEnRadian) ;
this.setX(this.getX()+x);
this.setY(this.getY()+y);
}
/**
* une EllipseAnime peut dessiner son cap
* le cap est represente par un "petit" segment de droite issu du centre
* @param le contexte graphique
* @param la couleur
*/
private void dessinerCap(Graphics g, Color c){
float capEnRadian=this.cap*(float)(Math.PI/180);
g.drawLine(Math.round(this.getX()),
Math.round(this.getY()),
Math.round(this.getX()+this.getPetitDiametre()*(float)Math.cos(capEnRadian)),
Math.round(this.getY()+this.getPetitDiametre()*(float)Math.sin(capEnRadian))
);
}
/**
* une EllipseAnime peut se dessiner
* @param le contexte graphique
* @param la couleur
*/
public void dessiner(Graphics g, Color c){
super.dessiner(g,c) ;// dessiner ellipse
this.dessinerCap(g,c) ; // dessiner cap
}
} |
Partager