【学習】WinFormsで乱数を使ってみよう — 当たりくじ

広告

Windows Forms アプリでは Random クラスを使うことで、

  • サイコロ
  • くじ引き
  • ゲームのダメージ
  • ランダムな選択

などを簡単に作ることができます。

サイコロのチュートリアルでは Next(1, 7) で 1〜6 の値を得ました。今回は 確率 の考え方を使って、当たり / はずれ が出るくじ引きアプリを作ります。

今日作るもの

引く ボタンを押すと

当たり!

または

はずれ…

が表示されます。今回は 30% の確率で当たりが出るようにします。


ソリューションとプロジェクトを作る

サイコロのチュートリアルで作成した RandomSample ソリューションに、新しいプロジェクトを追加します。

  • ソリューションエクスプローラーでソリューションを右クリック → 追加 → 新しいプロジェクト
  • テンプレート: Windows Forms アプリ (.NET Framework)
  • プロジェクト名: Lucky

同じソリューション内に複数のプロジェクトを置くことで、学習の流れを整理できます。作成すると Form1が表示されます。


フォームに配置するコントロール

フォームに次の2つを配置します。

コントロール名前
LabelresultLabel
ButtondrawButton

Label には最初「くじを引いてね」など表示しておくと分かりやすいです。


確率の考え方

Next(10) は 0〜9 のいずれかを返します。10通りの値が同じ確率で出ます。

  • 0, 1, 2 の3つ → 当たり(3/10 = 30%)
  • 3, 4, 5, 6, 7, 8, 9 の7つ → はずれ(7/10 = 70%)

つまり rnd.Next(10) < 3 なら 30% の確率で true になります。


ボタンのイベントを登録する

drawButton をダブルクリックすると drawButton_Click イベントが作成されます。

ここにくじを引く処理を書きます。


完成コード

using System;
using System.Windows.Forms;

namespace Lucky
{
    public partial class Form1 : Form
    {
        Random rnd = new Random();

        public Form1()
        {
            InitializeComponent();
        }

        private void drawButton_Click(object sender, EventArgs e)
        {
            // 0〜9 の乱数。3未満なら当たり(30%)
            if (rnd.Next(10) < 3)
            {
                resultLabel.Text = "当たり!";
            }
            else
            {
                resultLabel.Text = "はずれ…";
            }
        }
    }
}

プログラムの流れ

引くボタンを押す
        ↓
rnd.Next(10) で 0〜9 の乱数を取得
        ↓
3未満なら「当たり!」、それ以外は「はずれ…」
        ↓
resultLabel に表示

重要ポイント

Next(n) は 0〜n-1 を返します。

  • Next(10) → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • Next(10) < 3 → 0, 1, 2 のとき true(30%)

確率を変えるには、

  • 50% 当たり → Next(2) == 0
  • 10% 当たり → Next(10) < 1
  • 25% 当たり → Next(100) < 25

のように、分母と分子を調整します。


発展アイデア

確率の考え方を使うと次のようなものも作れます。

  • 確率を変える(当たり率を上げる / 下げる)
  • 景品を増やす(大当たり / 当たり / はずれ)
  • 連続で外れたら当たり率アップ(ピティ)
  • ガチャ風の演出

乱数と確率はゲームの仕組みの基本です。

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

広告