RollDice メソッド実装ガイド
目次
1. 概要
6 面サイコロを 1 回振り、1〜6 の整数を返す RollDice() メソッドを実装します。
2. コード全体
// 初回呼び出し時に 1 度だけ生成され、以降は共有される Random
static readonly Random _rnd = new Random();
// 6 面ダイスを 1 回振り、1〜6 を返す。
static int RollDice()
{
return _rnd.Next(1, 7); // Next(min, maxExclusive) → 1〜6
}
3. 実装ポイント解説
3.1 Random クラスとシード
Random は内部でシード値(種)を用いて疑似乱数系列を生成します。短時間に複数回 new Random() を呼び出すとシードが重複して系列が偏ることがあるため、アプリ全体で 1 インスタンスを共有するのが基本です。
3.2 static フィールド
- 定義位置クラスのボディ内(メソッドの外)に static readonly Random _rnd を宣言。
- ライフサイクルアプリケーション開始〜終了まで 1 度だけ生成・共有される。
- メリット
- 乱数偏りを防げる(シード重複回避)。
- 生成コストを最小化。
- 他クラスからは公開しないためカプセル化が保たれる。
補足 .NET 6 以降であれば Random.Shared というスレッドセーフなシングルトンが用意されていますが、学習用途や Unity の古いランタイムを考慮し、ここでは明示的にフィールドを持つ実装を採用しています。
3.3 Next(1, 7) の意味
Random.Next(minValue, maxValueExclusive) は 上限値を含まない ため、Next(1, 7) とすると 1〜6 が得られます。
4. 使い方例
static void Main()
{
for (int i = 0; i < 10; i++)
{
int eye = RollDice();
Console.WriteLine($"出目: {eye}");
}
}
実行例(抜粋)
出目: 3
出目: 6
出目: 2
...
5. 全体コード
internal class Program
{
// 初回呼び出し時に 1 度だけ生成され、以降は共有される Random
static readonly Random _rnd = new Random();
static int RollDice()
{
return _rnd.Next(1, 7); // Next(min, maxExclusive) → 1〜6
}
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine($"出目: {RollDice()}");
}
}
}
訪問数 11 回, 今日の訪問数 1回
ディスカッション
コメント一覧
まだ、コメントがありません