Ejemplo n.º 1
0
        public static void StartSimulationWithOptions(CliOptions options)
        {
            var rows    = options.Rows ?? 30;
            var columns = options.Columns ?? 60;

            Console.SetWindowSize(Math.Max(Console.WindowWidth, columns + 2), Math.Max(Console.WindowHeight, rows + 4));
            Console.CursorVisible = false;
            Console.Clear();

            LifeGrid grid = LifeGrid.SeedRandomGrid(columns, rows);

            Print(grid);

            if (options.RunUtilGeneration.HasValue)
            {
                grid = RunSimulationUntilGeneration(grid, options.RunUtilGeneration.Value);
            }

            do
            {
                Print(grid, "Press 'q' to quit.\r\nPress 'g' to specify the next generation to stop at.\r\nPress 'r' to start a new simulation.\r\nAll other keys advance the simulation one generation.");
                var key = Console.ReadKey();

                if (key.KeyChar == 'q')
                {
                    return;
                }
                if (key.KeyChar == 'g')
                {
                    Console.Write("\r\nHow many more generations to run for: ");
                    var generationsInput = Console.ReadLine();
                    var generation       = long.Parse(generationsInput);
                    Console.Clear();
                    grid = RunSimulationUntilGeneration(grid, grid.Generation + generation);
                }
                if (key.KeyChar == 'r')
                {
                    grid = LifeGrid.SeedRandomGrid(columns, rows);
                }
            }while(true);
        }