Implemented generation of room rewards

This commit is contained in:
Max 2025-02-20 15:21:10 +01:00
parent 807656b112
commit 57f6ee51e1
8 changed files with 75 additions and 8 deletions

View file

@ -13,10 +13,15 @@ class Program
var generator = new DungeonGenerator(); var generator = new DungeonGenerator();
// Call the method you want to run // Call the method you want to run
int width = 100; int width = 40;
int height = 50; int height = 28;
DungeonMap map = generator.GenerateDungeon(width, height, 5); DungeonMap map = generator.GenerateDungeon(width, height, 5);
DungeonLockPopulator.PopulateLocksOfDungeon(map); DungeonLockPopulator.PopulateLocksOfDungeon(map);
List<Room> potentialLootRooms = new List<Room>();
potentialLootRooms.AddRange(map.GetNormalRooms());
potentialLootRooms.AddRange(map.GetMonsterRooms());
potentialLootRooms.Add(map.GetBossRoom());
DungeonLootPopulator.GenerateLootInRooms(potentialLootRooms);
DungeonMapSerializer.SerializeToFile(map, SAVED_DUNGEONS_PATH, $"{DUNGEON_NAME} {width}x{height}" ); DungeonMapSerializer.SerializeToFile(map, SAVED_DUNGEONS_PATH, $"{DUNGEON_NAME} {width}x{height}" );
// Print the map to the console (assuming it returns a string or something printable) // Print the map to the console (assuming it returns a string or something printable)

View file

@ -14,8 +14,8 @@ namespace DungeonMapGenerator
private const int WIDTH_OF_BOSS = 10; private const int WIDTH_OF_BOSS = 10;
private const int HEIGHT_OF_BOSS = 6; private const int HEIGHT_OF_BOSS = 6;
private int _xLength = 40; private int _xLength;
private int _yLength = 28; private int _yLength;
public DungeonMap GenerateDungeon(int xlength, int yLength, int numberOfMonsterRooms) public DungeonMap GenerateDungeon(int xlength, int yLength, int numberOfMonsterRooms)
{ {
@ -25,7 +25,7 @@ namespace DungeonMapGenerator
Random random = new Random(); Random random = new Random();
DungeonMap dungeonMap = new DungeonMap(_xLength, _yLength); DungeonMap dungeonMap = new DungeonMap(_xLength, _yLength);
dungeonMap.AddRooms(GenerateEntranceRooms(_xLength, _yLength, random.Next(1,4))); dungeonMap.AddRooms(GenerateEntranceRooms(_xLength, _yLength, random.Next(1,3)));
dungeonMap.AddRoom(GenerateOnlyBossRoom(_xLength, _yLength, WIDTH_OF_BOSS, HEIGHT_OF_BOSS)); dungeonMap.AddRoom(GenerateOnlyBossRoom(_xLength, _yLength, WIDTH_OF_BOSS, HEIGHT_OF_BOSS));
EvenDisperser disperser = new EvenDisperser(_xLength, _yLength, dungeonMap.GetUnoccupiedPoints()); //TODO calculate L and W from length EvenDisperser disperser = new EvenDisperser(_xLength, _yLength, dungeonMap.GetUnoccupiedPoints()); //TODO calculate L and W from length

View file

@ -0,0 +1,50 @@
using System.Collections.Generic;
using System.Linq;
namespace DungeonMapGenerator
{
public static class DungeonLootPopulator
{
private const int MONSTER_ROOM_DIAMONDS = 2;
private const int BOSS_ROOM_DIAMONDS = 6;
private const int BOSS_ROOM_DAMAGE = 2;
public static void GenerateLootInRooms(List<Room> rooms)
{
foreach (Room room in rooms)
{
switch (room.TypeOfRoom)
{
case RoomType.Normal:
if (Lock.HardLocks.Any(l => l.GetLock() == room.Lock.GetLock()))
{
room.AddLoot(LootType.Chest);
}
else if (Lock.VeryHardLocks.Any(l => l.GetLock() == room.Lock.GetLock()))
{
room.AddLoot(LootType.Diamond);
}
break;
case RoomType.Monster:
for (int i = 0; i < MONSTER_ROOM_DIAMONDS; i++)
{
room.AddLoot(LootType.Diamond);
}
break;
case RoomType.Boss:
for (int i = 0; i < BOSS_ROOM_DIAMONDS; i++)
{
room.AddLoot(LootType.Diamond);
}
for (int i = 0; i < BOSS_ROOM_DAMAGE; i++)
{
room.AddLoot(LootType.Diamond);
}
break;
}
}
}
}
}

View file

@ -22,6 +22,13 @@ namespace DungeonMapGenerator
Boss Boss
} }
public enum LootType
{
Diamond,
Chest,
Damage
}
public class Room public class Room
{ {
private static int _nextId = 1; private static int _nextId = 1;
@ -32,7 +39,8 @@ namespace DungeonMapGenerator
public int Width { get; set; } public int Width { get; set; }
public Point PositionOfTopLeft { get; set; } public Point PositionOfTopLeft { get; set; }
public int Id { get; set; } public int Id { get; set; }
[JsonProperty("Loot")]
private List<LootType> _loot = new List<LootType>();
[JsonProperty("AdjacentRoomIds")] [JsonProperty("AdjacentRoomIds")]
private HashSet<int> _adjacentRoomIds = new HashSet<int>(); private HashSet<int> _adjacentRoomIds = new HashSet<int>();
private HashSet<Room> _adjacentRooms = new HashSet<Room>(); private HashSet<Room> _adjacentRooms = new HashSet<Room>();
@ -58,6 +66,10 @@ namespace DungeonMapGenerator
_adjacentRoomIds.Add(room.Id); _adjacentRoomIds.Add(room.Id);
} }
public void AddLoot(LootType loot)
{
_loot.Add(loot);
}
public HashSet<int> GetAdjacentRoomIds() public HashSet<int> GetAdjacentRoomIds()
{ {