ゴーゴージャグラー2のシミュレーション(プログラミング編)

前回のコードを応用して、Pythonで「ゴーゴージャグラー2」のスランプグラフを作成してみましょう。


設定ごとの小役・ボーナス確率の設定

ジャグラーのスランプグラフを描画するにあたって、設定が6段階あることを考慮する必要があります。
今回は、ループ処理を用いて、設定値1~6まで変更し、各設定値に対応する小役・ボーナス確率をその都度設定しています。
    # ループ処理
    # 1~6の設定数分ループを回す
    for Setting in range(1,7):

        # 差枚数を入力する変数
        Total = 0

        # 設定ごとの小役・ボーナス確率の設定
        if Setting == 1:
            Replay = 7.29
            Grape = 6.82
            Cherry = 33.7
            BIG = 269.70
            REG = 364.10
        elif Setting == 2:
            Replay = 7.29
            Grape = 6.75
            Cherry = 33.7
            BIG = 268.60
            REG = 336.10
        elif Setting == 3:
            Replay = 7.29
            Grape = 6.70
            Cherry = 33.7
            BIG = 266.40
            REG = 318.10
        elif Setting == 4:
            Replay = 7.29
            Grape = 6.65
            Cherry = 33.7
            BIG = 260.10
            REG = 283.70
        elif Setting == 5:
            Replay = 7.29
            Grape = 6.59
            Cherry = 33.7
            BIG = 255.00
            REG = 255.00
        elif Setting == 6:
            Replay = 7.29
            Grape = 6.53
            Cherry = 33.7
            BIG = 242.70
            REG = 242.70
        else:
            continue

1回転ごとの差枚計算

↑のループ処理の中に、前回作成したループ処理を組み込みます。
前回作成したループ処理を組み込んだコードが以下のコードになります。
def SlumpGraph_calc(loop):
    # 結果用の箱の準備
    Result1 = []
    Result2 = []
    Result3 = []
    Result4 = []
    Result5 = []
    Result6 = []

    # ループ処理
    # 1~6の設定数分ループを回す
    for Setting in range(1,7):

        # 差枚数を入力する変数
        Total = 0

        # 設定ごとの小役・ボーナス確率の設定
        if Setting == 1:
            Replay = 7.29
            Grape = 6.82
            Cherry = 33.7
            BIG = 269.70
            REG = 364.10
        elif Setting == 2:
            Replay = 7.29
            Grape = 6.75
            Cherry = 33.7
            BIG = 268.60
            REG = 336.10
        elif Setting == 3:
            Replay = 7.29
            Grape = 6.70
            Cherry = 33.7
            BIG = 266.40
            REG = 318.10
        elif Setting == 4:
            Replay = 7.29
            Grape = 6.65
            Cherry = 33.7
            BIG = 260.10
            REG = 283.70
        elif Setting == 5:
            Replay = 7.29
            Grape = 6.59
            Cherry = 33.7
            BIG = 255.00
            REG = 255.00
        elif Setting == 6:
            Replay = 7.29
            Grape = 6.53
            Cherry = 33.7
            BIG = 242.70
            REG = 242.70
        else:
            continue

        # 乱数範囲の設定
        Replay範囲 = round(65536 / Replay)
        Grape範囲 = round(65536 / Grape)
        Cherry範囲 = round(65536 / Cherry)
        BIG範囲 = round(65536 / BIG)
        REG範囲 = round(65536 / REG)

        Replay範囲_下 = 0
        Replay範囲_上 = Replay範囲_下 + Replay範囲 - 1
        Grape範囲_下 = Replay範囲_上 + 1
        Grape範囲_上 = Grape範囲_下 + Grape範囲 - 1
        Cherry範囲_下 = Grape範囲_上 + 1
        Cherry範囲_上 = Cherry範囲_下 + Cherry範囲 - 1
        BIG範囲_下 = Cherry範囲_上 + 1
        BIG範囲_上 = BIG範囲_下 + BIG範囲 - 1
        REG範囲_下 = BIG範囲_上 + 1
        REG範囲_上 = REG範囲_下 + REG範囲 - 1

        # ループ処理
        # loopで設定した回転数分まわす
        for j in range(loop):
            # 1回転あたり3枚必要なので、3枚マイナス
            Total = Total - 3

            # 1回転ごとに乱数を生成(0~65535の範囲)
            rand = random.randint(0,65535)

            # 小役orボーナスの当選確認と差枚数の加算
            if Replay範囲_下 <= rand <= Replay範囲_上:
                Total = Total + 3
            elif Grape範囲_下 <= rand <= Grape範囲_上:
                Total = Total + 7
            elif Cherry範囲_下 <= rand <= Cherry範囲_上:
                Total = Total + 2
            elif BIG範囲_下 <= rand <= BIG範囲_上:
                Total = Total + 312
            elif REG範囲_下 <= rand <= REG範囲_上:
                Total = Total + 104
            else:
                # はずれだったら何もしない
                Total = Total

また、各設定ごとの結果をそれぞれ別の変数に保存していきます。
            # 1回転ごとに差枚数を配列に入力(設定毎)
            if Setting == 1:
                Result1.append(Total)
            elif Setting == 2:
                Result2.append(Total)
            elif Setting == 3:
                Result3.append(Total)
            elif Setting == 4:
                Result4.append(Total)
            elif Setting == 5:
                Result5.append(Total)
            elif Setting == 6:
                Result6.append(Total)

        # loopで設定した回数分処理が終わった時
        # 各設定ごとに差枚数を保存
        if Setting == 1:
            Total1 = Total
        elif Setting == 2:
            Total2 = Total
        elif Setting == 3:
            Total3 = Total
        elif Setting == 4:
            Total4 = Total
        elif Setting == 5:
            Total5 = Total
        elif Setting == 6:
            Total6 = Total

今回作成したコード

最後にコード全体です。シミュレーションの設定(試行回数)を行う箇所と、グラフ描画の処理を追加しています。
# coding: UTF-8
import random
import matplotlib.pyplot as plt

def SlumpGraph_calc(loop):
    # 結果用の箱の準備
    Result1 = []
    Result2 = []
    Result3 = []
    Result4 = []
    Result5 = []
    Result6 = []

    # ループ処理
    # 1~6の設定数分ループを回す
    for Setting in range(1,7):

        # 差枚数を入力する変数
        Total = 0

        # 設定ごとの小役・ボーナス確率の設定
        if Setting == 1:
            Replay = 7.29
            Grape = 6.82
            Cherry = 33.7
            BIG = 269.70
            REG = 364.10
        elif Setting == 2:
            Replay = 7.29
            Grape = 6.75
            Cherry = 33.7
            BIG = 268.60
            REG = 336.10
        elif Setting == 3:
            Replay = 7.29
            Grape = 6.70
            Cherry = 33.7
            BIG = 266.40
            REG = 318.10
        elif Setting == 4:
            Replay = 7.29
            Grape = 6.65
            Cherry = 33.7
            BIG = 260.10
            REG = 283.70
        elif Setting == 5:
            Replay = 7.29
            Grape = 6.59
            Cherry = 33.7
            BIG = 255.00
            REG = 255.00
        elif Setting == 6:
            Replay = 7.29
            Grape = 6.53
            Cherry = 33.7
            BIG = 242.70
            REG = 242.70
        else:
            continue

        # 乱数範囲の設定
        Replay範囲 = round(65536 / Replay)
        Grape範囲 = round(65536 / Grape)
        Cherry範囲 = round(65536 / Cherry)
        BIG範囲 = round(65536 / BIG)
        REG範囲 = round(65536 / REG)

        Replay範囲_下 = 0
        Replay範囲_上 = Replay範囲_下 + Replay範囲 - 1
        Grape範囲_下 = Replay範囲_上 + 1
        Grape範囲_上 = Grape範囲_下 + Grape範囲 - 1
        Cherry範囲_下 = Grape範囲_上 + 1
        Cherry範囲_上 = Cherry範囲_下 + Cherry範囲 - 1
        BIG範囲_下 = Cherry範囲_上 + 1
        BIG範囲_上 = BIG範囲_下 + BIG範囲 - 1
        REG範囲_下 = BIG範囲_上 + 1
        REG範囲_上 = REG範囲_下 + REG範囲 - 1

        # ループ処理
        # loopで設定した回転数分まわす
        for j in range(loop):
            # 1回転あたり3枚必要なので、3枚マイナス
            Total = Total - 3

            # 1回転ごとに乱数を生成(0~65535の範囲)
            rand = random.randint(0,65535)

            # 小役orボーナスの当選確認と差枚数の加算
            if Replay範囲_下 <= rand <= Replay範囲_上:
                Total = Total + 3
            elif Grape範囲_下 <= rand <= Grape範囲_上:
                Total = Total + 7
            elif Cherry範囲_下 <= rand <= Cherry範囲_上:
                Total = Total + 2
            elif BIG範囲_下 <= rand <= BIG範囲_上:
                Total = Total + 312
            elif REG範囲_下 <= rand <= REG範囲_上:
                Total = Total + 104
            else:
                # はずれだったら何もしない
                Total = Total

            # 1回転ごとに差枚数を配列に入力(設定毎)
            if Setting == 1:
                Result1.append(Total)
            elif Setting == 2:
                Result2.append(Total)
            elif Setting == 3:
                Result3.append(Total)
            elif Setting == 4:
                Result4.append(Total)
            elif Setting == 5:
                Result5.append(Total)
            elif Setting == 6:
                Result6.append(Total)

        # loopで設定した回数分処理が終わった時
        # 各設定ごとに差枚数を保存
        if Setting == 1:
            Total1 = Total
        elif Setting == 2:
            Total2 = Total
        elif Setting == 3:
            Total3 = Total
        elif Setting == 4:
            Total4 = Total
        elif Setting == 5:
            Total5 = Total
        elif Setting == 6:
            Total6 = Total

    # 結果をグラフで表示
    if bool(Result1):
        plt.plot(Result1, label="Setting:1")
    if bool(Result2):
        plt.plot(Result2, label="Setting:2")
    if bool(Result3):
        plt.plot(Result3, label="Setting:3")
    if bool(Result4):
        plt.plot(Result4, label="Setting:4")
    if bool(Result5):
        plt.plot(Result5, label="Setting:5")
    if bool(Result6):
        plt.plot(Result6, label="Setting:6")
    plt.grid(True)
    plt.legend()
    plt.show()
    
if __name__ == "__main__":
    # 試行回数の設定
    loop = 100000

    SlumpGraph_calc(loop)

シミュレーション結果の確認

今回作成したコードで試しに、8000回転(1日回したとき)の結果を出力してみましょう。
設定6が最も差枚数が多いのはわかりますが、設定1もプラス差枚を叩き出していますね。
高設定域の設定4はかなりのマイナス差枚になっています。


続いて、10倍の10日回したときの結果がこちら。
だいぶ高設定と低設定の差がはっきりしてきましたが、細かい設定は差枚数だけではわからなさそうです。

さらに10倍の100日回したときの結果がこちら。
高設定域は細かい設定まで綺麗に別れていますが、低設定域の設定2と設定3は100日回しても判断がつかないレベルです。


にほんブログ村 スロットブログ スロット情報へ
にほんブログ村

コメント