2016-02-08 46 views

回答

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!"); 

     } 
    } 

在你的代碼必須貼上這樣的代碼befeore 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();// 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

而且效果將通過在玩牌時閃爍標誌來實現。

+0

我試着用console.clear但其餘的程序dosent顯示 – FFIX

+0

我更新我的答案 - 最後一個例子是沒有'Console.Clear' –

+0

對不起,但我仍然得到同樣的問題 – FFIX

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關鍵字)。

相關問題