我有这个程序 http://pastebin.com/uHNi15pW
我希望这段代码可以闪现所有颜色
Console.WriteLine("Welcome to Tic Tac Toe!");
我该怎么做?
答案 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);
}
}
x
和y
确定控制台上要显示文本的光标位置。
您可以这样称呼:
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
当你玩的时候,效果会闪烁。