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; } } } }
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> /// 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; }