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); }
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)); } }
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(); }