import java.awt.Graphics; /** * Cette classe permet de modéliser un visage de forme ovale. *
Le repère graphique est défini avec son origine en haut * à gauche de la zône de dessin, l'axe des x horizontal et l'axe * des y vertical vers le bas. *
Un visage est défini par : *
true
si le rectangle englobant le visage
* intersecte le coté gauche de la zône de dessin,
* false
sinon.
*/
public boolean bordGaucheAtteint()
{
return (xhg < 0);
}
/**
* Evalue si le visage atteint le bord droit de la zône de dessin.
* @return true
si le rectangle englobant le visage
* intersecte le coté droit de la zône de dessin,
* false
sinon.
*/
public boolean bordDroitAtteint()
{
return ((xhg + largeur) > d.getLargeur());
}
/**
* Evalue si le visage atteint le bord haut de la zône de dessin.
* @return true
si le rectangle englobant le visage
* intersecte le coté haut de la zône de dessin,
* false
sinon.
*/
public boolean bordHautAtteint()
{
return (yhg < 0);
}
/**
* Evalue si le visage atteint le bord bas de la zône de dessin.
* @return true
si le rectangle englobant le visage
* intersecte le coté bas de la zône de dessin,
* false
sinon.
*/
public boolean bordBasAtteint()
{
return ((yhg + hauteur) >= d.getHauteur());
}
/**
* Evalue si le visage atteint l'un des bords de la zône de dessin.
* @return true
si le rectangle englobant le visage
* intersecte l'un des cotés de la zône de dessin,
* false
sinon.
*/
public boolean bordAtteint()
{
return bordDroitAtteint() || bordGaucheAtteint() || bordHautAtteint() || bordBasAtteint();
}
/**
* fixe la zône de dessin dans laquelle le visage est affiché.
* @param d référence de la^zône de dessin associée au Visage
*
* @see Dessin
* @see Dessinable
*/
public void setDessin(Dessin d)
{
this.d = d;
}
/**
* change l'expression du visage. Si il était impassible, il devient souriant,
* si il était souriant il devient impassible.
*/
public void changeExpression() {
impassible = !impassible;
}
/**
* effectue un déplacement élémentaire, si le visage atteint un des bords il change
* d'expression et de direction de déplacement.
*/
public void deplacerAvecRebond() {
if (this.bordDroitAtteint() || this.bordGaucheAtteint()) {
this.inverserDx();
this.changeExpression();
}
if (this.bordHautAtteint() || this.bordBasAtteint()) {
this.inverserDy();
this.changeExpression();
}
this.deplacer();
}
/**
* affiche le visage.
* @param g le contexte graphique de la zône de dessin en charge de l'affichage.
*
* @see java.awt.Graphics
* @see Dessinable
*/
public void dessiner(Graphics g)
{
// dessiner le contour du visage
g.drawOval(xhg , yhg, largeur ,hauteur);
// dessiner la bouche
if (impassible)
g.drawLine(xhg + largeur / 4, yhg + (2*hauteur)/3, xhg + (3*largeur)/4, yhg + (2*hauteur)/3);
else
g.drawArc(xhg + largeur / 4, yhg + (2*hauteur)/3, largeur/2, hauteur/5,-45,-90);
// dessiner les yeux
int largeurOeil = largeur /5;
int hauteurOeil =hauteur/5;
g.drawOval(xhg + largeurOeil, yhg + hauteurOeil, largeurOeil, hauteurOeil);
g.drawOval(xhg + 3 * largeurOeil, yhg + hauteurOeil, largeurOeil, hauteurOeil);
}
} // VisageRond