private static Tile[,] GenerateTiles(int width, int height, IList <Chamber> chambers, IList <Corridor> corridors) { Tile[,] tiles = new Tile[width, height]; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { tiles[x, y] = new Tile(Tile.Type.Wall, true); } } const int CORRIDOR_WIDTH = 3; foreach (Corridor c in corridors) { for (int i = 0; i < c.intermediatePoints.Count - 1; ++i) { Point2i src = c.intermediatePoints[i]; Point2i dst = c.intermediatePoints[i + 1]; Point2i pointer = src; Point2i delta = pointer.DeltaTowards(dst); Assert.IsTrue((delta.x == 0) || (delta.y == 0)); while (pointer != c.intermediatePoints[i + 1]) { PlaceCorridor(tiles, pointer, CORRIDOR_WIDTH); pointer += delta; } PlaceCorridor(tiles, pointer, CORRIDOR_WIDTH); } } List <Point2i> chamberTiles = new List <Point2i>(); foreach (Chamber c in chambers) { for (int y = c.bottom; y < c.top; ++y) { for (int x = c.left; x < c.right; ++x) { tiles[x, y] = new Tile(Tile.Type.Chamber, false); chamberTiles.Add(new Point2i(x, y)); } } } return(tiles); }