static void Main(string[] args) { _columnSize = Math.Max(6, GetDiscWidth(DISCS_COUNT) + 2); HanoiTower algorithm = new HanoiTower(DISCS_COUNT); algorithm.MoveCompleted += Algorithm_Visualize; Algorithm_Visualize(algorithm, EventArgs.Empty); algorithm.Start(); }
private static char[][] InitializeVisualization(HanoiTower algorithm) { char[][] visualization = new char[algorithm.DiscsCount][]; for (int y = 0; y < visualization.Length; y++) { visualization[y] = new char[_columnSize * 3]; for (int x = 0; x < _columnSize * 3; x++) { visualization[y][x] = ' '; } } return(visualization); }
private static void Algorithm_Visualize(object sender, EventArgs e) { Console.Clear(); HanoiTower algorithm = (HanoiTower)sender; if (algorithm.DiscsCount <= 0) { return; } char[][] visualization = InitializeVisualization(algorithm); PrepareColumn(visualization, 1, algorithm.DiscsCount, algorithm.From); PrepareColumn(visualization, 2, algorithm.DiscsCount, algorithm.To); PrepareColumn(visualization, 3, algorithm.DiscsCount, algorithm.Auxiliary); Console.WriteLine(Center("FROM") + Center("TO") + Center("AUXILIARY")); DrawVisualization(visualization); Console.WriteLine(); Console.WriteLine($"Number of moves: {algorithm.MovesCount}"); Console.WriteLine($"Number of discs: {algorithm.DiscsCount}"); Thread.Sleep(DELAY_MS); }