public ArrayList<Position> getDirection(Animal animal, Position pObjectif, int nbPas, boolean acote)
	{
		ArrayList<Position> direction = new ArrayList<Position>();
		Position pDepart = animal.getPos();
		Hashtable<Position, Noeud> listeOuverte = new Hashtable<Position, Noeud>();
		Hashtable<Position, Noeud> listeFermee = new Hashtable<Position, Noeud>();
		Noeud nCourant = new Noeud();
		ArrayList<Position> chemin = null;
		
		if (pDepart.getX() == pObjectif.getX() && pDepart.getY() == pObjectif.getY())
		{
			return direction;
		}
		else
		{
		    /* d�roulement de l'algo A* */
		 
		    /* initialisation du noeud courant */
			Position pCourant = pDepart;
			
			/* ajout de courant dans la liste ouverte */
			listeOuverte.put(pCourant, nCourant);
		 
		    /* tant que la destination n'a pas ete atteinte et qu'il reste des noeuds a explorer dans la liste ouverte */
		    do
		    {   
		        /* on le passe dans la liste fermee, il ne peut pas deja y etre */
		        ajouterListeFermee(listeOuverte, listeFermee, pCourant);
		        
		        /* on recommence la recherche des noeuds adjacents */
		        etudierCasesAdjacentes(pCourant, pObjectif, listeOuverte, listeFermee);
		        
		        /* on cherche le meilleur noeud de la liste ouverte (elle n'est pas vide donc il existe) */
		        pCourant = meilleurNoeud(listeOuverte);
		    }
		    while ((pCourant.getX() != pObjectif.getX() || pCourant.getY() != pObjectif.getY()));
		    
		    if (acote)
		    {
		    	chemin = retrouverChemin(listeFermee, pDepart, listeOuverte.get(pCourant).getParent());
		    }
		    else
		    {
		        ajouterListeFermee(listeOuverte, listeFermee, pCourant);
		        chemin = retrouverChemin(listeFermee, pDepart, pObjectif);
		    }
		    
        	for (int i = 1; i <= nbPas && i < chemin.size(); i++)
        	{
		        direction.add(chemin.get(i));
        	}
		    return direction;
		}
	}