INF220 - TP Séance 2
Durée : 2h00
Commencez par copier-coller ci-dessous
le contenu du fichier Java élaboré lors de la séance précédente
Objectifs
- Utiliser la récursivité.
- Continuer à dessiner un cerisier en fleurs.
- Utiliser l'aléatoire pour ajouter du réalisme.
Au menu
- Consignes
- Amélioration du dessin de l'arbre
- Ajout des fleurs
Lisez attentivement cet énoncé de TP
en suivant les instructions.
En cas d'interrogation,
faites appel à moi,
que ce soit pour en savoir plus sur un des points abordés pendant le TP, ou
pour savoir comment effectuer une des tâches demandées (numérotées pour pouvoir
y faire référence simplement).
Surtout
ne restez pas bloqué(e) sur une des questions.
Entre parenthèses, à côté des titres de sous-sections, est indiqué
le temps que vous avez dû passer à effectuer les étapes précédentes.
On continue le TP2 dont l'objectif est de dessiner un cerisier en fleurs.
Si vous n'avez pas fini le
TP2 jusqu'à la question C2,
question(); ?>terminez-le avant de passer
à la suite dans celui-ci.
Si vous appelez la fonction
dessineHautArbre dans la fonction
paint
et pas dans la fonction
dessineArbre, modifiez votre code afin
que la fonction
dessineHautArbre soit appelée dans la fonction
dessineArbre. Ceci permettra de ne régler que les variables d'entrée
de la fonction
dessineArbre pour déplacer l'arbre, ou changer
son niveau : il n'y aura pas besoin de modifier aussi les variables
d'entrée de
dessineHautArbre
On signale une fonction supplémentaire qui sera utile dans ce TP, en plus de celles du précédent TP, signalées ensuite :
- dessineOvale(Graphics g, int abscisseCoin, int ordonneeCoin, int largeur, int hauteur, Color couleur)
qui dessine sur l'objet g un ovale plein de la couleur couleur,
dont le coin en haut à gauche a pour coordonnées (abscisseCoin,ordonneeCoin),
et qui a pour largeur largeur et pour hauteur hauteur
- NombreAleatoire qui prend deux
entiers comme paramètres d'entrée, et tire un entiers compris (au sens large)
entre ces deux entiers.
- dessineRectangle(Graphics g, int abscisseCoin, int ordonneeCoin, int largeur, int hauteur, Color couleur)
qui dessine sur l'objet g un rectangle vide dont la bordure est de couleur
couleur, et dont le coin en haut à gauche a pour coordonnées (abscisseCoin,ordonneeCoin),
et qui a pour largeur largeur et pour hauteur hauteur
- dessineRectanglePlein(Graphics g, int abscisseCoin, int ordonneeCoin, int largeur, int hauteur, Color couleur),
qui dessine sur l'objet g un rectangle dont l'intérieur est coloré de la même couleur
couleur que la bordure, dont le coin en haut à gauche a pour coordonnées (abscisseCoin,ordonneeCoin),
et qui a pour largeur largeur et pour hauteur hauteur
- dessineLigne(Graphics g, int abscisse1, int ordonnee1, int abscisse2, int ordonnee2, Color couleur),
qui dessine sur l'objet g une ligne commençant au point de coordonnées
(abscisse1,ordonnee1) et se terminant au point de coordonnées (abscisse2,ordonnee2).
- couleurRGB(int r,int g,int b) qui renvoie une couleur, de type Color,
qui est une combinaison de rouge, vert et bleu, ces trois couleurs correspondant
aux variables d'entrée r, g et b qui sont des entiers entre
0 et 255.
On va tenter de rendre le dessin plus réaliste. Pour cela, on va s'arranger pour que :
- plus les branches sont hautes, plus elles sont courtes
- aux embranchements, il peut y avoir moins ou plus que 2 branches
- plus l'embranchement est élevé, plus il y a de branches à l'embranchement
question(); ?>Modifiez la
fonction dessineHautArbre pour changer le calcul des longueurs des
branches :
- la hauteur doit être un nombre aléatoire entre 5 et 10+5*niveau.
Ainsi, plus les branches sont haut, plus la variable niveau
a des valeurs basses et plus la hauteur est basse.
- le décalage horizontal entre le bas et le haut de la branche doit être
un nombre aléatoire entre -3*niveau et 3*niveau.
question(); ?>Modifiez la
fonction dessineHautArbre pour changer le nombre de
branches à chaque embranchement : il doit être tiré aléatoirement
entre 1 et niveau+1, afin que l'arbre soit de plus en plus touffu
vers le haut.
question(); ?>Ajoutez une
fonction dessineFleur, qui prend en entrée l'objet Graphics
g et les coordonnées
du centre de la fleur, et qui dessine un disque blanc de 3 pixels de diamètre
contenant un disque rose de 2 pixels de diamètre à ces coordonnées.
En appelant la fonction
dessineFleur depuis
dessineHautArbre,
question(); ?>ajoutez une fleur
en haut de chaque branche dessinée.
En appelant plusieurs fois la fonction
dessineArbre,
question(); ?>dessinez plusieurs
arbres à l'écran. Attention à l'ordre
de dessin en fonction de la position dans l'écran
(arrière plan / premier plan).
Si vous avez terminé en avance,
travaillez sur les exercices à trous du projet Morpion.
Vous pouvez éventuellement tenter de terminer le projet
en autonomie, sans indication : cela vous aidera probablement
à remplir les trous lors des prochains exercices sur ce projet.