Remise en route objet / JAVA

Objectif

Il vous est demandé de mettre en place quelques classes pour vous remettre en tête les grands principes de la programmation orientée objet : messages et collaboration entre objets, attributs et méthodes, constructeurs, héritage, etc. Pour cela, vous manipulerez des tortues, que vous ferez jouer au ballon.

Votre travail sera réutilisé pour un rendu noté en MIF16 utilisant Maven. Il est donc fortement conseillé d'avoir terminé ce TP pour la fin de la semaine prochaine.

Environnement

Pour développer en Java durant le TP, vous pouvez choisir d'utiliser :

  • Un environnement de développement intégré (comme Eclipse ou Netbeans) qui permet de compiler, de générer un projet, de débugger et d'exécuter
  • N'importe quel éditeur de texte avec coloration syntaxique, et effectuer la compilation et l'exécution en ligne de commande (javac, java, éventuellement un Makefile)

Travail demandé

On vous fournit une archive logo.zip (une version modifiée d'un code fourni par Jacques Ferber), contenant trois classes :

  • Tortue : la tortue elle-même, et ses diverses méthodes (avancer, tourner, ...). Entre autres, la tortue contient une liste de segments, correspondant à la trace laissée au fur et à mesure de son parcours (pour l'affichage, les déplacements sont gardés en mémoire)
  • FeuilleDessin : gère une liste de tortues, et la feuille sur laquelle on dessinera
  • SimpleLogo : programme graphique principal, qui contient une feuille de dessin et une tortue courante, et qui comporte des boutons permettant de lui passer des commandes. Les boutons proc1, proc2, proc3 seront considérés comme pouvant être utilisés pour lancer différents programmes.

Décompressez l'archive dans un dossier sur votre compte. Explorez le code source. Compilez et lancez le programme principal SimpleLogo. Testez les différentes fonctionnalités

Consultez la documentation Java (docs.oracle.com/javase/7/docs/api) pour comprendre globalement le fonctionnement des classes relatives à l'interface graphique (packages AWT et SWING : classes JFrame, JPanel, Button, ...) et de la gestion des évènements (interface EventListener et interfaces dérivées : ActionListener, MouseListener, ... méthodes addActionListener() et actionPeformed() )

Amélioration des tortues

Ajoutez quelques méthodes aux tortues, permettant de réaliser d'autres figures géométriques de base, qui pourront être appelées par les boutons proc_i :

  • dessiner une maison avec un carré et un triangle
  • dessiner une étoile à n branches, de taille t, de type astérisque : des lignes qui partent d'un même centre : avancer(t), reculer(t), tourner(360/n)

De nouvelles tortues

Créez une sous-classe de Tortue, appellée TortueAmelioree, qui a pour caractéristiques :

  • de connaître son nom et de pouvoir l'écrire dans la console. On devra pouvoir créer une tortue en lui donnant un nom. Si on ne le fait pas, elle aura un nom par défaut de votre choix (pensez aux attributs statiques)
  • de pouvoir connaître d'autres tortues (elle contiendra une liste de références vers d'autres tortues). Les méthodes associées devront permettre d'ajouter et d'enlever une tortue à la liste des tortues connues par la tortue appelée ;
  • de pouvoir donner la distance (euclidienne) à laquelle elle se trouve d'une autre tortue (l'appel se fera en donnant une référence de tortue).
  • de tester après chaque déplacement si elle se trouve près d'une tortue qu'elle connaît (par exemple moins de 15 pixels), et de la saluer par son nom, puis de lui demander de se déplacer (par exemple avancer un peu).

Modifiez le programme principal pour tester cette nouvelle classe. Mettez en place une méthode qui permet ce test (qui crée plusieurs tortues, les fait se connaître les unes les autres, en gère les déplacements, etc.). Utiliser un bouton proc_i pour lancer le test (la tortue courante sera toujours là, mais ne sera pas utilisée).

Des tortues qui se passent une balle

Créez une sous-classe de Tortue appelée TortueBalle. Celle-ci a pour caractéristique de se dessiner comme un disque.

Créer une classe JeuDeBalle, qui gère une partie de balle : plusieurs Tortues sont créées, dont une balle. Une tortue joueuse commence avec la balle. Puis toutes les tortues se déplacent au hasard. Celle qui a la balle la déplace en même temps qu'elle. Si elle se trouve proche d'une autre tortue, elle lui passe la balle. Testez.

Deux équipes

Vous allez maintenant regrouper les tortues par équipes. Créez une classe EquipeTortue comportant, entre autres, un nom de joueur et un ensemble de tortues.

Créez une sous-classe de TortueAmelioree appelée TortueEquipe, qui aura comme attribut supplémentaire l'équipe d'appartenance. Ainsi, une tortue doit pourvoir vérifier qu'une autre tortue est une coéquipière ou une adversaire.

Le jeu peut être une simple "passe à dix" (faire 10 passes au sein d'une équipe sans se faire prendre la balle). Donnez un comportement à chaque type de tortue (déplacement sans la balle, déplacement avec la balle, passe à une autre tortue de la même équipe assez proche, prise de la balle à une tortue adverse assez proche). Créez une classe JeuEquipe, qui crée les équipes et gère le jeu. Testez.