Example #1
0
        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();
            }
        }
Example #2
0
        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());
        }