Pデビルマン疾風迅雷のオスイチボーダー
お世話になっております、スログラミングです。
Pデビルマン疾風迅雷ということで、ニューギンからの源さんタイプですね。
個人的には、キュインパトモードが気になります。
(RUSHが連荘するとコスチュームが変化していくらしい!!)
ということで、遊タイムを無視(天井を無視)したボーダー情報=オスイチボーダーを算出してみました。
目次
0. オスイチボーダーとは
オスイチボーダーとは、天井を無視(遊タイムを無視)した場合のボーダー。
オスイチ:座って1回転目、または極めて少ない回転数で当たること
ボーダー:理論上の損益分岐点
から勝手に作成した造語。
オスイチを繰り返した場合、特別な場合を除いては遊タイムの恩恵にあずかれないことから。
ちなみに、この遊び方をする人は試行回数が少ない(週1で仕事帰りに1万勝負とか)と思われるので、この数値に収束することは滅多にないと思います。
あくまで気休め程度で参考にしてください。
1. Pデビルマン疾風迅雷のオスイチボーダー
オスイチボーダーは21くらいです。
月マイナス1万くらいを目指すなら、千円Sが16くらいの台を週1回1万勝負って感じですね。
2. 今回作成したコード
オスイチボーダー算出に使用したプログラムはこちら。
# coding: UTF-8
# 乱数作成用
import random
# ボーダー算出用
import numpy as np
# スランプグラフ描画用
import pylab
# 試行条件の設定---ここから----
# 試行回数
loop = 1000000
# 千円Sの設定範囲
千円S_最小 = 10
千円S_最大 = 30
# 右打ち中の1回転当りの玉減り()
玉減り = 0.1
# ラウンド間のこぼし玉
こぼし玉 = 3
# 大当たり確率の設定(左打ち)
左5RRush = 319.69 / 0.50
左2RRush = 319.69 / 0.10
左5R通常 = 319.69 / 0.40
# 乱数範囲の設定準備(左打ち)
左5RRush範囲 = round(65536 / 左5RRush)
左2RRush範囲 = round(65536 / 左2RRush)
左5R通常範囲 = round(65536 / 左5R通常)
# 乱数範囲の設定(左打ち)
左5RRush範囲_下 = 1
左5RRush範囲_上 = 左5RRush範囲_下 + 左5RRush範囲 - 1
左2RRush範囲_下 = 左5RRush範囲_上 + 1
左2RRush範囲_上 = 左2RRush範囲_下 + 左2RRush範囲 - 1
左5R通常範囲_下 = 左2RRush範囲_上 + 1
左5R通常範囲_上 = 左5R通常範囲_下 + 左5R通常範囲 - 1
# 大当たり確率の設定(右打ち)
右7RRush = 2.04 / 0.30
右3RRush = 2.04 / 0.70
# 乱数範囲の設定準備(右打ち)
右7RRush範囲 = round(65536 / 右7RRush)
右3RRush範囲 = round(65536 / 右3RRush)
# 乱数範囲の設定(右打ち)
右7RRush範囲_下 = 1
右7RRush範囲_上 = 右7RRush範囲_下 + 右7RRush範囲 - 1
右3RRush範囲_下 = 右7RRush範囲_上 + 1
右3RRush範囲_上 = 右3RRush範囲_下 + 右3RRush範囲 - 1
# 試行条件の設定---ここまで----
# 1k当りの回転数vs出率のデータ作成---ここから----
# 結果用の箱やカウンタの準備
回転数リスト = []
出率リスト = []
# 1k当りの回転数を30まで変更しながらシミュレーション
for 回転数 in range(千円S_最小, 千円S_最大 + 1):
# トータルの差玉を入れる
Total = 0
# ループ処理(loopで設定した回数だけシミュレーションを行う。)
for i in range(loop):
# 乱数の取得
rand = random.randint(1, 65536)
# 当り判定+連荘処理
# Rush付きの大当たりを引いた時の処理
if 左5RRush範囲_下 <= rand <= 左5RRush範囲_上 or 左2RRush範囲_下 <= rand <= 左2RRush範囲_上:
if 左5RRush範囲_下 <= rand <= 左5RRush範囲_上:
# 大当たりで獲得した玉数を加算(アタッカーに入れた玉数は減算する)
Total = Total + 550 - 5 * (10 + こぼし玉)
elif 左2RRush範囲_下 <= rand <= 左2RRush範囲_上:
# 大当たりで獲得した玉数を加算(アタッカーに入れた玉数は減算する)
Total = Total + 220 - 2 * (10 + こぼし玉)
# Rush中の処理
# Rush中のゲーム数をカウント
ゲーム数_Rush = 1
# Rush回数までループする処理
while ゲーム数_Rush <= 4:
# 乱数の取得
rand2 = random.randint(1, 65536)
# RUSH中の玉減り分を減らす
Total = Total - 玉減り
# 7Rの振り分けだったとき
if 右7RRush範囲_下 <= rand2 <= 右7RRush範囲_上:
Total = Total + 770 - 7 * (10 + こぼし玉)
ゲーム数_Rush = 1
# 3Rの振り分けだったとき
elif 右3RRush範囲_下 <= rand2 <= 右3RRush範囲_上:
Total = Total + 330 - 3 * (10 + こぼし玉)
ゲーム数_Rush = 1
# はずれのとき
else:
ゲーム数_Rush = ゲーム数_Rush + 1
# 通常当たりを引いた時の処理
elif 左5R通常範囲_下 <= rand <= 左5R通常範囲_上:
# 大当たりで獲得した玉数を加算(アタッカーに入れた玉数は減算する)
Total = Total + 550 - 5 * (10 + こぼし玉)
# 1k当りの回転数ごとの出率を格納
回転数リスト.append(回転数)
出率リスト.append(Total / ((250 / 回転数) * loop) * 100)
# 1k当りの回転数vs出率のデータ作成---ここまで----
# ボーダー算出---ここから----
# 1k当りの回転数vs出率数を一次近似
近似 = np.polyfit(回転数リスト, 出率リスト, 1)
# 一次方程式から出率が100%になる回転数を算出
border = (100 - 近似[1]) / 近似[0]
# ボーダー算出---ここまで----
# グラフの描画(ボーダー情報)
pylab.figure(figsize=(6, 7))
pylab.subplot(2, 1, 1)
pylab.scatter(回転数リスト, 出率リスト, label="シミュ値") # 生データ
近似線 = np.poly1d(近似)(回転数リスト) # 近似式から近似線を計算
pylab.plot(回転数リスト, 近似線, label="近似線") # 一次近似したデータ
pylab.scatter(border, 100, label="ボーダー:" + str(round(border, 1)) + "[回/k]") # ボーダー値
pylab.title("デビルマンのオスイチボーダー" + "\n" + "(右打ちの玉減り:" + str(玉減り) + "[玉/回], ラウンド間のこぼし玉:" + str(こぼし玉) + "[個])", fontname="MS Gothic")
pylab.xlabel("回転数[回/1k]", fontname="MS Gothic")
pylab.ylabel("出率[%]", fontname="MS Gothic")
pylab.legend(prop={"family": "MS Gothic"})
pylab.grid()
# 期待収支の計算
期待収支 = []
for i, j in zip(回転数リスト, 近似線):
期待収支.append((2500 * j / 100 - 2500) * 4)
# グラフの描画(期待収支)
pylab.subplot(2, 1, 2)
pylab.plot(回転数リスト, 期待収支) # 期待収支のデータ
pylab.title("1万円期待収支", fontname="MS Gothic")
pylab.xlabel("回転数[回/1k]", fontname="MS Gothic")
pylab.ylabel("1万収支[円]", fontname="MS Gothic")
pylab.grid()
pylab.tight_layout()
pylab.show()

コメント
コメントを投稿