mugaxのなんでも情報局

いろんな分野について発信していきます。

100連ガチャを1000回やってみた!

スマホゲームのガチャに課金してしまい、後悔したことがある人は世の中にたくさんいる。中には課金しすぎて借金をしたり、家族との関係が悪化して取り返しのつかないことになった人さえいる。

おそらく、そういう人たちはガチャに課金してどれぐらいのリターンがあるのか計算していないのだろう。だから、当たりが出るまで課金し続けてしまうのだ。

欲しいキャラが出る確率が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割以上の確率で起きるのだ。

こういうことを知っていれば、ガチャに課金する前に立ち止まれるだろう。