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回

C#,メソッド

Posted by hidepon