在控制台应用程序中,可以使用ascii转轮,如GUI等待游标,以指示工作正在完成。一个普通的旋转器循环使用以下4个字符:'|','/','-','\'

还有哪些循环动画序列可以为控制台应用程序增添趣味?


当前回答

如果你有超过一个字符的空间,你可以使用动画ASCII图像。例如,你可以这样做一个进度条:

[          ]
[==        ]
[=====     ]
[========  ]

或者一个“弹跳的球”进度指示器(来回移动),比如:

(-*--------) // moving -->
(-----*----) // moving -->
(---------*) // moving -->
(--------*-) // moving <--
(---*------) // moving <--
(*---------) // moving <--

一些更高级的东西,比如加载动画也可以工作。

编辑: 还有一种“行政办公桌玩具”

╔════╤╤╤╤════╗    ╔════╤╤╤╤════╗    ╔════╤╤╤╤════╗    ╔════╤╤╤╤════╗
║    │││ \   ║    ║    ││││    ║    ║   / │││    ║    ║    ││││    ║
║    │││  O  ║ -> ║    ││││    ║ -> ║  O  │││    ║ -> ║    ││││    ║
║    OOO     ║    ║    OOOO    ║    ║     OOO    ║    ║    OOOO    ║

当然,还有一个动画ASCII艺术的终极例子,如果你有时间实现一些类似的东西(这将“为控制台应用程序增添趣味”到极致)。

编辑:如果您的控制台支持颜色,您还可以通过在旋转时循环颜色来为其他枯燥的标准旋转器增添趣味。从一条红色的线开始,然后随着你旋转,慢慢地穿过彩虹变成紫色。如果你让球在每一次传球时都“涂”上不同的颜色,那么上面的“弹跳球”指示器看起来会特别酷。

其他回答

我见过

 echo -e "\033[41;1m$1 \033[0m"

在bash中基于块字符连续构建进度条。

制作一个可爱的“雨”效果:

using System;
using System.Text;
using System.Threading;

namespace CSharpSandbox
{
    class Program
    {
        static Random rnd = new Random();
        static char[,] Step(char[,] matrix)
        {
            int width = matrix.GetUpperBound(0) + 1;
            int height = matrix.GetUpperBound(1) + 1;

            char[,] res = new char[width, height];
            for (int h = 0; h < height; h++)
            {
                for (int w = 0; w < width; w++)
                {
                    char c;
                    if (h == 0)
                        c = rnd.Next(2) == 0 ? ' ' : '*';
                    else
                        c = matrix[w, h - 1];

                    res[w, h] = c;
                }
            }

            return res;
        }

        static string ToString(char[,] matrix)
        {
            int width = matrix.GetUpperBound(0) + 1;
            int height = matrix.GetUpperBound(1) + 1;
            StringBuilder sb = new StringBuilder();

            for (int h = 0; h < height; h++)
            {
                for (int w = 0; w < width; w++)
                {
                    sb.Append(matrix[w, h]);
                }
                sb.AppendLine();
            }
            return sb.ToString();
        }

        static Timer timer;
        static void Spinner()
        {
            char[,] matrix = new char[10, 5];
            timer = new Timer(_ =>
                {
                    string s = ToString(matrix);

                    Console.SetCursorPosition(0, 0);
                    Console.Write(s);

                    matrix = Step(matrix);
                },
                null,
                0,
                200);
        }

        static void Main(string[] args)
        {
            Spinner();
            Console.ReadLine();
        }
    }
}

我用了一个循环

Working. 
Working..
Working...

我知道这很鼓舞人心

曾经有一个DOS链接器名为blinker,由Blink Inc.开发。它将在工作时显示类似于下面的动画:

(o)(o)

(-)(-)

(_)(_)

第一帧显示大约一秒钟,其他两帧每一两秒钟简短地显示一次动画,使命令行看起来像是在眨眼。实际上,这个效果非常酷。

链接器甚至可以选择眨一只眼睛,你可以选择眨哪只眼睛。

绝对LOLLERSKATES !

    /\O    |    _O    |      O
     /\/   |   //|_   |     /_
    /\     |    |     |     |\
   /  \    |   /|     |    / |
 LOL  LOL  |   LLOL   |  LOLLOL
-----------+----------+-----------
  Frame 0  | Frame 1  |  Frame 2