Exemple #1
0
        public RoomType GetRandomSafeRoomType(IRandomGenerator random)
        {
            IRoomFactory rf = new RoomFactory();

            RoomType[]      roomTypes = (RoomType[])Enum.GetValues(typeof(RoomType));
            List <RoomType> safeTypes = new List <RoomType>();

            foreach (var type in roomTypes)
            {
                var room = rf.Create(type);
                if (room.BehaviourThreshold == 1)
                {
                    safeTypes.Add(type);
                }
            }

            return(safeTypes[random.Generate(0, safeTypes.Count)]);
        }
Exemple #2
0
        public (IRoom[], int, int) GenerateMaze(IRandomGenerator random, int gridsize)
        {
            IRoom[]      rooms = new IRoom[gridsize * gridsize];
            IRoomFactory rf    = new RoomFactory();

            var(startIndex, endIndex) = GetStartAndEndIndexes(random, gridsize);
            rooms[startIndex]         = rf.Create(GetRandomSafeRoomType(random));
            rooms[endIndex]           = rf.Create(GetRandomSafeRoomType(random));

            // List of all roomtypes.
            RoomType[] roomTypes = (RoomType[])Enum.GetValues(typeof(RoomType));

            for (int i = 0; i < rooms.Length; i++)
            {
                if (i == startIndex || i == endIndex)
                {
                    continue;
                }
                rooms[i] = rf.Create(roomTypes[random.Generate(0, roomTypes.Length)]); // Place a room of random type on each index.
            }

            return(rooms, startIndex, endIndex);
        }