スマホゲームのガチャに課金してしまい、後悔したことがある人は世の中にたくさんいる。中には課金しすぎて借金をしたり、家族との関係が悪化して取り返しのつかないことになった人さえいる。
おそらく、そういう人たちはガチャに課金してどれぐらいのリターンがあるのか計算していないのだろう。だから、当たりが出るまで課金し続けてしまうのだ。
欲しいキャラが出る確率が1パーセントのガチャがあるとする。100回引いた場合、お目当てのキャラが出る可能性はどれくらいなのか。高校数学を勉強していれば計算で求めることはできるが、体感として知るには実際にガチャを引いてみるのがいい。
そこで、100連ガチャを1000回やってみることにする。ただし、課金はしない。100連ガチャを1000回やるプログラムを作ってシミュレーションしてみるのだ。
今回はVBScriptで作った。
Option Explicit
Const rndMin = 1
Const rndMax = 100
'当選確率(%)
Const Rate = 1
Dim i
Dim tryCnt
Dim winCnt
Dim loseCnt
Dim arrResults(100, 0)
'回数格納配列初期化
For i = Lbound(arrResults, 1) To Ubound(arrResults, 1)
arrResults(winCnt, 0) = 0
Next
Randomize
'1000回挑戦する
For tryCnt = 1 To 1000
'当たり回数、はずれ回数をリセット
winCnt = 0
loseCnt = 0
'100連ガチャ
for i = 1 To 100
If Int((rndMax - rndMin + 1) * Rnd + rndMin) <= Rate Then
winCnt = winCnt + 1
Else
loseCnt = loseCnt + 1
End If
Next
'当たり枚数ごとの回数をカウント
arrResults(winCnt, 0) = arrResults(winCnt, 0) + 1
Next
'表示用文字列作成
Dim dispStr
dispStr = "当選確率" & Rate & " %の100連ガチャで当たりは何枚出るのか?" & vbCrlf
dispstr = dispStr & "100連ガチャを1000回やってみた" & vbCrlf & vbCrlf
dispstr = dispStr & "枚数" & vbTab & "回数" & vbCrlf
For i = Lbound(arrResults, 1) To Ubound(arrResults, 1)
'当たり枚数が0回ではないものだけ表示
If arrResults(i, 0) > 0 Then
dispStr = dispStr & i & vbTab & arrResults(i, 0) & vbCrlf
End IF
Next
'表示
MsgBox dispStr, , "シミュレーション結果"
ウインドウズ環境の人は、このコードをコピーしてメモ帳に貼り付け、100連ガチャ.vbsというファイル名で保存すれば、ダブルクリックして実行できる。
シミュレーション結果を見ればわかる通り、当選確率1パーセントの100連ガチャでは、1枚も当たらないことが3割以上の確率で起きるのだ。
こういうことを知っていれば、ガチャに課金する前に立ち止まれるだろう。