public void TestBracketShorthandThrowsOnNullKey()
        {
            IWeightedRandomizer <ExampleClass> newTarget = CreateTarget <ExampleClass>();

            Assert.Throws <ArgumentNullException>(() => newTarget[null] = 1);
            Assert.Throws <ArgumentNullException>(() => { int a = newTarget[null]; });
        }
        public void TestAddThrowsOnNullKey()
        {
            IWeightedRandomizer <ExampleClass> newTarget = CreateTarget <ExampleClass>();

            Assert.Throws <ArgumentNullException>(() => newTarget.Add(null, 2));
            Assert.Throws <ArgumentNullException>(() => newTarget.Add(null));
        }
Пример #3
0
    private void ConfigureRandom()
    {
        if (dungeonSeed == 0)
        {
            dungeonSeed = new System.Random().Next(int.MinValue, int.MaxValue);
        }
        random = new System.Random(dungeonSeed);

        floors     = new DynamicWeightedRandomizer <DungeonTile>(dungeonSeed);
        ceilings   = new DynamicWeightedRandomizer <DungeonTile>(dungeonSeed);
        walls      = new DynamicWeightedRandomizer <DungeonTile>(dungeonSeed);
        doorways   = new DynamicWeightedRandomizer <DungeonTile>(dungeonSeed);
        zoners     = new DynamicWeightedRandomizer <DungeonZoner>(dungeonSeed);
        enemies    = new DynamicWeightedRandomizer <EntityEnemy>(dungeonSeed);
        components = new DynamicWeightedRandomizer <DungeonTile>(dungeonSeed);
        connectors = new DynamicWeightedRandomizer <DungeonTile>(dungeonSeed);

        foreach (DungeonTile floor in dungeon.floors)
        {
            floors[floor] = floor.weight;
        }
        foreach (DungeonTile ceiling in dungeon.ceilings)
        {
            ceilings[ceiling] = ceiling.weight;
        }
        foreach (DungeonTile wall in dungeon.walls)
        {
            walls[wall] = wall.weight;
        }
        foreach (DungeonTile doorway in dungeon.doorways)
        {
            doorways[doorway] = doorway.weight;
        }
        foreach (DungeonZoner zoner in dungeon.zoners)
        {
            zoners[zoner] = zoner.weight;
        }
        foreach (EntityEnemy enemy in dungeon.enemies)
        {
            enemies[enemy] = enemy.weight;
        }
        foreach (DungeonTile component in dungeon.components)
        {
            components[component] = component.weight;
        }
        foreach (DungeonTile connector in dungeon.connectors)
        {
            connectors[connector] = connector.weight;
        }
    }
Пример #4
0
        private static T GetSatisfiedRestriction <T>(IWeightedRandomizer <T> randomizer, T next, string gender,
                                                     string race, int count = 0) where T : RestrictedValue
        {
            if (string.IsNullOrWhiteSpace(gender) && string.IsNullOrWhiteSpace(race))
            {
                return(next);
            }

            if (count < GiveUp)
            {
                var inOrEmptyGender = InOrEmpty(next.RestrictedToGender, gender);
                var inOrEmptyRace   = InOrEmpty(next.RestrictedToRace, race);
                if (!inOrEmptyGender || !inOrEmptyRace)
                {
                    next = randomizer.NextWithReplacement();
                    return(GetSatisfiedRestriction(randomizer, next, gender, race, ++count));
                }
            }

            return(next);
        }
Пример #5
0
        static void Main(string[] args)
        {
            Keyboard.GetState();            //IT JUST WERKS NOW?? PLS FIX :D (OnRootConsoleUpdate)
            string fontFileName = "terminal8x8.png";

            //Initialize RNG
            int seed = (int)DateTime.UtcNow.Ticks;

            WeightedRandom = new StaticWeightedRandomizer <IWRandomizable>(seed);
            Random         = new DotNetRandom(seed);
            string consoleTitle = $"RLGame Seed {seed}";             //Show the seed

            _rootConsole = new RLRootConsole(fontFileName, SCREENWIDTH, SCREENHEIGHT, 8, 8, 1f, consoleTitle);

            GameStack = new Stack <IGameState>();
            MainScreen main = new MainScreen(false, true, _rootConsole);

            main.Init();
            GameStack.Push(main);

            _rootConsole.Update += OnRootConsoleUpdate;
            _rootConsole.Render += OnRootConsoleRender;
            _rootConsole.Run();
        }
        private static void TestSpeed(IWeightedRandomizer <int> randomizer, bool displayText)
        {
            GCLatencyMode oldLatencyMode = GCSettings.LatencyMode;

            try
            {
                //Prevent garbage collection during tests
                GCSettings.LatencyMode = GCLatencyMode.LowLatency;

                const int numIterations = 10000;
                Stopwatch timer         = new Stopwatch();
                if (displayText)
                {
                    Console.WriteLine("Testing {0}", randomizer.GetType().Name);
                    Console.WriteLine("--------------------------------");
                }

                //NextWithReplacement()/1000
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                }
                for (int i = 1; i <= numIterations / 1000; i++)
                {
                    randomizer.NextWithReplacement();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("Add()x{0} + NextWithReplacement()x{1}: {2} ms", numIterations, numIterations / 1000,
                                      timer.ElapsedMilliseconds);
                }

                //NextWithReplacement()
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                }
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.NextWithReplacement();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("Add()x{0} + NextWithReplacement()x{1}: {2} ms", numIterations, numIterations,
                                      timer.ElapsedMilliseconds);
                }

                //NextWithReplacement() * 10
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                }
                for (int i = 1; i <= 10 * numIterations; i++)
                {
                    randomizer.NextWithReplacement();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("Add()x{0} + NextWithReplacement()x{1}: {2} ms", numIterations, 10 * numIterations,
                                      timer.ElapsedMilliseconds);
                }

                //NextWithReplacement() (interleaved)
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                    randomizer.NextWithReplacement();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("( Add() + NextWithReplacement() )x{0} (interleaved): {1} ms", numIterations,
                                      timer.ElapsedMilliseconds);
                }

                //NextWithRemoval()
                randomizer.Clear();
                timer.Reset();
                timer.Start();
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.Add(i, i);
                }
                for (int i = 1; i <= numIterations; i++)
                {
                    randomizer.NextWithRemoval();
                }
                timer.Stop();
                GC.Collect();
                if (displayText)
                {
                    Console.WriteLine("Add()x{0} + NextWithRemoval()x{1}: {2} ms", numIterations, numIterations,
                                      timer.ElapsedMilliseconds);

                    Console.WriteLine();
                    Console.WriteLine();
                }
            } //end try
            finally
            {
                // ALWAYS set the latency mode back
                GCSettings.LatencyMode = oldLatencyMode;
            }
        }
Пример #7
0
        private void Initialize()
        {
            _firstNameRandomizer  = new StaticWeightedRandomizer <FirstName>();
            _lastNameRandomizer   = new StaticWeightedRandomizer <LastName>();
            _ageRandomizer        = new StaticWeightedRandomizer <Age>();
            _raceRandomizer       = new StaticWeightedRandomizer <Race>();
            _genderRandomizer     = new StaticWeightedRandomizer <Gender>();
            _physTraitRandomizer  = new StaticWeightedRandomizer <PhysicalTrait>();
            _persTraitRandomizer  = new StaticWeightedRandomizer <PersonalityTrait>();
            _wantsRandomizer      = new StaticWeightedRandomizer <Want>();
            _secretsRandomizer    = new StaticWeightedRandomizer <Secret>();
            _hooksRandomizer      = new StaticWeightedRandomizer <Hook>();
            _bondsRandomizer      = new StaticWeightedRandomizer <Bond>();
            _itemRandomizer       = new StaticWeightedRandomizer <Item>();
            _alignmentRandomizer  = new StaticWeightedRandomizer <Alignment>();
            _occupationRandomizer = new StaticWeightedRandomizer <Occupation>();

            foreach (var fn in _values.FirstNames)
            {
                _firstNameRandomizer.Add(fn, fn.Weight);
            }

            foreach (var ln in _values.LastNames)
            {
                _lastNameRandomizer.Add(ln, ln.Weight);
            }

            foreach (var a in _values.Ages)
            {
                _ageRandomizer.Add(a, a.Weight);
            }

            foreach (var r in _values.Races)
            {
                _raceRandomizer.Add(r, r.Weight);
            }

            foreach (var g in _values.Genders)
            {
                _genderRandomizer.Add(g, g.Weight);
            }

            foreach (var phys in _values.PhysicalTraits)
            {
                _physTraitRandomizer.Add(phys, phys.Weight);
            }

            foreach (var pers in _values.PersonalityTraits)
            {
                _persTraitRandomizer.Add(pers, pers.Weight);
            }

            foreach (var w in _values.Wants)
            {
                _wantsRandomizer.Add(w, w.Weight);
            }

            foreach (var s in _values.Secrets)
            {
                _secretsRandomizer.Add(s, s.Weight);
            }

            foreach (var h in _values.Hooks)
            {
                _hooksRandomizer.Add(h, h.Weight);
            }

            foreach (var b in _values.Bonds)
            {
                _bondsRandomizer.Add(b, b.Weight);
            }

            foreach (var i in _values.Items)
            {
                _itemRandomizer.Add(i, i.Weight);
            }

            foreach (var a in _values.Alignments)
            {
                _alignmentRandomizer.Add(a, a.Weight);
            }

            foreach (var o in _values.Occupations)
            {
                _occupationRandomizer.Add(o, o.Weight);
            }
        }
 public void Setup()
 {
     Target = CreateTarget <int>();
 }