Table des matières

TD 4 : Exploration Martienne

Classes abstraites

1) Dans la classe Vehicule, les méthodes distance et getPathTo retournent des valeurs fictives. En réalité, cela ne fait pas de sens d’instancier un objet de la classe Vehicule. Nous allons empêcher cela en définissant la classe Vehicule comme abstraite. Modifiez le code en conséquence.

2) De même, faites en sorte que la classe Sprite soit abstraite.

Organisation du code

Nous commençons à avoir beaucoup de classes et cela devient difficile de s’y retrouver.

1) Créez un package view et déplacer les classes ImageRessource, View et toutes les classes Spritedans le package view.

2) Créez un package model et déplacer les classes en relation avec les véhicules dedans.

Surface martienne

En réalité, la surface martienne n’est pas aussi lisse que ça.

1) Ajouter une classe SpriteDust () pour afficher des poussières martiennes à quelques endroits sur la grille.

2) Ajouter une classe SpriteRock () pour afficher des rochers martiens à quelques endroits sur la grille.

Modélisons le monde martien

Nous avons positionné des images à certains endroits, mais nous n’avons pas de modèle du terrain. Nous allons représenter le sol martien par un tableau à deux dimensions dont chaque cellule représentera une tuile du terrain.

1) Créez une classe World qui contient un tableau à deux dimensions pour modéliser la surface martienne. Nous utiliserons le codage suivant : 0 indique qu’il n’y a rien, 1 indique la présence d’un rocher et 2 celle de poussières.

public class World {
    public static final int EMPTY = 0;
    public static final int ROCK  = 1;
    public static final int DUST  = 2;

    public World(int width, int height) {
        // À compléter
    }
}

2) Ajoutez les méthodes suivantes dans la classe World.

public int get(Position position) { ... }
public void set(Position position, int kind) { ... }

3) Ajoutez la classe DecorFactory suivante. Pour ce faire, modifiez les classes SpriteRock et SpriteDust pour qu’elles héritent toutes les deux d’une classe SpriteDecor. Modifiez la classe Main pour utiliser cette nouvelle méthode create.

public class DecorFactory {
    public static SpriteDecor create(Position position, int kind) {
        switch (kind) {
            case World.DUST:
                return new SpriteDust(position);
            case World.ROCK:
                return new SpriteRock(position);
            default:
                return null;
        }
    }
}

4) Créez une méthode Position random(int width, int height); dans la classe Position qui retourne une nouvelle position dans l’intervalle passé en argument.

Indications

Pour tirer des nombres aléatoires compris entre 0 et 100, vous devez créer une instance de Random puis invoquer la méthode nextInt comme suit.

Random random = new Random();
int r1 = random.nextInt(100);
int r2 = random.nextInt(100);

5) Ajoutez un constructeur à la classe World qui prendra deux arguments supplémentaires :

Modifiez le code pour ajouter des rochers et des poussières à des positions aléatoires.

6) Nos robots se déplacent librement à la surface de Mars, mais ne devraient pas pouvoir traverser les rochers! Modifiez le code de la méthode getPathTo pour que le robot s’arrête dès qu’il est bloqué par un rocher.