Correction exercice 4

Décompressez l’archive fournie ici

package rushhour.abstraction;

import java.util.ArrayList;
import java.util.List;

public class VehiculeCases implements IVehicule {
	// VARIABLES D'INSTANCES
	private List<Case> cases; // les cases occupees par le vehicule, de la 
	    // case la plus en haut a gauche a la case la plus en bas a droite.
	private int  couleur; //  la couleur exprimee au travers de la teinte.
	private String inscription; // l'inscription figurant sur le vehicule   

	/**
	 * Initialise this de sorte que lg soit le nombre de cases occupees par 
	 * le vehicule designe par this, 
	 * o soit son orientation ( HORIZONTALE ou VERTICALE, constantes entieres definies ci-dessus), 
	 * c soit l'index de la plus petit colonne qu'il occupe, 
	 * l soit l'index de la plus petit ligne qu'il occupe, 
	 * coul soit l'entier designant sa teinte,
	 * et que s soit son inscription
	 * @param lg
	 * @param o
	 * @param c
	 * @param l
	 * @param coul
	 * @param s
	 */
	public VehiculeCases(int lg, boolean o, Case hg, int coul, String s) {
		this.cases=new ArrayList<Case>();
		if (o==IVehicule.HORIZONTALE) {
			for (int col = hg.getCol(); col<hg.getCol()+lg; col++) {
				this.cases.add(new Case(col, hg.getLig()));
			}
		} else {
			for (int lig = hg.getLig(); lig<hg.getLig()+lg; lig++) {
				this.cases.add(new Case(hg.getCol(), lig));
			}
		}
		this.couleur = coul;
		this.inscription = s; 
	}
	/**
	 * Retourne le nombre de cases occupees par le vehicule
	 * @return le nombre de cases occupees par le vehicule
	 */
	public int getLongueur() {
		return this.cases.size();
	}
	/**
	 * Retourne l'orientation du vehicule (HORIZONTALE ou VERTICALE)
	 * @return l'orientation du vehicule (HORIZONTALE ou VERTICALE)
	 */
	public boolean getOrientation() {
		if (this.cases.get(0).getCol()==this.cases.get(1).getCol()) {
			return IVehicule.VERTICALE;
		} else {
			return IVehicule.HORIZONTALE;
		}
	}
	/**
	 * Retourne la liste des cases occupées par le vehicule en allant de la case la plus en haut a gauche occupee a la case la plus en bas a droite occupee. 
	 * @return la liste des cases occupees par le vehicule en allant de la case la plus en haut a gauche occupee a la case la plus en bas a droite occupee.
	 */
	public List<Case> getCases() {
		return this.cases;
	}
	/**
	 * Retourne la teinte du vehicule
	 * @return la teinte du vehicule
	 */
	public int getCouleur() {
		return this.couleur;
	}
	/**
	 * Retourne l'inscription du vehicule
	 * @return l'inscription du vehicule
	 */
	public String getInscription() {
		return this.inscription;
	}
	/**
	 * Modifie le vehicule de sorte que la case la plus en haut a gauche qu'il occupe soit c
	 * Les autres caracteristiques (orientation, longueur, couleur et description) ne sont pas modifiees.
	 * @param c, une case de l'aire de jeu
	 */
	public void deplacerEn(Case c) {
		int deltaC = c.getCol()-this.cases.get(0).getCol();
		int deltaL = c.getLig()-this.cases.get(0).getLig();
		for (Case ca : this.cases) {
			ca.setCol(ca.getCol()+deltaC);
			ca.setLig(ca.getLig()+deltaL);
		}
	}

	/**
	 * Retourne true si le vehicule occupe (entre autres) la case c.
	 * @param c, une case de l'aire de jeu
	 * @return true si le vehicule occupe (entre autres) la case c.
	 */
	public boolean occupe(Case c) {
		return this.cases.contains(c);
	}
}