From 49aa3ad02a8831516fc5fd43626369c88e6c1fb2 Mon Sep 17 00:00:00 2001 From: muqing <1966944300@qq.com> Date: Mon, 26 Aug 2024 07:58:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MinLong/KongLong.cs | 123 +++++++++++++++++++++++++++++----- MinLong/Zhangaiwu.cs | 31 +++++++++ ModelingMusic/Music.cs | 79 ++++++++++------------ ModelingMusic/MusicDebug.cs | 18 ++--- Program.cs | 127 +++++++++++++++++++++--------------- 5 files changed, 255 insertions(+), 123 deletions(-) create mode 100644 MinLong/Zhangaiwu.cs diff --git a/MinLong/KongLong.cs b/MinLong/KongLong.cs index 8123b50..465ab5e 100644 --- a/MinLong/KongLong.cs +++ b/MinLong/KongLong.cs @@ -1,17 +1,23 @@ using System.Diagnostics; +using System.Text; namespace Debug.MinLong; +#pragma warning disable CA1822 // 将成员标记为 static +#pragma warning disable IDE0051 // 删除未使用的私有成员 +#pragma warning disable IDE1006 // 命名样式 public class KongLong { public KongLong() { Console.WriteLine("MinLong"); + Console.CursorVisible = false; + ResetChars();//初始化 + ResetLong();//初始化小龙 new Thread(PrintCharArray).Start(); + KeyThread();//监听键盘 } - public char[,] chars = new char[10, 30]; - private long time; public void PrintCharArray() { @@ -20,39 +26,42 @@ public class KongLong int frameCount = 0; double totalTime = 0; int i; int j; - var a = chars.GetLength(0); - var b = chars.GetLength(1); + var a = Program.chars.GetLength(0); + var b = Program.chars.GetLength(1); + var buffer = new StringBuilder(); while (Program.IsWhile) { stopwatch.Restart(); - + Console.SetCursorPosition(0, 0);// 设定光标位置 Console.Clear(); - Console.SetCursorPosition(0, 0); - + buffer.Clear(); for (i = 0; i < a; i++) { for (j = 0; j < b; j++) { // Console.ForegroundColor = chars[i, j].Color; // Console.Write($" {chars[i, j].Char} "); - Console.Write(chars[i, j]); + buffer.Append(Program.chars[i, j].Char); time++; if (time > 100000) { GC.Collect(); time = 0; } } - Console.WriteLine(); + buffer.AppendLine(); } Console.ForegroundColor = ConsoleColor.White; for (i = 0; i < b; i++) { - - Console.Write("---"); + buffer.Append('Ξ'); } - + if (time % 1000 == 0) + { + new Thread(Zhangaiwu.newshitou).Start(); + } + Console.Write(buffer); Console.ResetColor(); // 停止计时并计算本帧的处理时间 @@ -72,13 +81,95 @@ public class KongLong Thread.Sleep(100); } } - private void SetChars() + + public class XiaoLong { - for (int i = 0; i < chars.GetLength(0); i++) + public char Char = '口';//小龙的形状 + public ConsoleColor Color = ConsoleColor.Red;//小龙的颜色 + public int x;//小龙X坐标 + public int y;//小龙Y坐标 + public bool istiao = false;//是否跳 + + } + public XiaoLong xiaoLong = new(); + + int charsy = Program.chars.GetLength(0); + /// + /// 初始化小龙 + /// + public void ResetLong() + { + int x = Program.chars.GetLength(1); + xiaoLong.x = x / 6; + xiaoLong.y = charsy - 1; + Program.chars[xiaoLong.y, xiaoLong.x].Char = xiaoLong.Char; + } + + /// + /// 全局键盘监听 + /// + public void KeyThread() + { + new Thread(() => { - for (int j = 0; j < chars.GetLength(1); j++) + while (Program.IsWhile) { - chars[i, j] = '0'; + ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(true); + if (consoleKeyInfo.Key == ConsoleKey.Escape) + { + Program.IsWhile = false; + Thread.Sleep(500); + Console.Clear(); + Environment.Exit(0); + return; + } + // Console.WriteLine(consoleKeyInfo.Key); + + switch (consoleKeyInfo.Key) + { + //空格 + case ConsoleKey.Spacebar: + if (!xiaoLong.istiao) { new Thread(tiaoyue).Start(); } + break; + } + } + // 等待用户按下任意键后退出 + }).Start(); + } + + /// + /// 跳跃 + /// + private void tiaoyue() + { + if (xiaoLong.istiao) return; + xiaoLong.istiao = true; + // Console.WriteLine("跳跃"); + //设置离地高度 + for (int i = 0; i < 3; i++) + { + Program.chars[xiaoLong.y, xiaoLong.x].Char = Program.ShowChar; + xiaoLong.y -= 1; + Program.chars[xiaoLong.y, xiaoLong.x].Char = xiaoLong.Char; + Thread.Sleep(100); + } + for (int i = 0; i < 3; i++) + { + Program.chars[xiaoLong.y, xiaoLong.x].Char = Program.ShowChar; + xiaoLong.y += 1; + Program.chars[xiaoLong.y, xiaoLong.x].Char = xiaoLong.Char; + Thread.Sleep(100); + } + xiaoLong.istiao = false; + } + + public static void ResetChars() + { + 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 ModelingMusic.Point(); } } } diff --git a/MinLong/Zhangaiwu.cs b/MinLong/Zhangaiwu.cs new file mode 100644 index 0000000..272c988 --- /dev/null +++ b/MinLong/Zhangaiwu.cs @@ -0,0 +1,31 @@ +namespace Debug.MinLong; + +#pragma warning disable CS8981 // 该类型名称仅包含小写 ascii 字符。此类名称可能会成为该语言的保留值。 +public class Zhangaiwu +{ + public static void newshitou() + { + var y = Program.chars.GetLength(0); + var x = Program.chars.GetLength(1); + var shitou = new Shitou + { + x = x - 1, + y = y - 1 + }; + for (int i = 1; i < x; i++) + { + Program.chars[shitou.y, shitou.x].Char = 'O'; + Thread.Sleep(100); + Program.chars[shitou.y, shitou.x].Char = Program.ShowChar; + shitou.x--; + } + } + + + public class Shitou + { + public int x; + public int y; + public char Char = '0'; + } +} \ No newline at end of file diff --git a/ModelingMusic/Music.cs b/ModelingMusic/Music.cs index a044951..2e0d51d 100644 --- a/ModelingMusic/Music.cs +++ b/ModelingMusic/Music.cs @@ -5,10 +5,9 @@ using System.Text; namespace Debug.ModelingMusic; public class Music { - public static bool IsWhile = true; //选择的模式 - public static int mode = 0; + private static int mode = 0; public Music() { Console.Clear(); @@ -92,22 +91,7 @@ public class Music Console.CursorVisible = false; // 隐藏光标 new Thread(PrintCharArray).Start(); if (mode == 1) { return; } - new Thread(() => - { - while (IsWhile) - { - ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(true); - if (consoleKeyInfo.Key == ConsoleKey.Escape) - { - IsWhile = false; - Thread.Sleep(500); - Console.Clear(); - Environment.Exit(0); - return; - } - Thread.Sleep(500); - } - }).Start(); + Program.KeyEndThread(); // 等待用户按下任意键后退出 } @@ -120,8 +104,6 @@ public class Music //常量 public const char ShowChar = ' '; - //Y,X - public static readonly Point[,] chars = new Point[10, 30]; // public static readonly char[,] chars = new char[10, 30]; public static void Down(char a) { @@ -141,21 +123,21 @@ public class Music } // 让字符从初始位置下落 - int x = random.Next(0, chars.GetLength(1)); - for (int y = 0; y < chars.GetLength(0); y++) // 注意这里使用consoleHeight + int x = random.Next(0, Program.chars.GetLength(1)); + for (int y = 0; y < Program.chars.GetLength(0); y++) // 注意这里使用consoleHeight { // 移动到下一行 - chars[y, x].Char = a; + Program.chars[y, x].Char = a; if (y > 0) { - chars[y - 1, x].Char = ShowChar; + Program.chars[y - 1, x].Char = ShowChar; } - chars[y, x].Color = Color; + Program.chars[y, x].Color = Color; Thread.Sleep(random.Next(60, 120)); // 控制字符下落速度 } Thread.Sleep(50); - chars[chars.GetLength(0) - 1, x].Char = ShowChar; + Program.chars[Program.chars.GetLength(0) - 1, x].Char = ShowChar; } private static long time = 0; // 定义一个方法来打印二维字符数组 @@ -167,10 +149,11 @@ public class Music int frameCount = 0; double totalTime = 0; int i; int j; - var a = chars.GetLength(0); - var b = chars.GetLength(1); + var a = Program.chars.GetLength(0); + var b = Program.chars.GetLength(1); var buffer = new StringBuilder(); - while (IsWhile) + ConsoleColor xiantiaoColor = random.Next(0, 2) == 0 ? ConsoleColor.Red : ConsoleColor.Blue;//线条的颜色 + while (Program.IsWhile) { stopwatch.Restart(); Console.SetCursorPosition(0, 0);// 设定光标位置 @@ -180,9 +163,10 @@ public class Music { for (j = 0; j < b; j++) { - Console.ForegroundColor = chars[i, j].Color; - //Console.Write($" {chars[i, j].Char} "); - buffer.Append(chars[i, j].Char); + //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) { @@ -192,21 +176,21 @@ public class Music buffer.AppendLine(); //Console.WriteLine(); } - + Console.ForegroundColor = ConsoleColor.DarkBlue; Console.Write(buffer.ToString()); if (time % 1000 == 0) { - Console.ForegroundColor = random.Next(0, 2) == 0 ? ConsoleColor.Red : ConsoleColor.Blue; + xiantiaoColor = 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++) { - - Console.Write("-"); + buffer.Append('-'); } - Console.ResetColor(); - + Console.Write(buffer); // 停止计时并计算本帧的处理时间 stopwatch.Stop(); double elapsedMilliseconds = stopwatch.Elapsed.TotalMilliseconds; @@ -214,21 +198,28 @@ public class Music frameCount++; // 计算帧率 double fps = frameCount / (totalTime / 1000.0); - Console.WriteLine($" {fps:0} FPS"); + // Console.ResetColor(); + Console.ForegroundColor = ConsoleColor.White; + buffer.Clear(); + //for (j = 0; i < b; j++) + //{ + //} + buffer.Append($" {fps:0} FPS "); + Console.WriteLine(buffer); // 保持每秒约16.67ms(即大约60 FPS)的间隔 // Thread.Sleep(Math.Max(0, 60 - (int)elapsedMilliseconds)); - //死方法 不知道为什么 控制台限制60 帧这样闪烁不会太严重 - Thread.Sleep(150); + //这样闪烁不会太严重 + Thread.Sleep(100); } } private void setCharArry() { - for (int i = 0; i < chars.GetLength(0); i++) + for (int i = 0; i < Program.chars.GetLength(0); i++) { - for (int j = 0; j < chars.GetLength(1); j++) + for (int j = 0; j < Program.chars.GetLength(1); j++) { - chars[i, j] = new Point(); // 初始化每个元素 + Program.chars[i, j] = new Point(); // 初始化每个元素 } // Console.WriteLine(); } diff --git a/ModelingMusic/MusicDebug.cs b/ModelingMusic/MusicDebug.cs index fa1247e..7f2922b 100644 --- a/ModelingMusic/MusicDebug.cs +++ b/ModelingMusic/MusicDebug.cs @@ -26,7 +26,7 @@ public class MusicDebug { new Thread(() => Music.Down(keyChar)).Start(); } - } while (Music.IsWhile); + } while (Program.IsWhile); } /// @@ -38,7 +38,7 @@ public class MusicDebug Console.CursorVisible = false; // 隐藏光标 var random = new Random(); - while (Music.IsWhile) + while (Program.IsWhile) { //随机生成 a-z和A-Z var ch = (char)(random.Next(26) + 65); @@ -57,7 +57,7 @@ public class MusicDebug Console.Clear(); var random = new Random(); - while (Music.IsWhile) + while (Program.IsWhile) { for (int v = 0; v < ch.Length; v++) { @@ -75,7 +75,7 @@ public class MusicDebug Console.Clear(); var random = new Random(); - while (Music.IsWhile) + while (Program.IsWhile) { int v = random.Next(0, ch.Length); new Thread(() => Music.Down(ch[v])).Start(); @@ -140,19 +140,19 @@ public class MusicDebug static void DrawVolumeBar(float rmsVolume) { - int barLength = Music.chars.GetLength(1); // 控制条长度 + int barLength = Program.chars.GetLength(1); // 控制条长度 int filledLength = Math.Min((int)(rmsVolume * 1000), barLength); - for (int x = 0; x < Music.chars.GetLength(1); x++) + for (int x = 0; x < Program.chars.GetLength(1); x++) { - Music.chars[9, x].Color = ConsoleColor.DarkCyan; + Program.chars[9, x].Color = ConsoleColor.DarkCyan; if (x < filledLength) { - Music.chars[9, x].Char = '#'; // 绘制音量条 + Program.chars[9, x].Char = '#'; // 绘制音量条 } else { - Music.chars[9, x].Char = Music.ShowChar; + Program.chars[9, x].Char = Music.ShowChar; } } } diff --git a/Program.cs b/Program.cs index 6f5a07d..ae99f11 100644 --- a/Program.cs +++ b/Program.cs @@ -32,42 +32,15 @@ public class Program // 设置控制台输出编码,以支持复杂字符 Console.OutputEncoding = Encoding.UTF8; - //// 主循环 - //while (true) - //{ - // // 创建一个缓冲区 - // char[,] buffer = new char[height, width]; - - // // 在缓冲区中绘制内容 - // for (int y = 0; y < height; y++) - // { - // for (int x = 0; x < width; x++) - // { - // buffer[y, x] = (x + y) % 2 == 0 ? '#' : ' '; - // } - // } - - // // 将缓冲区的内容输出到控制台 - // Console.SetCursorPosition(0, 0); - // Console.Clear(); - // StringBuilder sb = new StringBuilder(); - // for (int y = 0; y < height; y++) - // { - // for (int x = 0; x < width; x++) - // { - // sb.Append(buffer[y, x]); - // } - // sb.AppendLine(); - // } - // Console.Write(sb.ToString()); - - // // 控制刷新率 - // Thread.Sleep(200); - //} _ = new Program(); } + //Y,X + public static readonly Point[,] chars = new Point[10, 50]; public static bool IsWhile = true; + + public static char ShowChar = ' '; + public Program() { // new Thread(MusicDebug.MusicRhythm).Start(); @@ -75,33 +48,79 @@ public class Program // new Debug.MinLong.KongLong(); // return; + Console.Clear(); + int y = 0; + printfLine("请选择你要执行的操作:"); + // printfLine(" 0.退出 "); + // printfLine(" 1.抽拉 "); + // printfLine(" 2.铁锈位置搜索引擎 "); + // printfLine(" 3.音乐调试 "); + // printfLine(" 4.小龙快跑 "); + string[] str = ["0 退出", "1 抽卡", "2 铁锈位置搜索引擎", "3 音乐调试", "4 小龙快跑"]; + for (int i = 0; i < str.Length; i++) + { + printfLine(str[i]); + } + Console.SetCursorPosition(0, y); do { - printfLine("请选择你要执行的操作:"); printf(" 0.退出 "); - printf(" 1.抽拉 "); printf(" 2.铁锈位置搜索引擎 "); Console.WriteLine(); - var v = Console.ReadLine(); - if (int.TryParse(v, out var i)) + var v = Console.ReadKey(true); + switch (v.Key) { - switch (i) - { - case 0: - Environment.Exit(0); - break; - case 1: - _ = new ChouKa(); - break; - case 2: - _ = new Mod(); - break; - case 3: - _ = new Music(); - return; - default: - printfLine("还没有这个功能"); - break; - } + case ConsoleKey.UpArrow: + //设置光标位置 + y = y == 0 ? y : y - 1; + break; + case ConsoleKey.DownArrow: + y = y + 1 == str.Length ? y : y + 1; + break; + case ConsoleKey.Enter: + switch (y) + { + case 0: + Environment.Exit(0); + break; + case 1: + _ = new ChouKa(); + break; + case 2: + _ = new Mod(); + break; + case 3: + _ = new Music(); + return; + default: + printfLine("还没有这个功能"); + break; + } + break; } + // Console.WriteLine(v.Key); + Console.SetCursorPosition(0, y); + // { + } while (true); } + + public static void KeyEndThread() + { + new Thread(() => + { + while (IsWhile) + { + ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(true); + if (consoleKeyInfo.Key == ConsoleKey.Escape) + { + IsWhile = false; + Thread.Sleep(500); + Console.Clear(); + Environment.Exit(0); + return; + } + Thread.Sleep(500); + } + // 等待用户按下任意键后退出 + }).Start(); + } } \ No newline at end of file