INF220 - TP Séance 1

Durée : 2h00




Objectifs




Au menu

  1. Consignes
  2. Principe du dessin récursif de l'arbre
  3. Amélioration du dessin de l'arbre
  4. Ajout des fleurs

L'objectif de ce TP est de dessiner un cerisier en 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.

Téléchargez le fichier INF220TP1.java qui contient le code permettant de dessiner une maison, que nous avions créé lors d'un TP précédent. Compilez et exécutez ce code.

On retrouve dans ce code des fonctions déjà utilisées précédemment : Créez une fonction dessineArbre qui prend en entrée un objet Graphics g, deux entiers abscisseBas et ordonneeBas, un entier niveau, et ne renvoie rien. Dans la suite de ce TP, nous allons remplir cette fonction pour qu'elle dessine un arbre dans la fenêtre graphique g, dont la base du tronc se situe au point de coordonnées (abscisseBas,ordonneeBas), et dont le nombre de paliers (en hauteur) est donné par l'entier niveau.

Ajoutez une instruction à l'intérieur de la fonction dessineArbre pour dessiner le tronc de l'arbre : une ligne verticale brune de 50 pixels de hauteur (dessin 1 ci-dessous). Appelez l'algorithme dessineArbre depuis la fonction paint pour que le tronc soit effectivement ajouté au dessin. Réglez les coordonnées pour que le tronc soit bien planté dans le gazon (la partie verte), comme dans le dessin 1 ci-dessous.

On passe maintenant au coeur de l'algorithme de dessin du haut de l'arbre (la partie au-dessus du tronc), que l'on va gérer par un algorithme récursif. Le principe est que pour construire le haut d'un arbre de niveau n+1, on va construire, en haut du point où on vient d'arriver (le haut du tronc) deux branches, une vers la gauche, une vers la droite, et en haut de chacune de ces branches on va construire un arbre de niveau n. En suivant ce principe, écrivez un algorithme récursif dessineHautArbre, qui prend en entrée un objet Graphics g, deux entiers abscisseBas et ordonneeBas, et un entier n, et qui, en partant du point de coordonnées (abscisseBas,ordonneeBas), dessine deux branches : puis, au-dessus de chaque branche, s'appelle lui-même pour dessiner le haut d'un arbre de niveau n-1.

Appelez cet algorithme dessineHautArbre dans l'algorithme dessineArbre afin de dessiner un arbre de niveau 5 (dessin 2 ci-dessous).

La structure de l'arbre est trop régulière et les branches se touchent et se recouvrent. Pour éviter cela, au lieu de dessiner des branches de hauteur 50, dessinez des branches de hauteur aléatoire entre 10 et 50 (dessin 3 ci-dessous). On va tenter d'améliorer le dessin de l'arbre pour le rendre plus réaliste. Afin de permettre de dessiner des branches d'épaisseur différente, écrivez une fonction dessineBranche qui prend les mêmes entrées que dessineLigne, avec une entrée supplémentaire : un entier epaisseur. Elle dessine alors pas seulement une ligne, mais epaisseur lignes décalées de 1 pixel vers la droite. Utilisez cette fonction dessineBranche, avec une épaisseur égale au niveau de l'arbre, afin de dessiner le tronc de l'arbre (dessin 4 ci-dessous).

Utilisez la fonction dessineBranche à l'intérieur de l'algorithme dessineHautArbre pour que l'épaisseur varie en fonction du niveau (dessin 5 ci-dessous) : à chaque fois que le niveau baisse de 1, l'épaisseur aussi.

Images de l'arbre en construction

On finira au prochain TP les améliorations du dessin de l'arbre (branches plus petites en haut, nombre de branches aléatoire aux embranchements, etc.). Si vous avez terminé en avance, revenez à l'exercice bonus du TP5 sur le jeu des tours de Hanoï pour le terminer. On verra au prochain TP comment dessiner les fleurs en ajoutant des petits ovales blancs et roses aux bons endroits.