public static void GenerateRules(MonoRandom rng) { if (_rng != null && _rng.Seed == rng.Seed) { return; } _rng = rng; Mazes.Clear(); for (int i = 0; i < 10; i++) { var maze = new Maze(); Mazes.Add(maze); maze.BuildMaze(rng); } }
public static void GenerateRules(MonoRandom rng) { if (_rng != null && _rng.Seed == rng.Seed) { return; } _rng = rng; Mazes.Clear(); for (var i = 0; i < 18; i++) { var maze = new Maze(); Mazes.Add(maze); maze.BuildMaze(rng); } var words = new List <string>(PossibleWords); words.AddRange(ExtendedWords); // Choose 8 base words var numBaseWords = 18; var chosenWords = words.OrderBy(x => rng.NextDouble()).Take(numBaseWords).ToList(); Debug.LogFormat("[Morse Code Rule Seed Generator] + Base words: {0}", string.Join(", ", chosenWords.ToArray())); // Find other words that are similar to these (low cycling Levenshtein distance) for (var i = 0; i < numBaseWords && chosenWords.Count < 36; i++) { var prefix = chosenWords[i].Substring(1); var toAdd = words .Where(w => !chosenWords.Contains(w) && !w.EndsWith(prefix)) .Select(w => (new { word = w, pref = rng.NextDouble(), dist = Similarity(w, chosenWords[i]) })) .ToList(); toAdd.Sort((a, b) => { var r = a.dist - b.dist; return(r == 0 ? Math.Sign(a.pref - b.pref) : r); }); var howmany = Math.Min(Math.Min(rng.Next(1, 4), 36 - chosenWords.Count), toAdd.Count); Debug.LogFormat(@"[Password rule seed] From {0}, adding words: {1}", chosenWords[i], string.Join(", ", toAdd.Take(howmany).Select(w => string.Format("{0}/{1}/{2}", w.word, w.dist, w.pref)).ToArray())); chosenWords.AddRange(toAdd.Take(howmany).Select(inf => inf.word)); } Words.Clear(); Words.AddRange(chosenWords.Take(36).OrderBy(x => rng.NextDouble())); }
public override void CreateRules() { if (!Initialized) { throw new Exception("You must initialize the Random number generator first"); } Mazes.Clear(); switch (Seed) { case 1: for (var i = 0; i < 9; i++) { var maze = new Maze(); Mazes.Add(maze); maze.BuildMaze(NextMinMax); } InitializeRNG(2); Seed = 1; var list = new List <Maze>(); for (var i = 0; i < 9; i++) { var maze = new Maze(); list.Add(maze); maze.BuildMaze(NextMinMax); } Mazes.Add(list[2]); Mazes.Add(list[3]); Mazes.Add(list[8]); Mazes.Add(list[6]); Mazes.Add(list[1]); Mazes.Add(list[0]); Mazes.Add(list[4]); Mazes.Add(list[5]); Mazes.Add(list[7]); break; case 2: for (var i = 0; i < 9; i++) { new Maze().BuildMaze(NextMinMax); //Burn the first 9 mazes out of seed 2. Seed 1 ruleset already used them. } for (var i = 0; i < 18; i++) { var maze = new Maze(); Mazes.Add(maze); maze.BuildMaze(NextMinMax); } break; default: for (var i = 0; i < 18; i++) { var maze = new Maze(); Mazes.Add(maze); maze.BuildMaze(NextMinMax); } break; } RulesGenerated = true; }