マイジャグラーⅢのシミュレータ作成

マイジャグラーⅢの設定判別ツール検証用にマイジャグラーⅢのシミュレータを作成していきます。
基本的には以前作成したゴーゴージャグラー2のスランプグラフ作成ツールに改良を加える形です。

設定値の定義

まずは、設定値の定義から。
設定判別ツールに用いた配列にリプレイ確率を追加しています。
(設定判別にリプレイは不要ですが、シミュレーションには必要です。)
    # 設定ごとの小役・ボーナス確率の設定
    header = ['Machine', 'Setting', 'Reaplay', 'Cherry', 'Grape', 'BB_T', 'BB_Ch', 'RB_T', 'RB_Ch']
    set1 = ['MyJug3', '1', '7.29', '36.028', '6.35', '402', '1456.3', '668.7', '1213.6']
    set2 = ['MyJug3', '2', '7.29', '35.949', '6.289', '397.1', '1394.3', '528.5', '1170.2']
    set3 = ['MyJug3', '3', '7.29', '34.693', '6.25', '383.2', '1337.4', '496.4', '1092.2']
    set4 = ['MyJug3', '4', '7.29', '33.522', '6.23', '372.3', '1260.3', '409.6', '1024']
    set5 = ['MyJug3', '5', '7.29', '33.402', '6.179', '352.3', '1213.6', '390.1', '963.7']
    set6 = ['MyJug3', '6', '7.29', '33.233', '6.071', '334.3', '1170.2', '334.3', '862.3']

    SetData = [header, set1, set2, set3, set4, set5, set6]
これで↑の配列を参照することで、各設定値での役の確率を持ってこれます。

乱数範囲の設定

次に乱数範囲の設定です。
例えばリプレイの場合、以下のような形でリプレイ確率を配列から持ってきた上で、パチンコの乱数範囲である0~65535の中にリプレイに該当する範囲を指定します。
SetData[設定][2]の[設定]の部分は、設定値を入れる変数にしています。
また、今回は役の成立回数も知りたいので、カウント用の変数も初期化しておきます。
    リプレイ = float(SetData[設定][2])
    リプレイ範囲 = round(65536 / リプレイ)
    リプレイ範囲_下 = 0
    リプレイ範囲_上 = リプレイ範囲_下 + リプレイ範囲 - 1
    
    リプレイ回数 = 0

1回転ごとの結果を算出

ここで、回転数分for文を回していくのですが、前回とは違い、各役の差枚数を加算する時に役の成立回数もカウントしていきます。
    # ループ処理
    # loopで設定した回転数分まわす
    for j in range(loop):
        # 1回転あたり3枚必要なので、3枚マイナス
        Total = Total - 3

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

        # 小役orボーナスの当選確認と差枚数の加算
        if リプレイ範囲_下 <= rand <= リプレイ範囲_上:
            Total = Total + 3
            リプレイ回数 = リプレイ回数 + 1

今回作成したコード

最後に、こちらが今回作成したコードです。
print文で定期的に成立役の回数を出力できるような構成にしています。
# coding: UTF-8
import random
import matplotlib.pyplot as plt

def SlumpGraph_calc(設定, loop, 区切り回数):
    # 設定ごとの小役・ボーナス確率の設定
    header = ['Machine', 'Setting', 'Reaplay', 'Cherry', 'Grape', 'BB_T', 'BB_Ch', 'RB_T', 'RB_Ch']
    set1 = ['MyJug3', '1', '7.29', '36.028', '6.35', '402', '1456.3', '668.7', '1213.6']
    set2 = ['MyJug3', '2', '7.29', '35.949', '6.289', '397.1', '1394.3', '528.5', '1170.2']
    set3 = ['MyJug3', '3', '7.29', '34.693', '6.25', '383.2', '1337.4', '496.4', '1092.2']
    set4 = ['MyJug3', '4', '7.29', '33.522', '6.23', '372.3', '1260.3', '409.6', '1024']
    set5 = ['MyJug3', '5', '7.29', '33.402', '6.179', '352.3', '1213.6', '390.1', '963.7']
    set6 = ['MyJug3', '6', '7.29', '33.233', '6.071', '334.3', '1170.2', '334.3', '862.3']

    SetData = [header, set1, set2, set3, set4, set5, set6]

    # 結果用の箱の準備
    Result = []

    # ループ処理
    # 差枚数を入力する変数
    Total = 0

    リプレイ = float(SetData[設定][2])
    チェリー = float(SetData[設定][3])
    ぶどう = float(SetData[設定][4])
    単独BB = float(SetData[設定][5])
    チェリーBB = float(SetData[設定][6])
    単独RB = float(SetData[設定][7])
    チェリーRB = float(SetData[設定][8])

    # 乱数範囲の設定
    リプレイ範囲 = round(65536 / リプレイ)
    チェリー範囲 = round(65536 / チェリー)
    ぶどう範囲 = round(65536 / ぶどう)
    単独BB範囲 = round(65536 / 単独BB)
    チェリーBB範囲 = round(65536 / チェリーBB)
    単独RB範囲 = round(65536 / 単独RB)
    チェリーRB範囲 = round(65536 / チェリーRB)

    リプレイ範囲_下 = 0
    リプレイ範囲_上 = リプレイ範囲_下 + リプレイ範囲 - 1
    チェリー範囲_下 = リプレイ範囲_上 + 1
    チェリー範囲_上 = チェリー範囲_下 + チェリー範囲 - 1
    ぶどう範囲_下 = チェリー範囲_上 + 1
    ぶどう範囲_上 = ぶどう範囲_下 + ぶどう範囲 - 1
    単独BB範囲_下 = ぶどう範囲_上 + 1
    単独BB範囲_上 = 単独BB範囲_下 + 単独BB範囲 - 1
    チェリーBB範囲_下 = 単独BB範囲_上 + 1
    チェリーBB範囲_上 = チェリーBB範囲_下 + チェリーBB範囲 - 1
    単独RB範囲_下 = チェリーBB範囲_上 + 1
    単独RB範囲_上 = 単独RB範囲_下 + 単独RB範囲 - 1
    チェリーRB範囲_下 = 単独RB範囲_上 + 1
    チェリーRB範囲_上 = チェリーRB範囲_下 + チェリーRB範囲 - 1

    # 小役の出現個数カウント用
    リプレイ回数 = 0
    チェリー回数 = 0
    ぶどう回数 = 0
    単独BB回数 = 0
    チェリーBB回数 = 0
    単独RB回数 = 0
    チェリーRB回数 = 0

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

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

        # 小役orボーナスの当選確認と差枚数の加算
        if リプレイ範囲_下 <= rand <= リプレイ範囲_上:
            Total = Total + 3
            リプレイ回数 = リプレイ回数 + 1
        elif チェリー範囲_下 <= rand <= チェリー範囲_上:
            Total = Total + 2
            チェリー回数 = チェリー回数 + 1
        elif ぶどう範囲_下 <= rand <= ぶどう範囲_上:
            Total = Total + 7
            ぶどう回数 = ぶどう回数 + 1
        elif 単独BB範囲_下 <= rand <= 単独BB範囲_上:
            Total = Total + 312
            単独BB回数 = 単独BB回数 + 1
        elif チェリーBB範囲_下 <= rand <= チェリーBB範囲_上:
            Total = Total + 312
            チェリーBB回数 = チェリーBB回数 + 1
        elif 単独RB範囲_下 <= rand <= 単独RB範囲_上:
            Total = Total + 104
            単独RB回数 = 単独RB回数 + 1
        elif チェリーRB範囲_下 <= rand <= チェリーRB範囲_上:
            Total = Total + 104
            チェリーRB回数 = チェリーRB回数 + 1
        else:
            # はずれだったら何もしない
            Total = Total

        # 1回転ごとに差枚数を配列に入力(設定毎)
        Result.append(Total)

        if (j + 1) % 区切り回数 == 0:
            # 小役・ボーナス回数を表示
            print(j + 1, "回転")
            if チェリー回数 == 0:
                print("チェリー回数:", チェリー回数, "(1 / ", チェリー回数, ")")
            else:
                print("チェリー回数:", チェリー回数, "(1 / ", round((j + 1) / チェリー回数, 2), ")")
            if ぶどう回数 == 0:
                print("ぶどう回数:", ぶどう回数, "(1 / ", ぶどう回数, ")")
            else:
                print("ぶどう回数:", ぶどう回数, "(1 / ", round((j + 1) / ぶどう回数, 2), ")")
            if 単独BB回数 == 0:
                print("単独BB回数:", 単独BB回数, "(1 / ", 単独BB回数, ")")
            else:
                print("単独BB回数:", 単独BB回数, "(1 / ", round((j + 1) / 単独BB回数, 1), ")")
            if チェリーBB回数 == 0:
                print("チェリーBB回数:", チェリーBB回数, "(1 / ", チェリーBB回数, ")")
            else:
                print("チェリーBB回数:", チェリーBB回数, "(1 / ", round((j + 1) / チェリーBB回数, 1), ")")
            if 単独RB回数 == 0:
                print("単独RB回数:", 単独RB回数, "(1 / ", 単独RB回数, ")")
            else:
                print("単独RB回数:", 単独RB回数, "(1 / ", round((j + 1) / 単独RB回数, 1), ")")
            if チェリーRB回数 == 0:
                print("チェリーRB回数:", チェリーRB回数, "(1 / ", チェリーRB回数, ")")
            else:
                print("チェリーRB回数:", チェリーRB回数, "(1 / ", round((j + 1) / チェリーRB回数, 1), ")")

    # スランプグラフの表示
    plt.title('Setting: %d, Loop = %d' % (設定,loop))
    plt.plot(Result)
    plt.grid(True)
    plt.show()

if __name__ == "__main__":
    # 設定値の設定
    設定 = 6
    # 試行回数の設定
    loop = 8000
    # 途中結果表示の区切り回数
    区切り回数 = 2000

    SlumpGraph_calc(設定, loop, 区切り回数)

シミュレータの動作確認

試しに、設定6を8000回転回したときの結果を出力してみましょう。
----------
2000 回転
チェリー回数: 58 (1/ 34.48 )
ぶどう回数: 307 (1/ 6.51 )
単独BB回数: 7 (1/ 285.7 )
チェリーBB回数: 0 (1/ 0 )
単独RB回数: 6 (1/ 333.3 )
チェリーRB回数: 3 (1/ 666.7 )
----------
----------
4000 回転
チェリー回数: 123 (1/ 32.52 )
ぶどう回数: 630 (1/ 6.35 )
単独BB回数: 17 (1/ 235.3 )
チェリーBB回数: 2 (1/ 2000.0 )
単独RB回数: 13 (1/ 307.7 )
チェリーRB回数: 6 (1/ 666.7 )
----------
----------
6000 回転
チェリー回数: 191 (1/ 31.41 )
ぶどう回数: 961 (1/ 6.24 )
単独BB回数: 23 (1/ 260.9 )
チェリーBB回数: 4 (1/ 1500.0 )
単独RB回数: 19 (1/ 315.8 )
チェリーRB回数: 7 (1/ 857.1 )
----------
----------
8000 回転
チェリー回数: 252 (1/ 31.75 )
ぶどう回数: 1243 (1/ 6.44 )
単独BB回数: 35 (1/ 228.6 )
チェリーBB回数: 7 (1/ 1142.9 )
単独RB回数: 23 (1/ 347.8 )
チェリーRB回数: 9 (1/ 888.9 )
----------
無事に各役の個数が定期的に出力されていますね。


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

コメント

このブログの人気の投稿

【WEBアプリ】Sキングハナハナ-30のベル確率予想&ベル確率逆算ツール&設定判別ツール

【WEBアプリ】ハナハナホウオウ天翔のベル確率を差枚数から逆算するツール

【WEBアプリ】ハナハナホウオウ天翔の設定判別ツール