private int CompareHeight(MapCoordonates a, MapCoordonates b)
 {
     return(b.Y - a.Y);
 }
    private void FindCaves()
    {
        if (map != null)
        {
            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    if (map[i, j] == 0 && CheckIfInList(i, j, coordonatesAlreadyChecked) == false)
                    {
                        List <MapCoordonates> currentCaveAreaList    = new List <MapCoordonates>();
                        List <MapCoordonates> coordonatesToCheckList = new List <MapCoordonates>();
                        MapCoordonates        coord = new MapCoordonates(i, j);
                        coord.Origin = new MapCoordonates(0, 0);
                        coordonatesToCheckList.Add(coord);
                        while (coordonatesToCheckList.Count > 0)
                        {
                            MapCoordonates testCoord = coordonatesToCheckList[0];
                            //Test au dessus
                            if (map[testCoord.X, testCoord.Y - 1] == 0 && CheckIfInList(testCoord.X, testCoord.Y - 1, currentCaveAreaList) == false && CheckIfInList(testCoord.X, testCoord.Y - 1, coordonatesToCheckList) == false)
                            {
                                MapCoordonates newCoord = new MapCoordonates(testCoord.X, testCoord.Y - 1);
                                newCoord.Origin = testCoord;
                                coordonatesToCheckList.Add(newCoord);
                            }
                            //Test à droite
                            if (map[testCoord.X + 1, testCoord.Y] == 0 && CheckIfInList(testCoord.X + 1, testCoord.Y, currentCaveAreaList) == false && CheckIfInList(testCoord.X + 1, testCoord.Y, coordonatesToCheckList) == false)
                            {
                                MapCoordonates newCoord = new MapCoordonates(testCoord.X + 1, testCoord.Y);
                                newCoord.Origin = testCoord;
                                coordonatesToCheckList.Add(newCoord);
                            }
                            //Test en bas
                            if (map[testCoord.X, testCoord.Y + 1] == 0 && CheckIfInList(testCoord.X, testCoord.Y + 1, currentCaveAreaList) == false && CheckIfInList(testCoord.X, testCoord.Y + 1, coordonatesToCheckList) == false)
                            {
                                MapCoordonates newCoord = new MapCoordonates(testCoord.X, testCoord.Y + 1);
                                newCoord.Origin = testCoord;
                                coordonatesToCheckList.Add(newCoord);
                            }
                            //Test à gauche
                            if (map[testCoord.X - 1, testCoord.Y] == 0 && CheckIfInList(testCoord.X - 1, testCoord.Y, currentCaveAreaList) == false && CheckIfInList(testCoord.X - 1, testCoord.Y, coordonatesToCheckList) == false)
                            {
                                MapCoordonates newCoord = new MapCoordonates(testCoord.X - 1, testCoord.Y);
                                newCoord.Origin = testCoord;
                                coordonatesToCheckList.Add(newCoord);
                            }
                            coordonatesToCheckList.Remove(testCoord);
                            currentCaveAreaList.Add(testCoord);
                            coordonatesAlreadyChecked.Add(testCoord);
                        }
                        print(currentCaveAreaList.Count);

                        Cave cave = new Cave(this, currentCaveAreaList);

                        cavesList.Add(cave);
                    }
                }
            }
        }

        print(cavesList.Count);
    }