2011-07-20 44 views
0

我想寫一個'*'到屏幕中心,並且它可以隨機移動到rigth,left,up或down每100毫秒。如果'*'是在行,它必須在該行的開始,如果它在列的末尾,它必須在該列的開始(也是他們的反向scenerio是有效的)。我寫了那個代碼,但問題是,我不能刪除舊運動(所以每個運動都有'*'),我解決它將'_'加入舊運動。有沒有其他解決方案在屏幕上製作一個'*'?而且我不能刪除舊的運動,如果「*」是在row.Here的到底是源代碼:隨機移動星星在屏幕上

private static void MovementOfStar() 
    { 
     int row = 40, col = 12; 
     Console.CursorVisible = false; 
     Console.SetCursorPosition(row, col); 

     int direction = 0; 
     Random r = new Random(); 

     for (int i = 0; i < 1000; i++) // count of movement 
     { 
      Console.Write("*"); 
      System.Threading.Thread.Sleep(100); 
      Console.Write('\b'); 
      Console.Write("_"); 



      direction = r.Next(5); 
      while (direction== 0) 
       direction = r.Next(5); 

      switch (direction) 
      { 
       case 1: 
        if (row + 1 >= 80) 
         row = 0; 
        Console.SetCursorPosition(row++, col); 
        break; 
       case 2: 
        if (row - 1 <= 0) 
         row=79; 
        Console.SetCursorPosition(row--, col); 
        break; 
       case 3: 
        if (col + 1 >= 25) 
         col = 0; 
        Console.SetCursorPosition(row, col++); 
        break; 
       case 4: 
        if (col - 1 <= 0) 
         col = 24; 
        Console.SetCursorPosition(row, col--); 
        break; 
      } 


     } 
+0

嘗試Console.Clear();在寫之前 – raym0nd

回答

1

你可以叫Console.Clear()來清除(全)控制檯屏幕。

+0

當我用它的時候光標鎖定在起始位置,我沒有解決它 – myildirim

+0

即我解決了totaly,thanx – myildirim

2

而不是使用退格鍵和一個覆蓋_,爲什麼不重新定位光標:

Console.SetCursorPosition(col, row); 
Console.Write("*"); 

Thread.Sleep(100); 

// Wipe out the previous star 
Console.SetCursorPosition(col, row); 
Console.Write(" "); 

(請注意,我換位colrow在這裏 - 你似乎有列和行錯路)

我也建議你不要在你的方法調用中使用複合賦值操作符(row++等) - 這會使得解決這個問題變得更困難。在呼叫,然後到Console.SetCursorPosition打印之前的* - 在你的case語句

row--; 
if (row < 0) 
{ 
    row = 24; 
} 

:我會改變你的代碼使用之類的東西。

+0

關於處理遞減的好處。是的,「做到這一點,然後檢查它是否有效」,然後「檢查我想做的事是否有效,然後做到這一點」要乾淨得多。 – Jay

0

寫空間 - 「」 而不是 「_」

1

相反的:

Console.Write('\b'); 
Console.Write("_"); 

爲什麼不能有:

Console.SetCursorPosition(row, col); 
Console.Write("_"); 

即你已經知道如何直接將光標定位到你想寫字符的地方。

2

在更新行和列之前,將光標位置設置爲舊行和列並寫入空格。

順便說一下,不是從0到4生成一個隨機數,然後重試0,爲什麼不生成從0到3的隨機數,並使這四個值檢查?你可以說「情況0」 - 零和1一樣好。或者如果你真的沉迷於1到4,把隨機數的生成改爲「下一個(4)+1」。

+0

你是對的,我沒有考慮到! – myildirim