//1: allume de la couleur du fond (donc efface) le point au milieu de la fenetre //2.1 class figure { int typ,x,y,a,b,coul; public : void set_droite(int xc, int yc, int couleur, int l, int h); void set_cercle(int xc, int yc, int couleur, int diam); void set_croix(int xc, int yc, int couleur, int l, int h); void set_rectangle(int xc, int yc, int couleur, int l, int h); void set_triangle(int xc, int yc, int couleur, int l, int h); int get_x_centre(void); int get_y_centre(void); int get_couleur(void); int get_x_min(void); int get_y_min(void); int get_x_max(void); int get_y_max(void); void dessiner(fenetre f); void deplacer(int dx,int dy); }; //2.2 void figure::set_droite(int xc, int yc, int couleur, int l, int h) { x=xc;y=yc;coul=couleur;a=l;b=h; if(h==0)typ=1; else if(l==0)typ=2; else typ=3; } void figure::set_cercle(int xc, int yc, int couleur, int diam) { x=xc;y=yc;coul=couleur;a=diam;b=diam;typ=4; } void figure::set_croix(int xc, int yc, int couleur, int l, int h) { x=xc;y=yc;coul=couleur;a=l;b=h;typ=5; } void figure::set_rectangle(int xc, int yc, int couleur, int l, int h) { x=xc;y=yc;coul=couleur;a=l;b=h;typ=6; } void figure::set_triangle(int xc, int yc, int couleur, int l, int h) { x=xc;y=yc;coul=couleur;a=l;b=h;typ=7; } //2.3 int figure::get_x_centre(void) {return x;} int figure::get_y_centre(void) {return y;} int figure::get_couleur(void) {return coul;} int figure::get_x_min(void) { return (x-abs(a/2)); } int figure::get_x_max(void) { return (x+abs(a/2)); } int figure::get_y_min(void) //il n'y a que pour type 7 que le centre n'est pas au milieu { if(typ==7)return (y-abs(b/3)); else return (y-abs(b/2)); } int figure::get_y_max(void) { if(typ==7)return (y+abs(2*b)/3); else return (y+abs(b/2)); } //2.4 void figure::dessiner(fenetre f) { int i; figure lig; if(typ==1) { for(i=get_x_min();i<=get_x_max();i++) f.allume(i,y,coul); } else if(typ==2) { for(i=get_y_min();i<=get_y_max();i++) f.allume(x,i,coul); } else if(typ==5) { lig.set_droite(x,get_y_min(),coul,a,0); //horizontale du bas lig.dessiner(f); lig.set_droite(x,get_y_max(),coul,a,0); //haut lig.dessiner(f); lig.set_droite(get_x_min(),y,coul,0,b); //gauche lig.dessiner(f); lig.set_droite(get_x_max(),y,coul,0,b); //droite lig.dessiner(f); } } //2.5 void figure::deplacer(int dx,int dy) //je suppose f globale car elle n'est pas en argument { int coul_initiale; coul_initiale=coul; coul=f.get_couleur_fond(); dessiner(f); x=x+dx;y=y+dy; coul=coul_initiale; dessiner(f); } //2.6 int main(void) { fenetre f; int c=18; //couleur au pif figure tete,corps,brasd,brasg,jg,jd; f.ouvrir_graphique(); tete.set_cercle(5,10,c,4); corps.set_rectangle(5,6,c,4,4); brasg.set_droite(2,6,c,2,2); brasd.set_droite(8,6,c,2,-2); jg.set_droite(3,2,c,4,0); jd.set_droite(5,2,c,4,0); tete.dessiner(f); corps.dessiner(f); brasg.dessiner(f); brasd.dessiner(f); jg.dessiner(f); jd.dessiner(f); f.fermer_graphique(); } //2.7 #define DIM 100 class dessin { figure f[DIM]; int nb; public : void saisie(void); void dessiner(fenetre f); void ajouter(figure f); //rajoute f en plus de celles qu y sont deja void deplacer(int dx,int dy); }; //2.8 void dessin::deplacer(int dx,int dy) { int i; for(i=0;i<nb;i++) f[i].deplacer(dx,dy); }
Patrick TRAU, ULP - IPST 31 mars 2006