【学習】WinFormsで乱数を使ってみよう — 当たりくじ
Windows Forms アプリでは Random クラスを使うことで、
- サイコロ
- くじ引き
- ゲームのダメージ
- ランダムな選択
などを簡単に作ることができます。
サイコロのチュートリアルでは Next(1, 7) で 1〜6 の値を得ました。今回は 確率 の考え方を使って、当たり / はずれ が出るくじ引きアプリを作ります。
今日作るもの
引く ボタンを押すと
当たり!
または
はずれ…
が表示されます。今回は 30% の確率で当たりが出るようにします。
ソリューションとプロジェクトを作る
サイコロのチュートリアルで作成した RandomSample ソリューションに、新しいプロジェクトを追加します。
- ソリューションエクスプローラーでソリューションを右クリック → 追加 → 新しいプロジェクト
- テンプレート: Windows Forms アプリ (.NET Framework)
- プロジェクト名: Lucky
同じソリューション内に複数のプロジェクトを置くことで、学習の流れを整理できます。作成すると Form1が表示されます。
フォームに配置するコントロール
フォームに次の2つを配置します。
| コントロール | 名前 |
|---|---|
| Label | resultLabel |
| Button | drawButton |
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, 9Next(10) < 3→ 0, 1, 2 のとき true(30%)
確率を変えるには、
- 50% 当たり →
Next(2) == 0 - 10% 当たり →
Next(10) < 1 - 25% 当たり →
Next(100) < 25
のように、分母と分子を調整します。
発展アイデア
確率の考え方を使うと次のようなものも作れます。
- 確率を変える(当たり率を上げる / 下げる)
- 景品を増やす(大当たり / 当たり / はずれ)
- 連続で外れたら当たり率アップ(ピティ)
- ガチャ風の演出
乱数と確率はゲームの仕組みの基本です。




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