2013-04-16 34 views
0

我有一個方法是用來問一個人想要在Console遊戲中去哪個方式。爲什麼`Console.Read()`繼續跳到另一個地方?

Afformentioned方法:

私有靜態無效dirChoose()

{ 
    Console.SetCursorPosition(0, 7); 
    Console.WriteLine("A mysterious voice says \"Which way will you go?\""); 
    Console.WriteLine("Type"); 
    if (curLeft == false) { Console.WriteLine("(L)eft "); } 
    if (curUp == false) { Console.WriteLine("(U)p  "); } 
    if (curRight == false) { Console.WriteLine("(R)ight "); } 
    if (curDown == false) { Console.WriteLine("(D)own "); } 

    Console.SetCursorPosition(49, 7); 

    userDirInput = Convert.ToChar(Console.Read()); 
    Console.SetCursorPosition(0, 13); 
    Console.Write("read as " + userDirInput); 

     if (userDirInput == 'u' || userDirInput == 'U') { reDir = 1; userDirInput = 'y'; }//up 
    else if (userDirInput == 'd' || userDirInput == 'D') { reDir = 3; userDirInput = 'y'; }//down 
    else if (userDirInput == 'l' || userDirInput == 'L') { reDir = 0; userDirInput = 'y'; }//left 
    else if (userDirInput == 'r' || userDirInput == 'R') { reDir = 2; userDirInput = 'y'; }//right 
    else//anything besides 
    { 
     Console.SetCursorPosition(0, 14); 
     Console.WriteLine("You entered an incorrect direction. Please try again."); 
     Console.SetCursorPosition(rWALL_STOP - 1, 3); 

     doneBool = false; 
     t.Elapsed += right; 
     t.Start(); 

    } 
}//dirChoose() 

在回答的問題: 「你會走哪條路?」用SUPPOSED來讀取輸入的第一個字符。所以你要輸入整個單詞「左」或「右」,那麼它會讀取'l'和'r'。那麼它應該改變一個數字,讓它做它應該做的事情。由於某些奇怪的原因,它在讀完第一個之後跳到第二個,所以它將適當的方法添加到計時器並繼續。

注:

static Timer t = new Timer(16); 
public static char userDirInput { get; set; } 

public static bool curLeft { get; set; } 
public static bool curUp { get; set; } 
public static bool curRight { get; set; } 
public static bool curDown { get; set; } 
public static bool doneBool{ get; set; } 

所以我的問題是「?爲什麼光標跳到第二個字符後的第一次我如何修復它」

回答

0

我不知道我理解你的問題,但你似乎誤解了Console.Read()的行爲。當你調用Console.Read()時,你會得到緩衝區中的下一個字符。如果用戶鍵入「left」,然後點擊「enter」,您將調用控制檯讀取以獲取「l」,然後在緩衝區中剩下5個字符。下一個電話會返回'e',然後'f',然後't',然後'\ r',然後'\ n'。

因此,如果用戶輸入「left \ r \ n」,第二次調用dirChoose()時,它將表現爲應該用於無法識別的輸入。

1

您可以按如下方式閱讀密鑰。向ReadKey()傳遞false值會將輸入的值回顯到屏幕上。

ConsoleKeyInfo cki = Console.ReadKey(false); 
userDirInput = cki.KeyChar; 

代替

userDirInput = Convert.ToChar(Console.Read()); 
+1

+1。但是... ReadKey的參數是倒退的。正如文檔所述,「** true **不顯示按鍵」。我想你想'Console.ReadKey(true)'。 –

+0

@JimMischel:謝謝你指出錯誤。非常感激。 +1 –

+0

剛剛在一分鐘前嘗試過。沒有工作得很好,因爲它每次擊中鍵時都會讀到它(我明白那是它應該做的),但我需要它讀取第一個字母或讀取整個字符串,我想我不會有很多問題。 – joesumbody122

相關問題