public List <CheminMathias> Chemin(int debutX, int debutY, int finX, int finY) { //Debug.Log(finX); //Debug.Log(finY); CheminMathias caseDebut = grille.GetGridObject(debutX, debutY); CheminMathias caseFin = grille.GetGridObject(finX, finY); listeOuverte = new List <CheminMathias>() { caseDebut }; listeFermee = new List <CheminMathias>(); for (int x = 0; x < grille.GetLargueur(); x++) { for (int y = 0; y < grille.GetHauteur(); y++) { CheminMathias pathNode = grille.GetGridObject(x, y); pathNode.g = int.MaxValue; pathNode.CalculerF(); pathNode.casePrecedente = null; } } caseDebut.g = 0; caseDebut.h = CalculerH(caseDebut, caseFin); caseDebut.CalculerF(); while (listeOuverte.Count > 0) { CheminMathias caseActuelle = FPlusBas(listeOuverte); if (caseActuelle == caseFin) { return(CalculerChemin(caseFin)); } listeOuverte.Remove(caseActuelle); listeFermee.Add(caseActuelle); foreach (CheminMathias caseVoisine in GetListeVoisins(caseActuelle)) { if (listeFermee.Contains(caseVoisine)) { continue; } //Debug.Log(caseVoisine); int gTemp = caseActuelle.g + CalculerH(caseActuelle, caseVoisine); if (gTemp < caseVoisine.g) { caseVoisine.casePrecedente = caseActuelle; caseVoisine.g = gTemp; caseVoisine.h = CalculerH(caseVoisine, caseFin); caseVoisine.CalculerF(); if (!listeOuverte.Contains(caseVoisine)) { listeOuverte.Add(caseVoisine); } } } } return(null); }