private void MapRooms(int MinSize)
        {
            StopWatchStart();
            int ID = 21;

            //storing all tiles and indexes of the room
            for (int i = 1; i < Height - 1; i++)
            {
                for (int j = 1; j < Width - 1; j++)
                {
                    if (Grid[i][j] == 1)
                    {
                        List <int[]> FloorTiles  = FloodFill(ID, j, i, 1, Grid, false);
                        FloorSet     newFloorSet = new FloorSet(FloodFill(ID, j, i, 1, Grid, false), ID);
                        //FloodFill(ID, j, i, 1, Grid, false);
                        IndividualRooms.Add(ID, newFloorSet);

                        if (FloorTiles.Count() < MinSize)
                        {
                            //Console.WriteLine(FloorTiles.Count());
                            foreach (var f in FloorTiles)
                            {
                                Grid[f[1]][f[0]] = 0;
                                IndividualRooms.Remove(ID);
                            }
                            //PrintAsCharArray();
                            //Console.ReadKey();
                        }
                    }
                    ID++;
                }
            }
            StopWatchStop("MapRooms");
        }
        public void ConectRoomTightSquares()
        {
            StopWatchStart();
            Dictionary <int, FloorSet> IndividualRooms = new Dictionary <int, FloorSet>();

            MapRooms(IndividualRooms);
            MapBorders(IndividualRooms, Grid, WALL);
            Dictionary <int, int>            ConectedRooms       = new Dictionary <int, int>();
            Dictionary <int, List <string> > PossibleConnections = new Dictionary <int, List <string> >();

            /* 0. create distionyry of conected rooms, and distionary of posible conections
             * 1. randomly select room - add to diactionary
             * 2.get neughbourts - add to dictionary
             * 3 select one neighbort and one border tile
             * 4. replace with door tile and continue untill all tiles are conected*/

            //Select fors room and add to dictionary
            FloorSet FirtRoom = IndividualRooms.Values.ElementAt(random.Next(0, IndividualRooms.Count()));

            ConectedRooms.Add(FirtRoom.getID(), 1);
            PossibleConnections = FirtRoom.getBorders();

            while (ConectedRooms.Count != IndividualRooms.Count)
            {
                int   IDOfTheNextRoom            = PossibleConnections.Keys.ElementAt(random.Next(PossibleConnections.Count));
                int[] CoordinatesOfTheBorderTile = ParseMap(PossibleConnections[IDOfTheNextRoom].ElementAt(random.Next(PossibleConnections[IDOfTheNextRoom].Count)));
                Grid[CoordinatesOfTheBorderTile[1]][CoordinatesOfTheBorderTile[0]] = DOOR;

                ConectedRooms.Add(IDOfTheNextRoom, 1);
                Dictionary <int, List <string> > ToMerge = IndividualRooms[IDOfTheNextRoom].getBorders();

                //Merging Posible Conections
                foreach (var i in ToMerge)
                {
                    if (!ConectedRooms.ContainsKey(i.Key) && PossibleConnections.ContainsKey(i.Key))
                    {
                        List <string> Merge = i.Value;
                        foreach (var j in Merge)
                        {
                            if (!PossibleConnections[i.Key].Contains(j))
                            {
                                PossibleConnections[i.Key].Add(j);
                            }
                        }
                    }
                    else if (!ConectedRooms.ContainsKey(i.Key))
                    {
                        PossibleConnections.Add(i.Key, i.Value);
                    }
                }

                PossibleConnections.Remove(IDOfTheNextRoom);
            }
            StopWatchStop("ConectRoomTightSquares");
        }
        private void MapRooms(Dictionary <int, FloorSet> IndividualRooms)
        {
            StopWatchStart();
            int ID = 21;

            //storing all tiles and indexes of the room
            for (int i = 1; i < Height - 1; i++)
            {
                for (int j = 1; j < Width - 1; j++)
                {
                    if (Grid[i][j] == 1)
                    {
                        FloorSet newFloorSet = new FloorSet(FloodFill(ID, j, i, 1, Grid, false), ID);
                        //FloodFill(ID, j, i, 1, Grid, false);
                        IndividualRooms.Add(ID, newFloorSet);
                        ID++;
                    }
                }
            }
            StopWatchStop("MapRooms");
        }