internal static async Task Main(string[] args) { IGameInputSource gameInputSource = null; Parser.Default.ParseArguments <CommandLineOptions>(args) .WithParsed( (options) => { if (options.InputFile != null) { gameInputSource = new FileGameInputSource(options.InputFile, CellParser); } else { gameInputSource = new ConsoleGameInputSource(CellParser); } }) .WithNotParsed(errors => Environment.Exit(0)); try { var liveCells = await gameInputSource.GetInitialGameState(); if (liveCells.Count == 0) { System.Console.WriteLine("No input found! Exiting simulation."); PauseBeforeExit(); } var generation = 1; while (true) { System.Console.WriteLine($"Generation: {generation++}"); foreach (var cell in liveCells) { System.Console.WriteLine(cell); } System.Console.WriteLine( "Hit ENTER to simulate the next generation (or " + $"\"{InputConstants.InputEnd}\" to exit)."); var input = System.Console.ReadLine().Trim().ToLowerInvariant(); if (input == InputConstants.InputEnd) { break; } liveCells = GenerationStrategy.AdvanceGeneration(liveCells); } } catch (Exception ex) { System.Console.WriteLine(ex); PauseBeforeExit(); } }
private async void loadPatternButton_Click(object sender, EventArgs e) { this.StopGame(); this.ResetGameImage(); // Set file dialog's initial directory to the location of the provided patterns. var patternDirectory = Path.GetFullPath( Path.Combine( Directory.GetCurrentDirectory(), RelativePathFromBinToPatterns)); openPatternFileDialog.InitialDirectory = patternDirectory; if (openPatternFileDialog.ShowDialog() != DialogResult.OK) { return; } var file = openPatternFileDialog.FileName; var fileInputSource = new FileGameInputSource(file, this.cellParser); this.UpdateGameState( null, await fileInputSource.GetInitialGameState()); }