【C#実践】whileループで入力チェック!「数当てゲーム」を作ってみよう

プログラムを操作するのは、必ずしも開発者の想定通りに入力してくれるユーザーばかりではありません。無効な値が入力された際に、エラーで終了するのではなく、「正しい値が入力されるまで、もう一度入力を促す」処理は、質の高いアプリケーションを作る上で不可欠です。

この記事では、whileループとフラグというテクニックを使い、ユーザーからの入力をチェックする実践的な「数当てゲーム」の作成を通して、繰り返し処理をさらに深く学んでいきましょう。


目次

「フラグ」を使ったwhileループの制御

プログラムにおいてフラグとは、特定の状態を記録しておくためのbool型(true/false)変数のことを指します。ループ処理においては、「ループを終了すべきか、続けるべきか」という状態を管理するためによく使われます。

アナロジー: 旗揚げゲームの旗のようなものです。旗が上がっている(false)間はゲームを続け、旗が下がったら(trueになったら)ゲームを終了する、といったイメージでループを制御します。

基本的な使い方

// 1. ループを続けるかどうかを管理するフラグを用意(最初は続けるのでfalse)
bool isLoopFinished = false;

// 2. フラグがfalseである間、ループを続ける
while (isLoopFinished == false)
{
    Console.WriteLine("ループ内の処理を実行中...");

    // 3. 何らかの条件を満たした場合...
    if (/* ここに終了条件を書く */)
    {
        // 4. フラグをtrueに切り替える
        isLoopFinished = true;
    }
}

Console.WriteLine("ループが終了しました。");

whileの条件式が isLoopFinished == false のため、フラグがtrueになった瞬間に条件を満たさなくなり、ループが終了します。


実践:数当てゲームを作ろう

それでは、whileループとフラグ制御、そして前回学んだ入力判定を組み合わせて、コンピュータが考えた数字を当てるまで終わらない「数当てゲーム」を作成します。

ゲームの設計

  1. プログラムが、1から20までのランダムな正解の数字を一つ決める。
  2. 「正解しましたか?」という状態を管理するフラグ(isGuessedCorrectly)を用意する。
  3. フラグがfalseである間、以下の処理をループする。 a. ユーザーに数字の入力を促す。 b. 入力された値が有効な数字かをチェックする。 c. 数字であれば、正解の数字と比べて「もっと高い」か「もっと低い」かヒントを出す。 d. 数字が正解と一致すれば、お祝いのメッセージを表示し、フラグをtrueに切り替えてループを終了させる。

完成コード

using System;

// 1. 正解となるランダムな数字を生成
Random random = new Random();
int answer = random.Next(1, 21); // 1から20までの整数

Console.WriteLine("数当てゲームへようこそ!");
Console.WriteLine("1から20までの数字を当ててください。");

// 2. 正解したかどうかを管理するフラグを用意
bool isGuessedCorrectly = false;

// 3. 正解するまでループ
while (isGuessedCorrectly == false)
{
    Console.Write("あなたの予想: "); // WriteLineではなくWriteで改行しない
    string input = Console.ReadLine();

    int guess;
    // 3-b. 入力が有効な数字かチェック
    if (int.TryParse(input, out guess) == false)
    {
        Console.WriteLine("エラー:半角数字で入力してください。");
        continue; // 今回の処理をスキップしてループの先頭に戻る
    }

    // 3-c. 正解と比較してヒントを出す
    if (guess > answer)
    {
        Console.WriteLine("ヒント:もっと低い数字です。");
    }
    else if (guess < answer)
    {
        Console.WriteLine("ヒント:もっと高い数字です。");
    }
    else // guess == answer
    {
        // 3-d. 正解した場合
        Console.WriteLine("おめでとうございます!正解です!");
        // フラグをtrueにしてループを終了させる
        isGuessedCorrectly = true;
    }
}

Console.WriteLine("ゲームを終了します。");
Console.ReadLine();

まとめ

今回は、whileループとフラグを使った実践的なプログラミングを学びました。

  1. whileループは、「特定の条件を満たすまで処理を繰り返す」入力チェックのような場面で非常に有効。
  2. bool型のフラグ変数を使うことで、ループを続けるか終了するかの状態を明確に管理できる。
  3. int.TryParse()continue をループ内で活用することで、無効な入力にも対応できる堅牢なプログラムが作れる。

この「フラグでループを制御し、条件を満たしたらフラグを切り替えてループを抜ける」というパターンは、ゲーム開発だけでなく様々なアプリケーションで使われる基本的なテクニックです。ぜひこの考え方をマスターしてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次