INF411 — TD9 : Finding Nemo

Résumé de la structure du code fourni

Le code fourni est commenté en utilisant la convention JavaDoc. Vous pouvez consulter la documentation générée à partir de ces commentaires.

Coordonnées et directions

En machine (et dans le paquet ocean), l’océan est modélisé par une matrice pleine dont chaque cellule correspond à une case du labyrinthe. Les relations d’adjacence sont implicites, chaque cellule ayant par convention 4 voisines : une à gauche (ouest), une en dessous (sud), une à droite (est), une au dessus (nord). Ce modèle est implémenté par l’énumération BasicDirections (East, North, South, West), qui implémente l’interface Direction, et la classe Coordinate dans les fichiers BasicDirections.java et Coordinate.java respectivement. L’énumération BasicDirections définit les quatres directions en précisant pour chacune son opposée : WESTEAST et SOUTHNORTH. Elle fournit, entre autres, la méthode

La classe Coordinate fournit, entre autres, les méthodes suivantes pour manipuler les cellules :

Marquage des cellules

Afin de réaliser les parcours dans l’océan, on va associer des marques à certaines cellules. Tout objet dont la classe implémente l’interface Mark (voir le fichier Mark.java) peut servir de marque. C’est le cas de la classe BasicDirections, mais aussi de la classe IntMark (dans le fichier IntMark.java), qui permet de marquer une cellule par un nombre entier. Initialement, les cellules ne sont pas marquées.

Océan

La structure de l’océan est codée dans la classe Ocean, fournie dans le fichier Ocean.java. Cette classe fournit, entre autres, les méthodes ci-dessous.

La classe Ocean fournit également une méthode Mark getMark(Coordinate c) pour récupérer les marques posées, mais vous n’aurez pas à vous en servir. Utilisez plutôt les méthodes ciblées, getDirection(...) et getInteger(...), fournies par la classe Traversal (voir plus bas).

Par exemple, pour un ocean et une cellule c donnés,

L’affichage de l’océan est codé dans le packet graphics, dans les classes OceanCanvas (pour la partie générique) et BasicOceanCanvas (pour la partie spécique au maillage carré). Vous n’avez pas à vous préoccuper de ces classes. Toutefois, vous pouvez exécuter BasicOceanCanvas si vous le désirez : cela affichera simplement l’image en début d’énoncé dans une fenêtre. Comme pour la méthode exploreUsing(...), vous pouvez voir l’utilisation de cette classe dans les méthodes main(...) que vous trouverez dans les fichiers que vous allez modifier et dans FindNemo.java.

Exploration

Vous allez implémenter plusieurs algorithmes de parcours de l’océan. Chaque algorithme devra être implémenté dans la méthode traverse(Ocean ocean, Coordinate start) d’une classe dérivée de la classe abstraite Traversal (dans le fichier Traversal.java). Traversal est une classe abstraite puisque cette méthode y est déclarée sans justement être implémentée. La méthode traverse(...) est appelée par Ocean.exploreUsing(...) que nous avons vu ci-dessus. Par ailleurs, la classe Traversal fournit tous les éléments nécessaires pour implémenter des parcours de l’océan :

Ainsi, pour la méthode traverse(Ocean ocean, Coordinate start), la signification des arguments est la suivante :