如何在C#控制台应用程序中使文本闪烁不同的颜色?

时间:2016-02-08 14:27:19

标签: c#

我有这个程序 http://pastebin.com/uHNi15pW

我希望这段代码可以闪现所有颜色

Console.WriteLine("Welcome to Tic Tac Toe!");

我该怎么做?

2 个答案:

答案 0 :(得分:3)

为此,您需要知道控制台上文本的位置(因为Console.WriteLine只会在当前光标位置写入)。你可以这样做:

public async Task ShowTextInColors(string text, int x, int y, int delay, CancellationToken token)
{
    ConsoleColor[] colors = Enum.GetValues(typeof(ConsoleColor)).OfType<ConsoleColor>().ToArray();

    int color = -1;
    while (!token.IsCancellationRequested)
    {
        color += 1;
        if (color >= colors.Length) color = 0;
        Console.CursorLeft = x;
        Console.CursorTop = y;
        Console.ForegroundColor = colors[color];
        Console.Write(text);
        await Task.Delay(delay, token);
    }
}

xy确定控制台上要显示文本的光标位置。

您可以这样称呼:

CancellationTokenSource source = new CancellationTokenSource();
ShowTextInColors("Welcome to Tic Tac Toe!", 0, 10, 1000, source.Token);

并最终通过调用

来阻止它
source.Cancel();

请注意,这会干扰其他线程中对Console.*方法的其他调用。由于您的问题看起来像是要在该行下方显示井字游戏,您可能需要同步Console.*次来电。但同步将是一个新问题,你肯定会在StackOverflow上找到很多问题(尝试lock关键字)。

答案 1 :(得分:1)

试试这个

            while (true)
            {
                foreach (ConsoleColor c in Enum.GetValues(typeof(ConsoleColor)))
                {
                    Console.ForegroundColor = c;
                    Console.WriteLine("Welcome to Tic Tac Toe!");
                    Console.Clear();
                }
            }

你可以在foreach中添加一些deley以设置减速闪烁

          while (true)
            {
                foreach (ConsoleColor c in Enum.GetValues(typeof(ConsoleColor)))
                {
                    Console.ForegroundColor = c;
                    Console.WriteLine("Welcome to Tic Tac Toe!");
                    Thread.Sleep(1000); // 1 sec. deley
                    Console.Clear();
                }
            }

如果您想要不含Console.Clear() 的内容,请尝试以下操作:您必须设置X和Y的位置

Console.WriteLine("Some text"); // this text will stay when tesxt "Welcome to Tic Tac Toe!" will by blinking

 while (true)
    {
        foreach (ConsoleColor c in Enum.GetValues(typeof(ConsoleColor)))
        {
            Console.CursorLeft = 4; // set position
            Console.CursorTop = 6; // set position
            Console.ForegroundColor = c;
            Console.WriteLine("Welcome to Tic Tac Toe!");

        }
    }

在您的代码中您必须粘贴类似这样的代码do循环:

var task = new Task(() =>
            {
                while (true)
                {
                    foreach (ConsoleColor c in Enum.GetValues(typeof(ConsoleColor)))
                    {
                        var x = Console.CursorLeft;
                        var y = Console.CursorTop;

                        Console.CursorLeft = 0; // set position
                        Console.CursorTop = 0; // set position

                        Console.ForegroundColor = c;
                        Console.WriteLine("Welcome to Tic Tac Toe!");

                        Console.CursorLeft = x;
                        Console.CursorTop = y;

                        Thread.Sleep(1000);
                    }
                }

                });

do
{
.... rest of code

在Board创建后改变这个:

                Board();// calling the board Function

                if (task.Status != TaskStatus.Running)
                {
                    task.Start();
                }

                choice = int.Parse(Console.ReadLine());//Taking users choice  

完整代码你在这里

https://github.com/przemekwa/ProgramingStudy/blob/master/ProgramingStudy/Study/TikTakTou.cs

当你玩的时候,效果会闪烁。