Example #1
0
        public TomeOfChaos Tome_FromNew(string topSeed)
        {
            var tome = new TomeOfChaos(topSeed);
            AbstractGenerator topRNG;
            AbstractGenerator mapRNG;

            // Any time the sequence of .Next() calls to an RNG changes,
            // the same seed will no longer produce the same world.
            tome.Generators["Top"]       = topRNG = new NR3Generator(tome.TopSeedInt);
            tome.Generators["MapTop"]    = mapRNG = new NR3Generator(topRNG.Next());
            tome.Generators["Learnable"] = new NR3Generator(topRNG.Next());

            tome.MapGenerators[MapEnum.TackerFarm]    = new NR3Generator(mapRNG.Next());
            tome.MapGenerators[MapEnum.TownBarricade] = new NR3Generator(mapRNG.Next());

            return(tome);
        }
Example #2
0
        public void Serializing_NR3Generator_keeps_sequence()
        {
            var r1 = new NR3Generator();

            for (var i = 0; i < 10; i++)
            {
                int toss = r1.Next();
            }

            byte[] ser_r1 = ObjectToByteArray(r1);
            string b64_r1 = Convert.ToBase64String(ser_r1);


            var serializer = new Serializer();
            //var writer = new StringWriter();
            //writer.Write(b64_r1);

            var save = new game_save {
                Generator = b64_r1
            };
            var yaml_r1 = serializer.Serialize(save);


            var reader       = new StringReader(yaml_r1);
            var deserializer = new DeserializerBuilder()
                               .WithNamingConvention(PascalCaseNamingConvention.Instance)
                               .Build();

            var save_2 = deserializer.Deserialize <game_save>(yaml_r1);


            byte[] ser_r2 = Convert.FromBase64String(save_2.Generator);
            var    r2     = (NR3Generator)ByteArrayToObject(ser_r2);

            for (var j = 0; j < 100; j++)
            {
                int r1_out = r1.Next();
                int r2_out = r2.Next();

                Assert.That(r1_out, Is.EqualTo(r2_out));
            }
        }
Example #3
0
        public static void Main()
        {
            // 1) Use TRandom to generate a few random numbers - via IGenerator methods.
            Console.WriteLine("TRandom in action, used as an IGenerator");
            var trandom = new TRandom();

            Console.WriteLine(trandom.Next() - trandom.Next(5) + trandom.Next(3, 5));
            Console.WriteLine(trandom.NextDouble() * trandom.NextDouble(5.5) * trandom.NextDouble(10.1, 21.9));
            Console.WriteLine(trandom.NextBoolean());

            Console.WriteLine();

            // 2) Use TRandom to generate a few random numbers - via extension methods.
            Console.WriteLine("TRandom in action, used as an IGenerator augmented with extension methods");
            Console.WriteLine(string.Join(", ", trandom.Integers().Take(10)));
            Console.WriteLine(string.Join(", ", trandom.Doubles().Take(10)));
            Console.WriteLine(string.Join(", ", trandom.Booleans().Take(10)));

            Console.WriteLine();

            // 3) Use TRandom to generate a few distributed numbers.
            Console.WriteLine("TRandom in action, used as to get distributed numbers");
            Console.WriteLine(trandom.Normal(1.0, 0.1));
            Console.WriteLine(string.Join(", ", trandom.NormalSamples(1.0, 0.1).Take(20)));
            Console.WriteLine(trandom.Poisson(5));
            Console.WriteLine(string.Join(", ", trandom.PoissonSamples(5).Take(20)));

            Console.WriteLine();

            // 4) There are many generators available - XorShift128 is the default.
            var alf = new ALFGenerator(TMath.Seed());
            var nr3 = new NR3Generator();
            var std = new StandardGenerator(127);

            // 5) You can also use distribution directly, even with custom generators.
            Console.WriteLine("Showcase of some distributions");
            Console.WriteLine("Static sample for Normal: " + NormalDistribution.Sample(alf, 1.0, 0.1));
            Console.WriteLine("New instance for Normal: " + new NormalDistribution(1.0, 0.1).NextDouble());

            Console.WriteLine();
        }