import java.util.LinkedList;

public class Terrain {
	private LinkedList<Elément> éléments;
	private int largeur, hauteur;
	
	public Terrain(int largeur, int hauteur) {
		assert(hauteur > 0 && largeur > 0);
		éléments = new LinkedList<Elément>();
		this.largeur = largeur;
		this.hauteur = hauteur;
	}
	
	public void ajoute(Elément e) {
		éléments.add(e);
	}
	
	public void simule(int durée) {
		for (; durée > 0; --durée)
			for (Elément e : éléments)
				e.bouge(largeur, hauteur);
	}
	
	private Elément premierSur(int x, int y) {
		for (Elément e : éléments)
			if (e.occupe(x,  y))
				return e;
		return null;
	}

	public String toString() {
		StringBuilder sb = new StringBuilder();
		for (int x = 1; x <= largeur + 2; ++x)
			sb.append('-');
		sb.append(System.lineSeparator());

		for (int y = 1; y <= hauteur; ++y) {
			sb.append('|');
			for (int x = 1; x <= largeur; ++x) {
				Elément e = premierSur(x, y);
				if (e == null)
					sb.append(' ');
				else
					sb.append(e.getId());
			}
			sb.append('|' + System.lineSeparator());
		}
		for (int x = 1; x <= largeur + 2; ++x)
			sb.append('-');
		sb.append(System.lineSeparator());
		return sb.toString();
	}
}
