2016-07-13 8 views
2

私は退屈で、C#で楽しいゲームを書くことに決めました。描画、クリア、更新などがありました。ある部分では、入力。私はプレーヤーがenterを押さずに、すべてのフレームを入力したいと思っています。これまではenterを押す必要がありましたが、何もしません。ここでC# - Consoleフレームごとに入力を取得する方法

は私のコードです:

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

namespace ASCII 
{ 
    public static class Game 
    { 
     static string map = File.ReadAllText("Map.txt"); 
     public static void Draw() 
     { 
      Console.CursorVisible = false; 
      Console.WriteLine(map); 
     } 

     public static void Update() 
     { 
      Clear(); 
      Input(); 
     } 

     public static void Input() 
     { 
      string input = Console.ReadLine(); 

      switch (input) 
      { 
       case "a": 
        //Do something 
        break; 
      } 
     } 

     public static void Clear() 
     { 
      Console.Clear(); 
      Draw(); 
     } 
    } 
} 

あなたはInput()無効に見ることができるように、それはすべてのフレームの入力を取得しますが、私は一度だけ、それを取得したい、moveメソッドまたは私は何かを行います後で実装する。

###################

# #

# @ # #

######## #

# #

はBTW Map.txtこの表示します

# #

# #

# #

# #

# #

# #

###################

+0

あなたは "すべてのフレーム" とはどういう意味ですか?他のキーが押されていない限り、キーをたったの1回押すだけで、あなたの体を動かしたいですか? – HimBromBeere

答えて

3

Console.ReadLineは、入力キーがアプリケーションの種類のモーダルを作り続けるのを待ちます。代わりに、concoleのキーボードイベントを処理する必要があります。したがって、代わりにReadKeyを使用することができます。

var input = Console.ReadKey(true); 

switch (input.Key) 
{ 
    case ConsoleKey.A: 
     //Do something 
     break; 
} 

これを保持するには、ループでこれを実装することができます。ここで重要なのは、次のキーイベントが

int action = 0; 
while(!exit) 
{ 
    // handle the action 
    myPlayer.X += action; // move player left or right depending on the previously pressed key (A or D) 

    if(!Console.KeyAvailable) continue; 
    var input = Console.ReadKey(true); 

    switch (input.Key) 
    { 
     case ConsoleKey.A: 
      action = -1 
      break; 
     case ConsoleKey.D: 
      action = 1 
      break; 
    }  
} 
1

を通過するまで、私は右の質問を理解し、私が行った場合、あなたがキーかどうかを確認するためにConsole.KeyAvailableConsole.ReadKeyを使用することができるかわからない、あなたの現在のアクションを覚えていますそれを読む前に利用可能です。

だから、のようなもの:

public static void Input() 
{ 
    if(!Console.KeyAvailable) return; 
    ConsoleKeyInfo key = Console.ReadKey(true); 

    switch (key.Key) 
    { 
     case ConsoleKey.A: 
     //Do something 
      break; 
    } 
} 
関連する問題