【C#入門】サイコロを作って学ぶRandomとwhile文|Enterキーで1回ずつ実行
C#で「1〜6の数字をランダムに表示するサイコロ」を作りながら、Random、Next、while、Console.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キーを押すと、次のサイコロが振られます。
処理の流れを図で確認しよう
new Random()rand.Next(1, 7)Console.WriteLine(dice)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です。
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("サイコロを終了しました。");
- 最初に
Randomを1回だけ作っているか Next(1, 7)で1〜6が出ることを確認したかConsole.ReadLine()でEnter待ちになるかqを入力するとbreakで終了するか
よくある間違い
Next(1, 6) と書いてしまう
最大値の6は含まれないため、出る数字は1〜5です。6面サイコロならNext(1, 7)と書きます。
Console.ReadLine()を書かない
プログラムは待たずに繰り返すため、数字が非常に速く表示され続けます。1回ずつ確認したい場合は入力待ちを入れます。
止め方を知らずにwhile(true)を使う
無限ループ自体が間違いとは限りませんが、停止ボタン、Ctrl + C、またはbreakなど、終了方法もセットで覚えましょう。
練習課題
- 10面サイコロ:1〜10が出るように
Nextの引数を変更してください。 - 2個のサイコロ:サイコロを2回振り、2つの目と合計を表示してください。
- 当たり判定:6が出たときだけ「当たり!」と表示してください。
- 回数制限:
whileやforを使い、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を用意する
このサイコロを改造すると、くじ引き、じゃんけん、モンスターのダメージ計算などにも発展できます。まずは数字の範囲や表示方法を変えて、動きを確かめてみましょう。





ディスカッション
コメント一覧
まだ、コメントがありません