【C#入門】サイコロを作って学ぶRandomとwhile文|Enterキーで1回ずつ実行

広告

C#で「1〜6の数字をランダムに表示するサイコロ」を作りながら、RandomNextwhileConsole.ReadLineの役割を学びます。短いプログラムですが、乱数・繰り返し・入力待ちという大切な基本が詰まっています。

この記事のゴール

  • 1〜6の数字をランダムに表示できる
  • Next(1, 7)で「7」が出ない理由を説明できる
  • Enterキーを押すたびに1回進む仕組みが分かる
  • while(true)を安全に止められる

完成するプログラム

using System;

class Program
{
    static void Main()
    {
        Random rand = new Random();

        while (true)
        {
            int dice = rand.Next(1, 7);
            Console.WriteLine($"サイコロの目: {dice}");
            Console.WriteLine("Enterキーでもう一度振ります");
            Console.ReadLine();
        }
    }
}

実行すると1〜6のどれかが表示されます。Enterキーを押すと、次のサイコロが振られます。

処理の流れを図で確認しよう

① Randomを準備
new Random()
② 1〜6から1つ選ぶ
rand.Next(1, 7)
③ 数字を画面に表示
Console.WriteLine(dice)
④ Enterキーを待つ
Console.ReadLine()
↖ ②へ戻る

1行ずつ読み解こう

Random rand = new Random();

Randomは、ランダムな数(乱数)を作るためのクラスです。new Random()で乱数を作る道具を用意し、その道具をrandという変数に入れています。

Randomはループの外で1回だけ作るのが基本です。ループの中で何度も作り直す必要はありません。

int dice = rand.Next(1, 7);

Next(1, 7)は、1以上・7未満の整数を1つ返します。つまり、出る可能性があるのは1、2、3、4、5、6です。

重要:7は含まれません
Next(最小値, 最大値)の最大値は範囲に含まれません。サイコロで1〜6を出したいので、最大値には6ではなく7を指定します。
書き方 出る数字
rand.Next(1, 7) 1〜6
rand.Next(0, 10) 0〜9
rand.Next(5, 11) 5〜10

Console.WriteLine(dice);

変数diceに入った数字をコンソール画面へ表示します。補足付きで表示したい場合は、Console.WriteLine($"サイコロの目: {dice}");のように書けます。

Console.ReadLine();

Console.ReadLine()は、キーボードから文字が入力されてEnterキーが押されるまで処理を待ちます。この「入力待ち」があるため、サイコロは高速で連続表示されず、Enterキーを押すたびに1回ずつ進みます。

入力した文字を使わない場合でも、ここでは「一時停止」の役割として利用できます。

while (true) はどういう意味?

whileは、条件がtrueの間、同じ処理を繰り返します。while (true)は条件が常に正しいため、何もしなければ終わらない無限ループです。

実行中のプログラムを止める方法

Visual Studioやターミナルで実行している場合は、次の方法で停止できます。

  • Visual Studio:上部の「デバッグの停止」ボタン(赤い四角)を押す
  • コンソール/ターミナル:Ctrl + Cを押す

qを入力したら終了するように改良

授業では、終了方法をプログラムに組み込むと安全です。次の例では、qを入力してEnterキーを押すとbreakでループを抜けます。

Random rand = new Random();

while (true)
{
    int dice = rand.Next(1, 7);
    Console.WriteLine($"サイコロの目: {dice}");
    Console.Write("Enterでもう一度、q + Enterで終了: ");

    string? input = Console.ReadLine();

    if (input == "q")
    {
        break;
    }
}

Console.WriteLine("サイコロを終了しました。");
授業での確認ポイント

  1. 最初にRandomを1回だけ作っているか
  2. Next(1, 7)で1〜6が出ることを確認したか
  3. Console.ReadLine()でEnter待ちになるか
  4. qを入力するとbreakで終了するか

よくある間違い

Next(1, 6) と書いてしまう

最大値の6は含まれないため、出る数字は1〜5です。6面サイコロならNext(1, 7)と書きます。

Console.ReadLine()を書かない

プログラムは待たずに繰り返すため、数字が非常に速く表示され続けます。1回ずつ確認したい場合は入力待ちを入れます。

止め方を知らずにwhile(true)を使う

無限ループ自体が間違いとは限りませんが、停止ボタン、Ctrl + C、またはbreakなど、終了方法もセットで覚えましょう。

練習課題

  1. 10面サイコロ:1〜10が出るようにNextの引数を変更してください。
  2. 2個のサイコロ:サイコロを2回振り、2つの目と合計を表示してください。
  3. 当たり判定:6が出たときだけ「当たり!」と表示してください。
  4. 回数制限:whileforを使い、5回振ったら自動で終了させてください。
  5. 終了キーを増やす:大文字のQでも終了できるようにしてください。
練習2:2個のサイコロ(解答例)
Random rand = new Random();

int dice1 = rand.Next(1, 7);
int dice2 = rand.Next(1, 7);

Console.WriteLine($"1個目: {dice1}");
Console.WriteLine($"2個目: {dice2}");
Console.WriteLine($"合計: {dice1 + dice2}");

まとめ

  • Randomはランダムな数を作るためのクラス
  • rand.Next(1, 7)は1以上7未満、つまり1〜6を返す
  • Console.ReadLine()がEnterキーを押すまで処理を待つ
  • while(true)は無限に繰り返すため、停止方法やbreakを用意する

このサイコロを改造すると、くじ引き、じゃんけん、モンスターのダメージ計算などにも発展できます。まずは数字の範囲や表示方法を変えて、動きを確かめてみましょう。

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

広告