import java.awt.Graphics; /** * La classe Tete permet de définir la tête d'une chenille. * Une Tete est est un anneau particulier qui en plus des attributs d'un anneau * possède un cap (direction de déplacement).
* L'affichage d'une tête est différent de celui d'un anneau. Il s'effectue en * traçant un disque noir au lieu d'un simple cercle. *
* * @author */ public class Tete extends Anneau { //------- variables d'instance (attributs) -------------------------- /** * cap de la tête; Exprimé en degrés */ protected double cap; //-------- Constructeurs --------------------------------------------- /** * crée une tête en fixant sa position initiale, son rayon et son cap * @param xInit abscisse du centre de l'anneau * @param yInit ordonnée du centre de l'anneau * @param rInit rayon de l'anneau * @param cInit le cap intial (en degrés) */ public Tete(int xInit, int yInit, int rInit, double cInit) { super(xInit,yInit,rInit); cap = cInit; } /** * crée une tête en fixant sa position initiale. Son rayon et son cap * sont fixés avec les valeurs par défaut. * @param xInit abscisse du centre de l'anneau * @param yInit ordonnée du centre de l'anneau */ public Tete(int xInit, int yInit) { this(xInit,yInit,R,0.0); } //-------- Méthodes --------------------------------------------- /** * affiche la tête en la matérialisant par un disque noir * @param g cet objet de classe Graphics passé en paramètre est l'objet qui * prend en charge la gestion de l'affichage dans la fenêtre de dessin. * C'est cet objet qui gère le "contexte graphique" pour cette fenêtre. */ public void dessiner(Graphics g) { g.fillOval(x-r, y-r, 2*r, 2*r); } /** * Modifie le cap de la chenille. Le cap courant de la chenille est modifié * en lui ajoutant une variation de cap passée en paramètre. * @param deltaC la variation à appliquer au cap de la chenille (en degrés). */ public void devierCap(double deltaC) { cap += deltaC; } /** * deplace le centre de la chenille de manière à ce que le déplacement * effectué corresponde à un déplacement d'une distance egale au rayon de * de la tête dans la direction indiquée par le cap. */ public void deplacerSelonCap() { x = (int) (x + r * Math.cos(Math.PI*cap /180)); y = (int) (y + r * Math.sin(Math.PI*cap /180)); } /** * teste si la tête atteint le bord de la zône de dessin * @param xMax la taille en x de la zône de dessin * @param yMAx la taille en y de la zône de dessin * @return true si la distance entre le centre de la tête et l'un * des bord de la fenpêtre est inférieure au rayon de la tête. */ public boolean atteintBord(int xMax, int yMax) { return ((x < r) || (x > xMax - r) || (y < r) || (y > yMax - r)); } }