/// <summary> Builds the rooms of the dungeon. </summary> private void GenerateRooms() { // This is a curve so that more rooms are built as the level increases. int roomCount = (int)Math.Ceiling((8 * Level * Math.Sqrt(Level)) + Engine.rand.Next(5, 9)) / Level; LastRegionID = 0; for (int i = 0; i < roomCount; ++i) { List <int> points = new List <int>(); points.Add((Engine.rand.Next(1, 15) * 2) + 1); // max height of room is 10. std rand limit is 15 but rand is exclusive points.Add((Engine.rand.Next(1, 26) * 2) + 1); // max width of room is 10. std rand limit is 26 but rand is exclusive points.Add(points[0] + ((Engine.rand.Next(2, 4) * 2) + 1)); points.Add(points[1] + ((Engine.rand.Next(2, 4) * 2) + 1)); // Place a room if there's no overlap if (!CheckForRoomOverlap(points)) { LastRegionID++; BuildRoom(points, LastRegionID); RoomPoints.Add(points); } // Otherwise place it 1/5 of the time even if there is an overlap /*else { * if(Engine.rand.NextDouble() < .05 || i == roomCount - 1) { * LastRegionID++; * BuildRoom(points, LastRegionID); * RoomPoints.Add(points); * } * }*/ } }
private void GenerateFinal() { // big room int roomY = Data.GetLength(0) / 4; int roomY2 = 3 * Data.GetLength(0) / 4; int roomX = Data.GetLength(1) / 4; int roomX2 = 3 * Data.GetLength(1) / 4; RoomPoints.Add(new List <int>(new int[] { roomY, roomX, roomY2, roomX2 })); for (int y = roomY; y < roomY2; ++y) { for (int x = roomX; x < roomX2; ++x) { Data[y, x] = new RoomFloor(y, x, 0); } } for (int y = roomY - 1; y < roomY2 + 1; ++y) { for (int x = roomX - 1; x < roomX2 + 1; ++x) { if (Data[y, x] == null) { Data[y, x] = new Wall(y, x); } } } int entryY = roomY2; int entryX = (roomX + roomX2) / 2; Data[entryY, entryX] = new Stair(entryY, entryX, StairType.Up); Data[roomY, (roomX + roomX2) / 2].Inventory.AddItem(new Macguffin()); Program.player.CoordX = entryX; Program.player.CoordY = entryY; }