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"); }