Table des matières

TD 5 : 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 static 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.

Pour aller plus loin

1) Faire en sorte que nos robots consomment 20% d’énergie en plus lorsqu’ils roulent sur de la poussière.

2) Dessiner les cases accessibles par le robot en fonction de son énergie restante.