public Counter(LevelConfiguration lc) { Log = new Log(lc); foreach (var k in Keys) { Counts[k] = 0; } }
public Log(LevelConfiguration lc) { LevelConfiguration = lc; var logdir = "../../../logs"; if (!System.IO.Directory.Exists(logdir)) { System.IO.Directory.CreateDirectory(logdir); } LogName = $"{logdir}/{lc.GetStr()}.log"; //WL($"Log created at: {LogName}"); }
//w/h are the "real" version public Level(LevelConfiguration lc, int width, int height, Random rnd, int index) { LevelConfiguration = lc; TweakPicker = lc.TweakPicker; Index = index; Rnd = rnd; Width = width + 2; Height = height + 2; Segs = new LinkedList <Seg>(); Hits = new HitManager(Width, Height, false, this); InitBoard(); }
static void CreateLevel(LevelGenerationConfig config) { var levelstem = $"../../../output/{config.x}x{config.y}"; var csvpath = levelstem + "/results.csv"; var csv = new CsvWriter(csvpath); if (!System.IO.Directory.Exists(levelstem)) { System.IO.Directory.CreateDirectory($"{levelstem}"); } var runcount = 0; //var ws = new InitialWanderSetup(steplimit:2, startPoint:(1,1), gomax:true); var ws = new InitialWanderSetup(); foreach (var tweakPicker in TweakPickers.GetPickers(config.tweakPickerName)) { foreach (var el in config.genLimits) { var os = new OptimizationSetup(); os.GlobalTweakLim = el; foreach (var segPicker in SegPickers.GetSegPickers(config.segPickerName)) { runcount++; var lc = new LevelConfiguration(tweakPicker, segPicker, os, ws); var log = new Log(lc); var rnd = new System.Random(config.seed); var level = new Level(lc, config.x, config.y, rnd, config.seed); level.InitialWander(lc); //bit awkward to do it here - it needs a better guarantee of finding the best seg. segPicker.Init(config.seed, level); tweakPicker.Init(config.seed); var st = Stopwatch.StartNew(); var tweakStats = level.RepeatedlyTweak(config.saveTweaks, config.saveEvery.Value, st); var elapsed = st.Elapsed; //before doing any outputting, validate the level. DoDebug(level, show: false, validateBoard: true); AfterLevelGenerated(level, config, levelstem, lc, tweakStats, elapsed, csv, log, runcount); } } } }
public static void AfterLevelGenerated(Level level, LevelGenerationConfig config, string levelstem, LevelConfiguration lc, TweakStats tweakStats, TimeSpan ts, CsvWriter csv, Log log, int runcount) { var repdata = GetReport(level, ts, tweakStats); var rep = Report(repdata, multiline: true); log.Info(Report(repdata, multiline: false)); SaveLevelAsText(level, config.seed); if (config.saveCsv) { csv.Write(repdata); } if (config.saveEmpty) { SaveEmpty(level, $"{levelstem}/{lc.GetStr()}-empty-{config.seed} {runcount}.png", subtitle: rep, quiet: true); } if (config.saveEmptyUpperCorner) { SaveEmpty(level, $"{levelstem}/{lc.GetStr()}-corner-{config.seed} {runcount}.png", subtitle: rep, quiet: true, corner: true); } if (config.saveWithPath) { SaveWithPath(level, $"{levelstem}/{lc.GetStr()}-path-{config.seed} {runcount}.png", subtitle: rep, quiet: true); } if (config.saveArrows) { SaveArrowVersions(level, config.seed, levelstem, config.arrowLengthMin); } }