2015-11-25 64 views
-1

你好,我的問題是,代碼打印在屏幕上,但是當文本到達命令行的一側時,它會崩潰。我怎樣才能將文本限制在第10行和第30行之內。在代碼中,我在IF語句中創建了一個IF語句,以測試變量Y是否等於10或= 30,以便限制屏幕上的文本,但它不起作用。任何幫助?感謝如何編寫代碼來循環更改文本在屏幕上的位置

代碼:

static void Main(string[] args) 
    { 
     Menu(); 
    } 

    static void Menu() 
    { 
     Random random = new Random(); 

     sbyte X = 1; 

     sbyte Y = 20; 

     while (true) 
     { 

      float randomNumber = random.Next(0, 100); 

      if (randomNumber <50) 
      { 
       if (Y >= 10) 
       { 
        Y = Y; 
       } 
       else 
       { 
        Y++; 
       } 

      } 
      else if (randomNumber >50) 
      { 
       if (Y >= 30) 
       { 
        Y = Y; 
       } 
       else 
       { 
        Y--; 
       } 

      } 

      X++; 

      PrintToScreendynamic(X, Y, "-"); 


      Thread.Sleep(200); 

     } 

    } 

    static void PrintToScreendynamic(sbyte X, sbyte Y, string text) 
    { 

     Console.SetCursorPosition(X, Y); 

     Console.Write(text); 

    } 

} 
+0

你有你的,如果聲明稱,如果Y> = 10,則Y = Y。因此,如果Y爲500,Y將始終保持500你還測試Y> =適用於IF聲明的兩個部分。想想你想在這裏實現什麼,並仔細閱讀你的代碼。 – Alex

+1

另外,請不要只是說「我之前發佈過關於此的信息」。我們不想通過以前的帖子來了解你想要得到的幫助。在一篇文章中總結你的整個問題。 SO上的人通常會提供幫助,但是你必須努力向他們提供他們需要的所有信息。 – Alex

+0

您只需點擊帖子底部的[編輯](http://stackoverflow.com/posts/33925081/edit)鏈接,在該標籤下面修改任何缺少的代碼,例如您的第一條評論。 –

回答

0

好吧,我已經運行你的代碼,並把它清理了一下。

評論已包括在內。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
class Program 
{ 
    static void Main(string[] args) { 
     Menu(); 
    } 

    static void Menu() { 

     //The console starts at the top-left corner from point 0,0 (row 0, column 0). 
     //To find the number of columns, use the property Console.BufferWidth. 
     //This returns the number of characters which can be displayed on a single line from left to right. 
     //For example, If the number of columns is 80, the columns are numbered from 0 to 79, so the highest possible value of X is 79. 
     int MaxWidth = Console.BufferWidth - 1; 

     Random random = new Random(); 
     sbyte X = 1; 
     sbyte Y = 20; 
     float randomNumber; 


     /** 
     Don't use a loop which says while(true), or you will have to do tests inside the loop 
     to see where it should end. 
     We know how many columns the console has, so stop the loop when X is too big to increment 
     within that limit. 
     */ 
     while (X < MaxWidth) { 
      randomNumber = random.Next(0, 100); 

      /** 
      You only need to check for a condition that will cause a change. 
      If you have a check which results in Y = Y, you're adding code that won't be run. 
      So, instead of saying if (y >= 10) { Y = Y } else { do something }, 
      flip it around and say if (y <= 10) { do something } 
      * **/ 
      if (randomNumber < 50) { 
       //If Y is greater than or equal to 10, make Y smaller by 1. 
       //This prevents the cursor from moving to a line closer 
       //to the top of the console than Line 10. 
       if (Y >= 10) { 
        Y--; 
       } 
      } else if (randomNumber > 50) { 
       //If Y is less than or equal to 30, make Y largerby 1. 
       //This prevents the cursor from moving to a line closer 
       //to the bottomof the console than Line 30. 
       if (Y <= 30) { 
        Y++; 
       } 
      } 

      X++; 

      PrintToScreendynamic(X, Y, "-"); 
      Thread.Sleep(200); 
     } 
    } 

    static void PrintToScreendynamic(sbyte X, sbyte Y, string text) { 
     Console.SetCursorPosition(X, Y); 
     Console.Write(text); 
    } 
} 

}

+0

我真的很感謝你的幫助Alex,作爲一名學生學習c#的幫助非常受歡迎,但是,我可以請你解釋一下,我怎樣才能限制最大高度,並且可以繪製破折號。我知道你使用了最大數量的列,但我無法限制文本寫入的最高和最低限度。你也使用了MaxWidth,你的意思是MaxHeight – Jhon122

+0

在這種情況下,我使用MaxWidth來表示最右邊的點。控制檯使用點0,0作爲左上角,所以點的最高點可以是0.可以通過使用Console類找到最低點,所以int MaxHeight = Console.BufferHeight - 1.您可以將maxwidth重命名爲任何你喜歡的,但因爲這是控制檯的寬度,我將它命名爲maxwidth。你可以輕鬆地說最遠或最大_X。它絕對不是maxheight - 它控制着右邊緣可以繪製多遠,所以絕對寬度。 – Alex

相關問題