public void StepPositive()
        {
            Simulator     simulator;
            CommonPattern seedPattern = CommonPattern.Pulsar;

            simulator = new Simulator(seedPattern);
            var firstGeneration = simulator.GetCurrentGeneration();

            simulator.Step();
            simulator.Step();
            simulator.Step();
            var thirdGeneration = simulator.GetCurrentGeneration();

            Assert.IsTrue((firstGeneration.GetLength(0) == thirdGeneration.GetLength(0)) && (firstGeneration.GetLength(1) == thirdGeneration.GetLength(1)), "First and third generations dimension are not equal");
            for (int x = 0; x < firstGeneration.GetLength(0); x++)
            {
                for (int y = 0; y < firstGeneration.GetLength(1); y++)
                {
                    if (firstGeneration[x, y] != thirdGeneration[x, y])
                    {
                        Assert.Fail("First Generation and Third Generation are not same.");
                        break;
                    }
                }
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            ConsoleKey             key;
            SimulatorConsoleTicker ticker = null;

            Console.Clear();
            Console.WriteLine("**********************  Welcome to Conway's Game of Life  **********");
            Console.WriteLine("**********************  Instructions  ******************************");
            Console.WriteLine("********************************************************************");
            Console.WriteLine("Press C for common patterns");
            Console.WriteLine("Press M for manual entry of initial seed");
            Console.WriteLine("Press anyother key to exit");
            key = Console.ReadKey(true).Key;
            if (key == ConsoleKey.C)
            {
                Console.Clear();
                Console.WriteLine("**********************  Choose from following patterns *************");
                var options = Enum.GetNames(typeof(CommonPattern));
                for (int i = 0; i < options.Length; i++)
                {
                    Console.WriteLine(string.Format("Press {0} for {1}", i.ToString(), options[i]));
                }
                Console.WriteLine("Press anyother key to exit");
                var keyChar = Console.ReadKey(true).KeyChar;
                int intKey  = -1;
                int.TryParse(keyChar.ToString(), out intKey);
                if (intKey > -1 && intKey < options.Length)
                {
                    CommonPattern selectedPattern = (CommonPattern)Enum.Parse(typeof(CommonPattern), options[intKey], true);
                    ticker = new SimulatorConsoleTicker(selectedPattern, 1000);
                }
                else
                {
                    return;
                }
            }
            else if (key == ConsoleKey.M)
            {
                Console.Clear();
                Console.WriteLine("Enter manual feed as 1,1|2,3|4,5");
                string userInput = Console.ReadLine();
                ticker = new SimulatorConsoleTicker(userInput, 1000);
            }
            else
            {
                return;
            }

            Console.WriteLine("Press S to start, any other key to exit now or later");
            key = Console.ReadKey().Key;
            if (key == ConsoleKey.S)
            {
                Thread thread = new Thread(ticker.Start);
                thread.Start();

                Console.ReadKey();
                thread.Abort();
            }
        }
        public CommonPatternViewModel(CommonPattern modelPattern, bool isDelete)
        {
            this.modelPattern = modelPattern;
            this.IsDelete     = isDelete;

            AddSettingCommand.Subscribe(() =>
                                        (IsDelete ? model.Setting.DeleteTexts : model.Setting.ReplaceTexts)
                                        .Add(modelPattern.ToReplacePattern()));
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="pattern">Common patterns in simulation</param>
 public Simulator(CommonPattern pattern)
     : this(Simulator.GetSeedForPattern(pattern))
 {
 }
        /// <summary>
        /// Gets seed in 2 dimensional bool array form for common patterns
        /// </summary>
        /// <param name="pattern">Common pattern</param>
        /// <returns>Seed for the pattern as 2 dimensional bool array</returns>
        private static bool[,] GetSeedForPattern(CommonPattern pattern)
        {
            bool[,] seed;
            switch (pattern)
            {
            case CommonPattern.Blinker:
                seed       = new bool[5, 5];
                seed[1, 2] = true;
                seed[2, 2] = true;
                seed[3, 2] = true;
                break;

            case CommonPattern.Toad:
                seed       = new bool[6, 6];
                seed[2, 2] = true;
                seed[3, 2] = true;
                seed[4, 2] = true;
                seed[1, 3] = true;
                seed[2, 3] = true;
                seed[3, 3] = true;
                break;

            case CommonPattern.Beacon:
                seed       = new bool[6, 6];
                seed[1, 1] = true;
                seed[2, 1] = true;
                seed[1, 2] = true;
                seed[4, 3] = true;
                seed[3, 4] = true;
                seed[4, 4] = true;
                break;

            case CommonPattern.Pulsar:
                seed         = new bool[17, 17];
                seed[4, 2]   = true;
                seed[5, 2]   = true;
                seed[6, 2]   = true;
                seed[10, 2]  = true;
                seed[11, 2]  = true;
                seed[12, 2]  = true;
                seed[4, 7]   = true;
                seed[5, 7]   = true;
                seed[6, 7]   = true;
                seed[10, 7]  = true;
                seed[11, 7]  = true;
                seed[12, 7]  = true;
                seed[4, 9]   = true;
                seed[5, 9]   = true;
                seed[6, 9]   = true;
                seed[10, 9]  = true;
                seed[11, 9]  = true;
                seed[12, 9]  = true;
                seed[4, 14]  = true;
                seed[5, 14]  = true;
                seed[6, 14]  = true;
                seed[10, 14] = true;
                seed[11, 14] = true;
                seed[12, 14] = true;

                seed[2, 4]  = true;
                seed[2, 5]  = true;
                seed[2, 6]  = true;
                seed[2, 10] = true;
                seed[2, 11] = true;
                seed[2, 12] = true;

                seed[7, 4]  = true;
                seed[7, 5]  = true;
                seed[7, 6]  = true;
                seed[7, 10] = true;
                seed[7, 11] = true;
                seed[7, 12] = true;


                seed[9, 4]  = true;
                seed[9, 5]  = true;
                seed[9, 6]  = true;
                seed[9, 10] = true;
                seed[9, 11] = true;
                seed[9, 12] = true;

                seed[14, 4]  = true;
                seed[14, 5]  = true;
                seed[14, 6]  = true;
                seed[14, 10] = true;
                seed[14, 11] = true;
                seed[14, 12] = true;


                break;

            default:
                seed = new bool[6, 6];
                break;
            }
            return(seed);
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="pattern">Common Pattern</param>
 /// <param name="tickDuration">Frequency of genration in milliseconds</param>
 public SimulatorConsoleTicker(CommonPattern pattern, int tickDuration)
 {
     _simulator    = new Simulator(pattern);
     _tickDuration = tickDuration;
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="pattern">Common Pattern</param>
 /// <param name="tickDuration">Frequency of genration in milliseconds</param>
 public SimulatorConsoleTicker(CommonPattern pattern, int tickDuration)
 {
     _simulator = new Simulator(pattern);
     _tickDuration = tickDuration;
 }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="pattern">Common patterns in simulation</param>
        public Simulator(CommonPattern pattern)
            : this(Simulator.GetSeedForPattern(pattern))
        {

        }
        /// <summary>
        /// Gets seed in 2 dimensional bool array form for common patterns
        /// </summary>
        /// <param name="pattern">Common pattern</param>
        /// <returns>Seed for the pattern as 2 dimensional bool array</returns>
        private static bool[,] GetSeedForPattern(CommonPattern pattern)
        {
                       
            bool[,] seed;
            switch (pattern)
            {
                case CommonPattern.Blinker:
                    seed = new bool[5, 5];
                    seed[1, 2] = true;
                    seed[2, 2] = true;
                    seed[3, 2] = true;
                    break;
                case CommonPattern.Toad:
                    seed = new bool[6, 6];
                    seed[2, 2] = true;
                    seed[3, 2] = true;
                    seed[4, 2] = true;
                    seed[1, 3] = true;
                    seed[2, 3] = true;
                    seed[3, 3] = true;
                    break;
                case CommonPattern.Beacon:
                    seed = new bool[6, 6];
                    seed[1, 1] = true;
                    seed[2, 1] = true;
                    seed[1, 2] = true;
                    seed[4, 3] = true;
                    seed[3, 4] = true;
                    seed[4, 4] = true;
                    break;
                case CommonPattern.Pulsar:
                    seed = new bool[17, 17];
                    seed[4, 2] = true;
                    seed[5, 2] = true;
                    seed[6, 2] = true;
                    seed[10, 2] = true;
                    seed[11, 2] = true;
                    seed[12, 2] = true;
                    seed[4, 7] = true;
                    seed[5, 7] = true;
                    seed[6, 7] = true;
                    seed[10, 7] = true;
                    seed[11, 7] = true;
                    seed[12, 7] = true;
                    seed[4, 9] = true;
                    seed[5, 9] = true;
                    seed[6, 9] = true;
                    seed[10, 9] = true;
                    seed[11, 9] = true;
                    seed[12, 9] = true;
                    seed[4, 14] = true;
                    seed[5, 14] = true;
                    seed[6, 14] = true;
                    seed[10, 14] = true;
                    seed[11, 14] = true;
                    seed[12, 14] = true;

                    seed[2, 4] = true;
                    seed[2, 5] = true;
                    seed[2, 6] = true;
                    seed[2, 10] = true;
                    seed[2, 11] = true;
                    seed[2, 12] = true;

                    seed[7, 4] = true;
                    seed[7, 5] = true;
                    seed[7, 6] = true;
                    seed[7, 10] = true;
                    seed[7, 11] = true;
                    seed[7, 12] = true;


                    seed[9, 4] = true;
                    seed[9, 5] = true;
                    seed[9, 6] = true;
                    seed[9, 10] = true;
                    seed[9, 11] = true;
                    seed[9, 12] = true;

                    seed[14, 4] = true;
                    seed[14, 5] = true;
                    seed[14, 6] = true;
                    seed[14, 10] = true;
                    seed[14, 11] = true;
                    seed[14, 12] = true;


                    break;
                default:
                    seed = new bool[6, 6];
                    break;

            }
            return seed;
        }