using System; using System.Diagnostics; using System.Text; using Debug; using Debug.ModelingMusic; namespace ModelingMusic; public class MusicFrom { private long time = 0; public MusicFrom() { setCharArry(); new Thread(PrintCharArray).Start(); } char[] jianpan = { 'D', 'F', 'G', ' ', 'J', 'K', 'L' }; public void PrintCharArray() { var stopwatch = new Stopwatch(); int frameCount = 0; double totalTime = 0; int i; int j; // 获取字符数组的行数和列数 var a = Program.chars.GetLength(0); var b = Program.chars.GetLength(1); var buffer = new StringBuilder(); ConsoleColor xiantiaoColor = Program.random.Next(0, 2) == 0 ? ConsoleColor.Red : ConsoleColor.Blue;//线条的颜色 while (Program.IsWhile) { stopwatch.Restart(); Console.SetCursorPosition(0, 0);// 设定光标位置 Console.Clear(); buffer.Clear(); for (i = 0; i < a; i++) { for (j = 0; j < b; j++) { //Console.ForegroundColor = Program.chars[i, j].Color; //Console.Write($" {Program.chars[i, j].Char} "); buffer.Append(Program.chars[i, j].Char); time++; if (time > 100000) { GC.Collect(); time = 0; } } buffer.AppendLine(); //Console.WriteLine(); } Console.ForegroundColor = ConsoleColor.DarkBlue; Console.Write(buffer.ToString()); if (time % 1000 == 0) { xiantiaoColor = Program.random.Next(0, 2) == 0 ? ConsoleColor.Red : ConsoleColor.Blue; } // Console.ForegroundColor = (ConsoleColor)random.Next(0, 16); Console.ForegroundColor = xiantiaoColor; buffer.Clear(); for (i = 0; i < b; i++) { buffer.Append('-'); } // 打印ASDF HJKL buffer.AppendLine(); // int totalLength = 50; int totalAs = jianpan.Length; int spaceBetweenAs = (b - totalAs) / (totalAs - 1); for (i = 0; i < totalAs; i++) { for (j = 0; j < spaceBetweenAs / 2; j++) { buffer.Append(' '); } buffer.Append(jianpan[i]); for (j = 0; j < spaceBetweenAs / 2; j++) { buffer.Append(' '); } } Console.Write(buffer); // 停止计时并计算本帧的处理时间 stopwatch.Stop(); double elapsedMilliseconds = stopwatch.Elapsed.TotalMilliseconds; totalTime += elapsedMilliseconds; frameCount++; // 计算帧率 double fps = frameCount / (totalTime / 1000.0); // Console.ResetColor(); Console.ForegroundColor = ConsoleColor.White; buffer.Clear(); buffer.Append($" {fps:0} FPS "); Console.WriteLine(buffer); // 保持每秒约16.67ms(即大约60 FPS)的间隔 // Thread.Sleep(Math.Max(0, 60 - (int)elapsedMilliseconds)); //这样闪烁不会太严重 Thread.Sleep(100); } } private void setCharArry() { for (int i = 0; i < Program.chars.GetLength(0); i++) { for (int j = 0; j < Program.chars.GetLength(1); j++) { Program.chars[i, j] = new Point(); // 初始化每个元素 } // Console.WriteLine(); } } }