2016-10-09 12 views
2

私は学校の割り当てのためにC#でテキストアドベンチャーを書いています。今、この作品が、私はプレイヤーが入力したキーを打つとき、文は即座にコンソール上で入力されていることを実現したいコンソールアプリケーションのテキスト出力中にキーを押すと反応します

public static void Zin (string zin) 
    { 

     foreach (char c in zin) 
     { 
      Console.Write(c); 
      Thread.Sleep(50); 
     } 

は、私はこのような文章を入力する機能を作りました。

私はこれを行う方法がわかりません。私はforeachループでwhileループを使用してみましたが、それは入力がヒットしたことを確認してから文章を出力しますが、動作しません。

ありがとうございます!

答えて

1

Console.Read*のいずれの方法でも読み取られていないキーが押されているかどうかを調べるには、Console.KeyAvailableプロパティを使用できます。

キーを押した場合は、ループ内で待機するのをスキップします。ループの後、ループ中に押されたすべてのキーを読み取って、後でConsole.Read*を使用したときに返されないようにします。

public static void Zin(string zin) 
{ 
    foreach (char c in zin) 
    { 
      Console.Write(c); 

      // Only wait when no key has been pressed 
      if (!Console.KeyAvailable) 
      { 
       Thread.Sleep(50); 
      } 
    } 

    // When keys have been pressed during our string output, read all of them, so they are not used for the following input 
    while (Console.KeyAvailable) 
    { 
      Console.ReadKey(true); 
    } 
} 

は、最初にすべてのあなたの答えにもListen for key press in .NET console app

+0

感謝を参照してください!しかし、まだ動作していないようです。 Console.KeyAvailable関数は正確に何をしますか? –

+0

何がうまくいかないのですか?私はコードでこれをテストしました。答えには、Console.KeyAvailableのドキュメントへのリンクが含まれています。テキストをクリックするだけでドキュメントに移動できます。 – NineBerry

+0

私のコードでは、「入力」キーを押しても何も起こりません。コンソールは文章を手紙で書いています –

関連する問題