public Controller(Grid lagrille,List<Integer[]> lesPersonnes, ChartLine chartline)
	{

		/*
		 *  STEP 1 : Definition de la grille
		 */
		drawArea = new DrawAreaUI();
		this.grid = lagrille;
		drawArea.setGridUi(new GridUI(grid));
		drawArea.paintGrid();

		/*
		 * STEP 2 : Definition des personnes
		 */
		this.personnes = new ArrayList<Person>();
		int i = 0;
		for(Integer[] p: lesPersonnes)
		{
			addPerson(new Person(i, p[0], p[1], this));
			i++;
		}

		/*
		 * STEP 3 : Definition des charts 
		 */
		this.chartExit = chartline;
		nbIterations = 0;

		chartDistance = new Chart("Distance parcourue");

		/*
		 * STEP 4 : Definition du timer (toute les 1 secondes)
		 */
		timer = new Timer( 1000, new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {

				ArrayList<Person> clonePersonnes = new ArrayList<Person>();
				for (Person p : personnes )
				{
					clonePersonnes.add((Person) p.clone());
				}				

				Iterator<Person> it = clonePersonnes.iterator();
				Iterator<Person> it2 = personnes.iterator();

				ArrayList<Person> personToRemove = new ArrayList<Person>();

				Person p;
				Person p2;
				while(it.hasNext())
				{
					p = it.next();
					p2 = it2.next();

					// Dans le cas ou la personne n'est plus dans le systeme
					if(!p.updatePosition()) 
					{
						personToRemove.add(p2);
						it.remove();	

						chartDistance.addPoint(p.getDistance(), "Distances", Integer.toString(p.getId()));

						drawArea.removePersonUi(p.getUi());					
					}
				}
				Iterator<Person> it3 = personnes.iterator();
				while(it3.hasNext())
				{
					p2 = it3.next();
					if(personToRemove.contains(p2)){
						it3.remove();
					}
				}
				personToRemove.clear();
				resolveConflicts(clonePersonnes);

				for(int i = 0; i < clonePersonnes.size(); i++)
				{
					personnes.get(i).update(clonePersonnes.get(i));
				}
				if(personnes.isEmpty())
				{
					// en 1 iteration, l'indivitdu se deplace de 0.4m a 1m/s
					// il s'ecoule donc 0.4 seconde par iteration 
					System.out.println("Temps d'evacuation:" +nbIterations * temps + " s");
					chartExit.addPoint(nbIterations * temps, "Dates de sortie", Integer.toString(grid.getNbExit()));
					stopSimulation();
				}
				drawArea.updateItems();
				nbIterations++;
			}
		} );
		timer.setInitialDelay(1000);
	}