Consoleアプリでのキー入力と分岐処理の実装方法

プログラミング初心者向けに、C# コンソールアプリでのキー入力待機と条件分岐の基本を解説します。ゲーム開発のプレイヤー操作や、対話型アプリのメニュー選択など、あらゆる場面で応用できるシンプル且つ重要なテクニックです。


前提知識

  • C# の基本文法(変数宣言、if 文)
  • System.Console 名前空間の利用方法

サンプルコード全体

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Dキーでプレイヤー1を操作、Sキーでプレイヤー2を操作します。");
        
        // キー入力を待機し、押されたキーを取得
        var key = Console.ReadKey(intercept: true).Key;
        
        // 入力されたキーによって処理を切り分け
        if (key == ConsoleKey.D)
        {
            // プレイヤー1の移動・表示・衝突判定
            Console.WriteLine("プレイヤー1が右に移動しました。");
        }
        else if (key == ConsoleKey.S)
        {
            // プレイヤー2の処理
            Console.WriteLine("プレイヤー2が右に移動しました。");
        }
        else
        {
            // それ以外のキー入力時のフォールバック
            Console.WriteLine("有効なキーが押されませんでした。");
        }
    }
}

コード行ごとの解説

var key = Console.ReadKey(intercept: true).Key;
  • Console.ReadKey():キー入力があるまで処理を一時停止
  • intercept: true:押されたキーを画面に表示しない
  • .Key:ConsoleKeyInfo から ConsoleKey 列挙体だけを抽出
if (key == ConsoleKey.D)
  • 入力されたキーが D の場合のみ、ブロック内の処理を実行
  • ゲームで「プレイヤー1の右移動」や、特定メニューの選択などに対応
else if (key == ConsoleKey.S)
  • D 以外で、S が押された場合の処理
  • 「プレイヤー2の右移動」など別のアクションを担当
else
  • D/S 以外のキー入力時に実行
  • 無効な入力へのフォールバックやヘルプ表示に利用

ポイントと応用

  • intercept: true の活用画面へのキー入力表示を抑制できるため、ログが見やすくなる。
  • ConsoleKey 列挙体ConsoleKey.A ~ ConsoleKey.Z や数字キー、矢印キーなど多彩に用意。
  • 複数キーの同時検知if (key == ConsoleKey.A || key == ConsoleKey.LeftArrow) のように組み合わせ可能。
  • ループと組み合わせた継続待機
while (true)
{
    var k = Console.ReadKey(intercept: true).Key;
    if (k == ConsoleKey.Escape) break;
    // 他の処理
}
  • ループを抜けるまでキー入力を繰り返し監視できる。

まとめ

  • Console.ReadKey(intercept: true).Key でキー入力を待機し、表示せずに取得
  • if/else if/else で押されたキーに応じた処理を分岐
  • 複数キー判定やループと組み合わせることで、より高度な操作制御も実現可能

この仕組みを基礎に、簡易ゲームや対話型コンソールツールなど、多彩なアプリケーションを作成してみましょう。

訪問数 28 回, 今日の訪問数 28回

C#

Posted by hidepon