如何使用 C# 在 Windows 控制台应用程序中创建 ASCII 动画?

2024-02-09

我希望它能够显示非闪烁的动画,就像这个很棒的 Linux 命令一样;sl

http://www.youtube.com/watch?v=9GyMZKWjcYU http://www.youtube.com/watch?v=9GyMZKWjcYU

我希望能举一个小而愚蠢的例子,比如……一只苍蝇。

Thanks!


只需使用Console.SetCursorPosition将光标移动到某个位置,然后Console.Write一个人物。在每一帧之前,您必须通过用空格覆盖前一帧来删除它。这是我刚刚构建的一个小例子:

class Program
{
    static void Main(string[] args)
    {
        char[] chars = new char[] { '.', '-', '+', '^', '°', '*' };
        for (int i = 0; ; i++)
        {
            if (i != 0)
            {
                // Delete the previous char by setting it to a space
                Console.SetCursorPosition(6 - (i-1) % 6 - 1, Console.CursorTop);
                Console.Write(" ");
            }

            // Write the new char
            Console.SetCursorPosition(6 - i % 6 - 1, Console.CursorTop);
            Console.Write(chars[i % 6]);

            System.Threading.Thread.Sleep(100);
        }
    }
}

例如,您可以拍摄一个 gif 动画,从中提取所有单帧/图像(请参阅如何执行此操作)here http://www.vcskicks.com/csharp_animated_gif2.php),应用 ASCII 转换(描述了如何做到这一点here http://www.c-sharpcorner.com/UploadFile/dheenu27/ImageToASCIIconverter03022007164455PM/ImageToASCIIconverter.aspx例如)并像上面的代码示例一样逐帧打印这些内容。

Update

只是为了好玩,我实现了我刚才描述的内容。更换一下试试@"C:\some_animated_gif.gif"以及一些(不是很大)动画 gif 的路径。例如,从以下位置获取 AJAX 加载器 gifhere http://ajaxload.info/.

class Program
{
    static void Main(string[] args)
    {
        Image image = Image.FromFile(@"C:\some_animated_gif.gif");
        FrameDimension dimension = new FrameDimension(
                           image.FrameDimensionsList[0]);
        int frameCount = image.GetFrameCount(dimension);
        StringBuilder sb;

        // Remember cursor position
        int left = Console.WindowLeft, top = Console.WindowTop;

        char[] chars = { '#', '#', '@', '%', '=', '+', 
                         '*', ':', '-', '.', ' ' };
        for (int i = 0; ; i = (i + 1) % frameCount)
        {
            sb = new StringBuilder();
            image.SelectActiveFrame(dimension, i);

            for (int h = 0; h < image.Height; h++)
            {
                for (int w = 0; w < image.Width; w++)
                {
                    Color cl = ((Bitmap)image).GetPixel(w, h);
                    int gray = (cl.R + cl.G + cl.B) / 3;
                    int index = (gray * (chars.Length - 1)) / 255;

                    sb.Append(chars[index]);
                }
                sb.Append('\n');
            }

            Console.SetCursorPosition(left, top);
            Console.Write(sb.ToString());

            System.Threading.Thread.Sleep(100);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 C# 在 Windows 控制台应用程序中创建 ASCII 动画? 的相关文章

随机推荐

  • Mysql即使id错误也返回结果

    我在 id 值之后添加随机字符串时遇到问题仍然查询返回结果 理想情况下 它应该返回空结果 mysql gt select from pricelists where id 1abcd id name mark
  • 使用 Jest/Typescript 测试 fs 库函数

    我正在尝试测试我编写的库函数 它在我的代码中工作 但无法使用 fs 的模拟进行测试 我有一系列函数用于处理封装在函数中的操作系统 因此应用程序的不同部分可以使用相同的调用 我曾尝试遵循这个问题 https stackoverflow com
  • Ruby:意外的输入结束,需要 if 语句的 keywords_end

    我使用 Java 工作了几个月 现在正在转回 Ruby 我从以下代码中收到一个奇怪的错误 def count divisors divisor hash 25 times do i divisor hash i find dividends
  • << 目标 c 枚举中的运算符?

    我正在寻找一些东西并进入这个枚举是apple UITableViewCell h 如果这是微不足道的 我很抱歉 但我想知道 好奇这有什么意义 我知道 ruby 中的 enum UITableViewCellStateDefaultMask
  • 使用 javascript/jquery 用 html 填充 div

    这是我的问题 我有一个div div div 我想在某些条件下用其他代码填充它 p Showing results Key img src lt 1 nbsp img src lt 2 nbsp img src lt 3 nbsp img
  • FTP 脚本在放置后保留文件的时间戳

    我知道 FTP 不支持传输和保留文件日期 时间戳 想知道是否有人有任何想法 脚本 Shell perl 可以在放置操作后保留传输文件的时间戳 您是否可以尝试以 tar 文件传输文件 从 tar 中提取后 时间戳将被恢复
  • 处理器“org.thymeleaf.spring5.processor.SpringInputGeneralFieldTagProcessor”执行期间出错

    我正在尝试使用 thymeleaf 和 Spring boot 构建简单的搜索选项卡 这是我的代码和 html 文件 scCountry html
  • React Native (expo) 加载 Markdown 文件

    我在加载 Markdown 文件时遇到一些问题 md 进入我的本机反应 非独立的世博项目 找到了这个很棒的包 可以让我渲染它 但不知道如何加载本地 md文件作为字符串 import react from react import PureC
  • 如何阻止特定网站浏览器代理?

    最近 我遇到了数据挖掘机器人的一些问题 每天在一天中的某些时间从我的网站提取数据 这不仅会浪费我的带宽 还会向我的谷歌分析提供错误的数据 他们通常使用 amazonaws IP 进入 但最近他们已切换到其他主机 保持不变的是它们使用相同的用
  • 使用 jFreeChart 绘制磁滞回线

    我需要绘制磁滞环 然后计算环内闭合的面积 我正在使用 jFreeChart 考虑以下数据 hyst 0 0 hyst 1 0 hyst 2 0 0098 hyst 3 0 0196 hyst 4 0 0489 hyst 5 0 0879 h
  • Eclipse:“重构 - 重命名”完全混乱,替换文件中的任意字符

    在重构类名时 Eclipse 最近表现出非常奇怪的行为 例如 让我们看一下我们的一个课程 public class CampaignCSVPanel extends ContentPanel private FileUploadField
  • 如何向现有对象方法添加装饰器?

    如果我使用我无法控制的模块 类 我将如何装饰其中一个方法 我明白我可以 my decorate method target method 但我希望这种情况发生在任何地方target method无需执行搜索 替换即可调用 有可能吗 不要这样
  • Python DataFrame打印样式随机变化

    我正在使用 python 3 7 7 和 Visual Studio 代码 1 58 2 我正在使用 pyodbc 查询 mysql 数据库 但我相信我看到的问题发生在这之外 import pyodbc as po import panda
  • 如何删除领域对象及其子关系?

    我有一个大对象 它与其他对象有很多关系 这些对象也与其他对象有关系 因此 当我删除根对象时 我发现只有父对象被删除 而其所有关系都没有被删除 有没有办法在同一事务中删除整个树 领域不支持cascading delete目前 您可以为该功能投
  • 锁定(“Kiosk 模式”)Android 设备 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 在满足以下要求的同时 您将如何锁定 Android 设备 访问 Wifi 网络 访问单个公司的应用程序 能够下载 更新到公司应用程序的新版本 访问蓝牙
  • 嵌套 iframe,又名 Iframe Inception

    我正在尝试使用 jQuery 访问 div id element div div 所有 iframe 都位于同一域中 不存在 www 非 www 问题 我已成功选择第一个 iframe 中的元素 但未成功选择第二个嵌套 iframe 中的元
  • 单击图像后未出现日期选择器

    我有一个显示日期选择器的小提琴 我在下面编写了相同的代码 但没有任何反应 我做错了什么 当我单击绿色时 不会生成日期选择器 但在小提琴中它运行良好 我在哪里做错了 http jsfiddle net cBwEK 10 http jsfidd
  • C 在缓冲区中创建额外字节

    我今天一直在摆弄 C 当我注释掉这段代码中的第三个缓冲区时 我不明白输出的差异 include
  • 如何将样式应用于元素的所有子元素

    我有一个元素class myTestClass 如何将 css 样式应用于此元素的所有子元素 我只想将样式应用于元素子元素 不是它的孙子 我可以用 myTestClass gt div margin 0 20px 对所有人都有效div孩子们
  • 如何使用 C# 在 Windows 控制台应用程序中创建 ASCII 动画?

    我希望它能够显示非闪烁的动画 就像这个很棒的 Linux 命令一样 sl http www youtube com watch v 9GyMZKWjcYU http www youtube com watch v 9GyMZKWjcYU 我