P緋弾のアリア4の天井期待値&シミュレーション
# -*- coding: utf-8 -*-
"""
Created on Mon Jan 25 16:40:50 2021
@author: HOST1191
"""
import random
import statistics
import collections
import matplotlib.pyplot as plt
import seaborn as sns
import csv
#デンチュー振り分け
def d_furi():
d_furir = random.randint(1,400)
d_dedama = 0
d_kakuhen = 0
if d_furir >= 1 and d_furir <= 199:
d_dedama += 360
d_kakuhen = 1
else:
d_dedama += 1200
d_kakuhen = 1
return d_dedama,d_kakuhen
#ヘソの振り分け
def h_furi():
h_furir = random.randint(1,100)
h_dedama = 0
h_kakuhen = 0
if h_furir >= 1 and h_furir <= 50:
h_dedama += 360
h_kakuhen = 1
else:
h_dedama += 360
h_kakuhen = 0
return h_dedama,h_kakuhen
#ライトニグバレットチャンス
def l_furi():
l_kakuhen = 0
l_tyusen = random.random()
if l_tyusen <= (1/4):
l_kakuhen = 2
return l_kakuhen
#バレットアタックストックタイム
def v_renchan():
v_st = 0
stock = 0
while v_st < 38:
v_tyusen = random.random()
v_st += 1
if v_tyusen <= (1/73):
stock += 1
if stock > 4:
stock = 4
return stock
#連荘
def renchan(r_kakuhen):
wk_st = 0
wk_jitan = 0
r_dedama = 0
wk_dedama = 0
wk_ren = 0
end = 0
#パラメータ説明
#r_kakuhen = 0 確変ではない
# = 1 確変
# = 2 ライトニングバレットチャンス
while end < 1:
if r_kakuhen == 1:
r_tyusen = random.random()
wk_st += 1
if r_tyusen <= (1/73):
# ライトニングバレットチャンス発生時
l_kakuhen = l_furi()
if l_kakuhen == 2:
v_stock = 1
while v_stock > 0:
v_stock -= 1
wk_ren += 1
r_dedama,r_kakuhen = d_furi()
wk_dedama += r_dedama
v_stock += v_renchan()
else:
wk_ren += 1
r_dedama,r_kakuhen = d_furi()
wk_dedama += r_dedama
wk_st = 0
if wk_st >= 100:
end += 1
# 確変じゃないとき
else:
r_tyusen = random.random()
wk_jitan += 1
if r_tyusen <= (1/199.1):
r_dedama,r_kakuhen = h_furi()
wk_ren += 1
wk_dedama += r_dedama
wk_jitan = 0
if wk_jitan >= 54:
end += 1
return wk_ren,wk_dedama
sikou = 100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
for sim in range(1,sikou+1):
#初当たりの振り分け処理天井考慮
sim3 = 0
end1 = 0
while end1 < 1:
t_tyusen = random.random()
sim3 += 1
if sim3 >= 500:
d_dedama,d_kakuhen = d_furi()
ren,dedama = renchan(d_kakuhen)
ren += 1
dedama += d_dedama
end1 += 1
else:
if t_tyusen <= (1/199.1):
h_dedama,h_kakuhen = h_furi()
ren,dedama = renchan(h_kakuhen)
ren += 1
dedama += h_dedama
end1 += 1
dedama1.append(dedama)
ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort()
dedama1.sort()
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('天井考慮連荘平均: {0:.2f}'.format(m1))
print('天井考慮出玉平均: {0:.1f}'.format(m2))
ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
print("分布=",ren_bunpu)
#print("分布=",dedama_bunpu)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <= 1000 for x1 in dedama1)
x2 = sum( 1000 < x2 <= 5000 for x2 in dedama1)
x3 = sum( 5000 < x3 <= 10000 for x3 in dedama1)
x4 = sum( 10000 < x4 for x4 in dedama1)
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
"{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["U1k","1k~5k","5k~10k","10kover"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')
print("x=",x1,x2,x3,x4)
d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.lines1tyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,30), ylim=(0,50000))
ax.bar(d,e)
plt.show()
#実戦シミュレーション
sikou = 3000
for sim in range(1,8):
#初当たりの振り分け処理天井考慮
sim4 = 0
sim3 = 0
#回転数
kaiten1 = []
#出玉推移
dedama1 = []
soudedama = 0
while sim4 < sikou:
t_tyusen = random.random()
sim3 += 1
sim4 += 1
if sim3 >= 500:
d_dedama,d_kakuhen = d_furi()
ren,dedama = renchan(d_kakuhen)
dedama += d_dedama
soudedama += dedama
sim3 = 0
else:
if t_tyusen <= (1/199.1):
h_dedama,h_kakuhen = h_furi()
ren,dedama = renchan(h_kakuhen)
dedama += h_dedama
soudedama += dedama
sim3 = 0
else:
soudedama = soudedama - (250 / 18)
dedama1.append(soudedama)
kaiten1.append(sim4)
plt.plot(kaiten1,dedama1,linewidth=1)
plt.show()
#天井期待値の計算
#試行回数
sikou = 10000
#千円当たりの回転数
kaitenritu = 0
#作図用
sk = []
dk = []
sim1 = 0
sim2 = 0
atari = 0
suru = 0
for tenzyo in range(0,500,50):
for kaitenritu in range (15,21):
soudedama = 0
for a in range(1,sikou+1):
suru = 0
sim1 = 0
sim2 = 0
while suru < 1:
t_tyusen = random.random()
# 天井到達時点
if sim1 == tenzyo:
t_dedama,t_kakuhen = d_furi()
ren,dedama = renchan(t_kakuhen)
ren += 1
soudedama += t_dedama
soudedama += dedama
suru += 1
else:
sim1 += 1
soudedama = soudedama - (250 / kaitenritu)
if t_tyusen <= 1/(199.1):
t_dedama,t_kakuhen = h_furi()
ren,dedama = renchan(t_kakuhen)
ren += 1
soudedama += t_dedama
soudedama += dedama
suru += 1
sk.append(["{0:.0f}".format((soudedama/sikou)*4),tenzyo,kaitenritu])
print ("作表用=",sk)
with open('data.csv', 'w') as file:
writer = csv.writer(file, lineterminator='\n')
writer.writerows(sk)
#plt.plot(atarikai,dedama1)
#plt.show()
P北斗無双3の天井解析プログラム
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 1 10:56:29 2020
@author: HOST1191
"""
import random
import statistics
import collections
import matplotlib.pyplot as plt
import seaborn as sns
import csv
#Pデンチュー振り分け
def d_furi():
d_furir = random.randint(1,100)
d_dedama = 0
d_kakuhen = 0
if d_furir >= 1 and d_furir <= 25:
d_dedama += 1200
d_kakuhen = 1
elif d_furir > 26 and d_furir <= 50:
d_dedama += 810
d_kakuhen = 1
else:
d_dedama += 420
d_kakuhen = 1
return d_dedama,d_kakuhen
#P北斗無双3ヘソの振り分け
def h_furi():
h_furir = random.randint(1,200)
h_dedama = 0
h_kakuhen = 0
if h_furir >= 1 and h_furir <= 25:
h_dedama += 390
h_kakuhen = 1
else:
h_dedama += 390
h_kakuhen = 0
return h_dedama,h_kakuhen
#連荘
def renchan(r_kakuhen):
wk_st = 0
r_dedama = 0
wk_dedama = 0
wk_ren = 0
end = 0
#パラメータ説明
#r_kakuhen = 0 確変ではない
# = 1 確変
while end < 1:
r_tyusen = random.random()
wk_st += 1
wk_dedama = wk_dedama - 0.5
if r_tyusen <= (1/6.17):
wk_ren += 1
r_dedama,r_kakuhen = d_furi()
wk_dedama += r_dedama
wk_st = 0
r_kakuhen = 1
if r_kakuhen == 1:
if wk_st >= 13:
end += 1
else:
if wk_st >= 4:
end += 1
return wk_ren,wk_dedama
sikou = 100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
for sim in range(1,sikou+1):
#初当たりの振り分け処理天井考慮
sim3 = 0
end1 = 0
while end1 < 1:
t_tyusen = random.random()
sim3 += 1
if sim3 >= 950 and sim3 <= 1205:
if t_tyusen <= (1/6.17):
d_dedama,d_kakuhen = d_furi()
ren,dedama = renchan(d_kakuhen)
ren += 1
dedama += d_dedama
end1 += 1
else:
if t_tyusen <= (1/319.68):
h_dedama,h_kakuhen = h_furi()
ren,dedama = renchan(h_kakuhen)
ren += 1
dedama += h_dedama
end1 += 1
dedama1.append(dedama)
ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort()
dedama1.sort()
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('天井考慮連荘平均: {0:.2f}'.format(m1))
print('天井考慮出玉平均: {0:.1f}'.format(m2))
ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
print("分布=",ren_bunpu)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <= 1000 for x1 in dedama1)
x2 = sum( 1000 < x2 <= 5000 for x2 in dedama1)
x3 = sum( 5000 < x3 <= 10000 for x3 in dedama1)
x4 = sum( 10000 < x4 for x4 in dedama1)
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
"{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["U1k","1k~5k","5k~10k","10kover"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')
xx1 = sum( xx1 <= 1000 for xx1 in dedama1)
xx2 = sum( 1000 < xx2 <= 2500 for xx2 in dedama1)
xx3 = sum( 2500 < xx3 <= 5000 for xx3 in dedama1)
xx4 = sum( 5000 < xx4 <= 7500 for xx4 in dedama1)
xx5 = sum( 7500 < xx5 <= 10000 for xx5 in dedama1)
xx6 = sum( 10000 < xx6 <= 20000 for xx6 in dedama1)
xx7 = sum( 20000 < xx7 <= 30000 for xx7 in dedama1)
xx8 = sum( 30000 < xx8 <= 40000 for xx8 in dedama1)
xx9 = sum( 40000 < xx9 <= 50000 for xx9 in dedama1)
xx10 = sum( 50000 < xx10 for xx10 in dedama1)
print("x=",xx1,xx2,xx3,xx4,xx5,xx6,xx7,xx8,xx9,xx10)
d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,30), ylim=(0,50000))
ax.bar(d,e)
plt.show()
#実戦シミュレーション
sikou = 30000
for sim in range(1,8):
#初当たりの振り分け処理天井考慮
sim4 = 0
sim3 = 0
#回転数
kaiten1 = []
#出玉推移
dedama1 = []
soudedama = 0
while sim4 < sikou:
t_tyusen = random.random()
sim3 += 1
sim4 += 1
if sim3 >= 950 and sim3 <= 1205:
if t_tyusen <= (1/6.17):
d_dedama,d_kakuhen = d_furi()
ren,dedama = renchan(d_kakuhen)
dedama += d_dedama
soudedama += dedama
sim3 = 0
else:
dedama = dedama - 1
else:
if t_tyusen <= (1/319.68):
h_dedama,h_kakuhen = h_furi()
ren,dedama = renchan(h_kakuhen)
dedama += h_dedama
soudedama += dedama
sim3 = 0
else:
soudedama = soudedama - (250 / 18)
dedama1.append(soudedama)
kaiten1.append(sim4)
plt.plot(kaiten1,dedama1,linewidth=1)
plt.show()
#天井期待値の計算
#試行回数
sikou = 100000
#千円当たりの回転数
kaitenritu = 0
#作図用
sk = []
dk = []
sim1 = 0
sim2 = 0
atari = 0
suru = 0
for tenzyo in range(0,950,50):
for kaitenritu in range (15,21):
soudedama = 0
for a in range(1,sikou+1):
suru = 0
sim1 = 0
sim2 = 0
while suru < 1:
t_tyusen = random.random()
# 天井到達時点
if sim1 == tenzyo:
soudedama = soudedama - 0.5
if t_tyusen <= 1/(6.17):
t_dedama,t_kakuhen = d_furi()
ren,dedama = renchan(t_kakuhen)
ren += 1
soudedama += t_dedama
soudedama += dedama
suru += 1
else:
sim2 += 1
if sim2 >= 255:
soudedama += 0
suru += 1
else:
sim1 += 1
soudedama = soudedama - (250 / kaitenritu)
if t_tyusen <= 1/(319.68):
t_dedama,t_kakuhen = h_furi()
ren,dedama = renchan(t_kakuhen)
ren += 1
soudedama += t_dedama
soudedama += dedama
suru += 1
sk.append(["{0:.0f}".format((soudedama/sikou)*4),tenzyo,kaitenritu])
print ("作表用=",sk)
with open('data.csv', 'w') as file:
writer = csv.writer(file, lineterminator='\n')
writer.writerows(sk)
#plt.plot(atarikai,dedama1)
#plt.show()
Pルパン三世マモーの新しいやつ、pythonによる出玉シミュレーション
# -*- coding: utf-8 -*-
"""
Created on Wed Jun 24 18:19:03 2020
@author: HOST1191
"""
import random
import statistics
import collections
import matplotlib.pyplot as plt
import seaborn as sns
#ルパン三世マモー電チュー振り分け
def d_furi():
d_dedama = 280
return d_dedama
#ルパン三世マモーヘソ振り分け
def h_furi():
h_furiwake = random.random()
if h_furiwake >= 0 and h_furiwake <= (3.8/100):
h_dedama = 280
h_flg = 1
elif h_furiwake > (3.8/100) and h_furiwake <= (6.4/100):
h_dedama = 280
h_flg = 2
else:
h_dedama = 28
h_flg = 0
return h_dedama,h_flg
#Pルパン三世復活のマモー連荘の関数定義
def d_renchan(d_kaisu,d_flg):
if d_kaisu == 7:
d_bunbo = 22
else:
d_bunbo = 19
ren = 1
dedama = 280
s_suru = 0
s_st = 0
g_st = 0
d_zan = 0
while s_suru < 1:
d_tyusen = random.random()
if d_tyusen <= (1/d_bunbo):
d_zan = 7 - d_kaisu
if d_zan == 0:
d_zan += 7
ren += 1
dedama += (280 * d_zan)
s_suru += 2
else:
if d_flg == 2:
s_st += 1
if s_st >= 18:
s_suru += 1
if s_suru == 2:
g_st = 0
while s_suru < 3:
d_bunbo = 22
d_tyusen2 = random.random()
if d_tyusen2 <= (1/d_bunbo):
dedama += (d_furi() * 7)
ren += 1
g_st = 0
else:
g_st += 1
if g_st >= 27:
s_suru += 1
# print ("ren=",ren)
return ren,dedama
"""ここからラッシュ評価"""
#連荘性能の評価
#ラッシュ突入回数
sikou = 10000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
a = 0
b = 0
for sim in range(1,sikou+1):
#初当たりの振り分け処理
d_flg = 0
a = 0
d_kaisu = 0
while d_flg < 1:
if d_kaisu == 7:
d_kaisu = 1
a,d_flg = h_furi()
d_kaisu += 1
ren,dedama = d_renchan(d_kaisu,d_flg)
dedama1.append(dedama)
ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort()
dedama1.sort()
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('連荘平均: {0:.2f}'.format(m1))
print('出玉平均: {0:.1f}'.format(m2))
ren_bunpu = collections.Counter(ren1)
#dedama_bunpu = collections.Counter(dedama1)
print(ren_bunpu)
#print(dedama_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <= 1000 for x1 in dedama1)
x2 = sum( 1000 < x2 <= 5000 for x2 in dedama1)
x3 = sum( 5000 < x3 <= 10000 for x3 in dedama1)
x4 = sum( 10000 < x4 for x4 in dedama1)
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
"{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["tan","ika","manti","manpatu"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')
d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,80), ylim=(0,1000))
ax.bar(d,e)
plt.show()
#実戦シミュレーション
sikou = 30000
sim3 = 0
sim2 = 1
for sim in range(1,8):
#実試行回数
sim4 = 0
#回転数
kaiten1 = []
#出玉推移
dedama1 = []
soudedama = 0
sim = 1
while sim4 < sikou:
t_tyusen = random.random()
sim3 += 1
sim4 += 1
if sim == 1:
t_bunbo = 22
else:
t_bunbo = 19
if sim == 7:
sim = 1
if t_tyusen <= (1/t_bunbo):
h_dedama,h_flg = h_furi()
if h_flg == 0:
soudedama += h_dedama
sim += 1
else:
sim += 1
soudedama += h_dedama
ren,dedama = d_renchan(sim,h_flg)
soudedama += dedama
sim3 = 0
else:
soudedama = soudedama - (250 / 13)
dedama1.append(soudedama)
kaiten1.append(sim4)
plt.plot(kaiten1,dedama1,linewidth=1)
plt.show()
Pエウレカセブンハイエボルのスペック天井解析
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 1 10:56:29 2020
@author: HOST1191
"""
import random
import statistics
import collections
import matplotlib.pyplot as plt
import japanize_matplotlib
import seaborn as sns
import csv
#エウレカセブンデンチュー振り分け
def d_furi():
d_furir = random.randint(1,100)
d_dedama = 0
d_kakuhen = 0
if d_furir >= 1 and d_furir <= 60:
d_dedama += 1400
d_kakuhen = 1
elif d_furir >= 61 and d_furir <= 75:
d_dedama += 980
d_kakuhen = 1
else:
d_dedama += 420
d_kakuhen = 1
return d_dedama,d_kakuhen
#エウレカセブンヘソの振り分け
def h_furi():
h_furir = random.randint(1,100)
h_dedama = 0
h_kakuhen = 0
if h_furir >= 1 and h_furir <= 99:
h_dedama += 420
h_kakuhen = 0
else:
h_dedama += 1400
h_kakuhen = 1
return h_dedama,h_kakuhen
#連荘
def renchan(r_kakuhen):
wk_jitan = 0
wk_st = 0
r_dedama = 0
wk_dedama = 0
wk_ren = 0
end = 0
#パラメータ説明
#r_kakuhen = 0 確変ではない
# = 1 確変
while end < 1:
if r_kakuhen == 1:
r_tyusen = random.random()
wk_st += 1
wk_dedama = wk_dedama - 0.5
if r_tyusen <= (1/94.2):
wk_ren += 1
r_dedama,r_kakuhen = d_furi()
wk_dedama += r_dedama
wk_st = 0
wk_jitan = 0
else:
if wk_st > 150:
end += 1
#時短の処理
else:
#引き戻し抽選
r_tyusen2 = random.random()
wk_jitan += 1
wk_dedama = wk_dedama - 0.5
if r_tyusen2 <= (1/199.8):
wk_ren += 1
r_dedama,r_kakuhen = d_furi()
wk_dedama += r_dedama
wk_st = 0
wk_jitan = 0
else:
if wk_jitan >= 104:
end += 1
return wk_ren,wk_dedama
sikou = 100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
no1 = 0
for sim in range(1,sikou+1):
#初当たりの振り分け処理天井考慮
sim3 = 0
end1 = 0
while end1 < 1:
t_tyusen = random.random()
sim3 += 1
if sim3 >= 599 and sim3 <= 699:
if t_tyusen <= (1/199.8):
d_dedama,d_kakuhen = d_furi()
ren,dedama = renchan(d_kakuhen)
ren += 1
dedama += d_dedama
end1 += 1
else:
if t_tyusen <= (1/199.8):
h_dedama,h_kakuhen = h_furi()
ren,dedama = renchan(h_kakuhen)
ren += 1
dedama += h_dedama
end1 += 1
dedama1.append(dedama)
ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort()
dedama1.sort()
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('天井考慮連荘平均: {0:.2f}'.format(m1))
print('天井考慮出玉平均: {0:.1f}'.format(m2))
ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
print("分布=",ren_bunpu)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <= 1000 for x1 in dedama1)
x2 = sum( 1000 < x2 <= 5000 for x2 in dedama1)
x3 = sum( 5000 < x3 <= 10000 for x3 in dedama1)
x4 = sum( 10000 < x4 for x4 in dedama1)
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
"{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["U1k","1k~5k","5k~10k","10kover"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')
d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,30), ylim=(0,50000))
ax.bar(d,e)
plt.show()
#実戦シミュレーション
sikou = 3000
sim3 = 0
for sim in range(1,8):
#初当たりの振り分け処理天井考慮
sim4 = 0
#回転数
kaiten1 = []
#出玉推移
dedama1 = []
soudedama = 0
while sim4 < sikou:
t_tyusen = random.random()
sim3 += 1
sim4 += 1
if sim3 >= 599 and sim3 <= 699:
if t_tyusen <= (1/199.8):
d_dedama,d_kakuhen = d_furi()
ren,dedama = renchan(d_kakuhen)
dedama += d_dedama
soudedama += dedama
sim3 = 0
else:
dedama = dedama - 0.5
else:
if t_tyusen <= (1/199.8):
h_dedama,h_kakuhen = h_furi()
ren,dedama = renchan(h_kakuhen)
dedama += h_dedama
soudedama += dedama
sim3 = 0
else:
soudedama = soudedama - (250 / 18)
dedama1.append(soudedama)
kaiten1.append(sim4)
plt.plot(kaiten1,dedama1,linewidth=1)
plt.show()
#天井期待値の計算
#試行回数
sikou = 1000
#千円当たりの回転数
kaitenritu = 0
#作図用
sk = []
dk = []
sim1 = 0
sim2 = 0
atari = 0
suru = 0
for tenzyo in range(0,601,50):
for kaitenritu in range (15,21):
soudedama = 0
for a in range(1,sikou+1):
suru = 0
sim1 = 0
sim2 = 0
while suru < 1:
t_tyusen = random.random()
# 天井到達時点
if sim1 == tenzyo:
soudedama = soudedama - 0.5
if t_tyusen <= 1/(199.8):
t_dedama,t_kakuhen = d_furi()
ren,dedama = renchan(t_kakuhen)
ren += 1
soudedama += t_dedama
soudedama += dedama
suru += 1
else:
sim2 += 1
if sim2 >= 100:
soudedama += 0
suru += 1
else:
sim1 += 1
soudedama = soudedama - (250 / kaitenritu)
if t_tyusen <= 1/(199.8):
t_dedama,t_kakuhen = h_furi()
ren,dedama = renchan(t_kakuhen)
ren += 1
soudedama += t_dedama
soudedama += dedama
suru += 1
sk.append(["{0:.0f}".format((soudedama/sikou)*4),tenzyo,kaitenritu])
print ("作表用=",sk)
with open('data.csv', 'w') as file:
writer = csv.writer(file, lineterminator='\n')
writer.writerows(sk)
#plt.plot(atarikai,dedama1)
#plt.show()
Pythonによる仕置人天井シミュレーション
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 1 10:56:29 2020
@author: HOST1191
"""
import random
import statistics
import collections
import matplotlib.pyplot as plt
import seaborn as sns
import csv
#仕置人デンチュー振り分け
def d_furi():
d_furir = random.randint(1,200)
d_dedama = 0
d_kakuhen = 0
d_jitan = 0
if d_furir >= 1 and d_furir <= 33:
d_dedama += 900
d_kakuhen = 1
d_jitan = 1
elif d_furir >= 34 and d_furir <= 99:
d_dedama += 900
d_kakuhen = 1
d_jitan = 0
elif d_furir >= 100 and d_furir <= 132:
d_dedama += 270
d_kakuhen = 1
d_jitan = 1
elif d_furir >= 133 and d_furir <= 198:
d_dedama = 270
d_kakuhen = 1
d_jitan = 0
elif d_furir == 199:
d_dedama += 900
d_kakuhen = 0
d_jitan = 2
else:
d_dedama += 270
d_kakuhen = 0
d_jitan = 2
return d_dedama,d_kakuhen,d_jitan
#仕置人ヘソの振り分け
def h_furi():
h_furir = random.randint(1,100)
h_dedama = 0
h_kakuhen = 0
h_jitan = 0
if h_furir >= 1 and h_furir <= 99:
h_dedama += 270
h_kakuhen = 0
h_jitan = 3
else:
h_dedama += 270
h_kakuhen = 1
h_jitan = 0
return h_dedama,h_kakuhen,h_jitan
#連荘
def renchan(r_kakuhen,r_jitan):
wk_jitan = 0
wk_st = 0
r_dedama = 0
wk_dedama = 0
wk_ren = 0
end = 0
#パラメータ説明
#r_jitan = 0 時短無し
# = 1 時短50回
# = 2 時短279回
#r_kakuhen = 0 確変ではない
# = 1 確変
while end < 1:
if r_kakuhen == 1:
r_tyusen = random.random()
wk_st += 1
# dedama = dedama - 0.5
if r_tyusen <= (1/86.3):
wk_ren += 1
r_dedama,r_kakuhen,r_jitan = d_furi()
wk_dedama += r_dedama
wk_st = 0
wk_jitan = 0
else:
if wk_st > 120:
if r_jitan != 0:
r_kakuhen = 0
wk_jitan = 0
else:
end += 1
#時短の処理
else:
#引き戻し抽選
r_tyusen2 = random.random()
wk_jitan += 1
if r_tyusen2 <= (1/99.9):
wk_ren += 1
r_dedama,r_kakuhen,r_jitan = d_furi()
wk_dedama += r_dedama
wk_st = 0
wk_jitan = 0
else:
if r_jitan == 1:
if wk_jitan >= 54:
end += 1
elif r_jitan == 2:
if wk_jitan >= 663:
end += 1
elif r_jitan == 3:
if wk_jitan >= 44:
end += 1
elif r_jitan == 4:
if wk_jitan >= 383:
end += 1
else:
print ("時短フラグ異常=",r_jitan)
end += 1
return wk_ren,wk_dedama
sikou = 100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
no1 = 0
for sim in range(1,sikou+1):
#初当たりの振り分け処理
t_tyusen = random.random()
if t_tyusen <= (94/100):
h_dedama,h_kakuhen,h_jitan = h_furi()
ren,dedama = renchan(h_kakuhen,h_jitan)
ren += 1
dedama += h_dedama
else:
ren,dedama = renchan(0,4)
if ren == 0:
no1 += 1
dedama1.append(dedama)
ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort()
dedama1.sort()
#print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('連荘平均: {0:.2f}'.format(m1))
print('出玉平均: {0:.1f}'.format(m2))
ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
print("分布=",ren_bunpu)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <= 1000 for x1 in dedama1)
x2 = sum( 1000 < x2 <= 5000 for x2 in dedama1)
x3 = sum( 5000 < x3 <= 10000 for x3 in dedama1)
x4 = sum( 10000 < x4 for x4 in dedama1)
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
"{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["1000発以下","1000発~5000発","5000発~万発","万発over"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')
d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlim=(0,30), ylim=(0,50000))
ax.bar(d,e)
plt.show()
#天井期待値の計算
#試行回数
sikou = 100000
#千円当たりの回転数
kaitenritu = 0
#作図用
sk = []
dk = []
sim1 = 0
sim2 = 0
atari = 0
suru = 0
for tenzyo in range(0,281,50):
for kaitenritu in range (15,21):
soudedama = 0
for a in range(1,sikou+1):
suru = 0
sim1 = 0
sim2 = 0
while suru < 1:
t_tyusen = random.random()
# 天井到達時点
if sim1 == tenzyo:
soudedama = soudedama - 0.5
if t_tyusen <= 1/(99.9):
t_dedama,t_kakuhen,t_jitan = d_furi()
ren,dedama = renchan(t_kakuhen,t_jitan)
ren += 1
soudedama += t_dedama
soudedama += dedama
suru += 1
else:
sim2 += 1
if sim2 >= 379:
soudedama += 0
suru += 1
else:
sim1 += 1
soudedama = soudedama - (250 / kaitenritu)
if t_tyusen <= 1/(99.9):
t_dedama,t_kakuhen,t_jitan = h_furi()
ren,dedama = renchan(t_kakuhen,t_jitan)
ren += 1
soudedama += t_dedama
soudedama += dedama
suru += 1
sk.append(["{0:.0f}".format(soudedama/sikou*4),tenzyo,kaitenritu])
print ("作表用=",sk)
with open('data.csv', 'w') as file:
writer = csv.writer(file, lineterminator='\n')
writer.writerows(sk)
#plt.plot(atarikai,dedama1)
#plt.show()
Pythonによる仮面ライダー轟音の天井期待値算出シミュレーション方法
仮面ライダー轟音を天井まで50G刻みで期待値算出できるようにしました。
変数のkaitenrituを好きな回転数に変えたら
その回転数の期待値が出てきますのでお試しあれ。
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 1 10:56:29 2020
@author: HOST1191
"""
import random
import statistics
import collections
import matplotlib.pyplot as plt
import seaborn as sns
#仮面ライダー轟音振り分けデンチュー
def furi():
furir = random.randint(1,100)
furideda = 0
furiflg = 0
if furir >= 1 and furir <= 35:
furideda += 1400
furiflg = 0
elif furir >= 36 and furir <= 80:
furideda += 1400
furiflg += 1
elif furir >= 81 and furir <= 85:
furideda += 280
furiflg = 0
else:
furideda += 280
furiflg += 1
return furideda,furiflg
#仮面ライダー轟音振り分けヘソ
#仮面ライダー轟音連荘の関数定義
def renchan(kakuhen1,flg):
ren = 1
suru = 0
jitan = 0
st = 0
dedama = 0
while suru < 1:
#転落抽選
#確変
if kakuhen1 == 0:
tyusen1 = random.random()
st += 1
dedama = dedama - 0.5
if tyusen1 <= (1/74.7):
ren += 1
furideda,flg = furi()
dedama += furideda
st = 0
jitan = 0
else:
if st > 120:
if flg == 0:
kakuhen1 += 1
jitan = 0
else:
suru += 1
#時短の処理
else:
#引き戻し抽選
tyusen2 = random.random()
jitan += 1
dedama = dedama - 0.5
if jitan >= 124:
suru += 1
else:
if tyusen2 <= (1/319.7):
ren += 1
furideda,flg = furi()
dedama += furideda
kakuhen1 = 0
jitan = 0
st = 0
# print ("ren=",ren)
return ren,dedama
#試行回数
sikou = 10000
#千円当たりの回転数
kaitenritu = 16
#低確分母
bunbo1 = 319.7
#作図用
atarikai = []
dedama1 = []
bunbo1 = 319.7
sim1 = 0
sim2 = 0
atari = 0
suru = 0
for tenzyo in range(0,951,50):
soudedama = 0
for a in range(1,sikou+1):
suru = 0
sim1 = 0
sim2 = 0
while suru < 1:
tyusen1 = random.random()
# 天井到達時点
if sim1 == tenzyo:
soudedama = soudedama - 0.5
if tyusen1 <= 1/(bunbo1):
furideda,furiflg = furi()
soudedama += furideda
ren,dedama = renchan(0,furiflg)
soudedama += dedama
suru += 1
else:
sim2 += 1
if sim2 >= 1200:
soudedama += 0
suru += 1
else:
sim1 += 1
soudedama = soudedama - (250 / kaitenritu)
if tyusen1 <= 1/(bunbo1):
furiwake1 = random.randint(1,100)
if furiwake1 >= 1 and furiwake1 <= 50:
soudedama += 420
ren,dedama = renchan(1,1)
elif furiwake1 >= 51 and furiwake1 <= 89:
soudedama += 420
ren,dedama = renchan(0,1)
elif furiwake1 >= 90 and furiwake1 <= 99:
soudedama += 420
ren,dedama = renchan(0,0)
else:
soudedama += 1400
ren,dedama = renchan(0,0)
soudedama += dedama
suru += 1
dedama1.append("{0:.0f}".format((soudedama/sikou)*4))
atarikai.append(tenzyo)
print ("期待値=",dedama1)
print ("天井まで=",atarikai)
#plt.plot(atarikai,dedama1)
#plt.show()
Pythonによる仮面ライダー轟音平均出玉シミュレーション値
そのままコピペしてpython動く環境で動かしてもらえばシミュレーション値は出るかも。
# -*- coding: utf-8 -*-
"""
Created on Wed Jun 24 18:19:03 2020
@author: HOST1191
"""
import random
import statistics
import collections
import matplotlib.pyplot as plt
import seaborn as sns
#仮面ライダー轟音振り分け
def furi():
furir = random.randint(1,100)
furideda = 0
furiflg = 0
if furir >= 1 and furir <= 35:
furideda += 1400
furiflg = 0
elif furir >= 36 and furir <= 80:
furideda += 1400
furiflg += 1
elif furir >= 81 and furir <= 85:
furideda += 280
furiflg = 0
else:
furideda += 280
furiflg += 1
return furideda,furiflg
#仮面ライダー轟音連荘の関数定義
def renchan(kakuhen1,flg):
hatu = random.randint(1,100)
if hatu >= 1 and hatu <= 99:
dedama = 420
else:
dedama = 1400
ren = 1
suru = 0
jitan = 0
st = 0
while suru < 1:
#転落抽選
#確変
if kakuhen1 == 0:
tyusen1 = random.random()
st += 1
if tyusen1 <= (1/74.7):
ren += 1
furideda,flg = furi()
dedama += furideda
st = 0
jitan = 0
else:
if st > 120:
if flg == 0:
kakuhen1 += 1
jitan = 0
else:
suru += 1
#時短の処理
else:
#引き戻し抽選
tyusen2 = random.random()
jitan += 1
if jitan >= 124:
suru += 1
else:
if tyusen2 <= (1/319.7):
ren += 1
furideda,flg = furi()
dedama += furideda
kakuhen1 = 0
jitan = 0
st = 0
# print ("ren=",ren)
return ren,dedama
"""ここからラッシュ評価"""
#連荘性能の評価
#ラッシュ突入回数
sikou = 100000
#連荘回数
ren1 = []
#ラッシュの出玉数
dedama1 = []
for sim in range(1,sikou+1):
#初当たりの振り分け処理
furiwake1 = random.randint(1,100)
if furiwake1 >= 1 and furiwake1 <= 50:
ren,dedama = renchan(1,1)
elif furiwake1 >= 51 and furiwake1 <= 89:
ren,dedama = renchan(0,1)
elif furiwake1 >= 90 and furiwake1 <= 99:
ren,dedama = renchan(0,0)
else:
ren,dedama = renchan(0,0)
dedama1.append(dedama)
ren1.append(ren)
#連荘平均数
m1 = statistics.mean(ren1)
m2 = statistics.mean(dedama1)
#連荘と出玉の整理
ren1.sort()
dedama1.sort()
print ("連荘数=",ren1)
#print ("出玉数=",dedama1)
print('連荘平均: {0:.2f}'.format(m1))
print('出玉平均: {0:.1f}'.format(m2))
ren_bunpu = collections.Counter(ren1)
dedama_bunpu = collections.Counter(dedama1)
#print(ren_bunpu)
#出玉の円グラフ作表用定義
x1 = sum( x1 <= 1000 for x1 in dedama1)
x2 = sum( 1000 < x2 <= 5000 for x2 in dedama1)
x3 = sum( 5000 < x3 <= 10000 for x3 in dedama1)
x4 = sum( 10000 < x4 for x4 in dedama1)
Xgraph = ["{0:.1f}".format(x1/sikou*100),"{0:.1f}".format(x2/sikou*100),
"{0:.1f}".format(x3/sikou*100),"{0:.1f}".format(x4/sikou*100)]
label = ["tan","ika","manti","manpatu"]
colors2 = ["0.3", "0.5", "0.7", "0.9", "1.1"]
plt.pie(Xgraph, labels=label, counterclock=False, startangle=90, colors=colors2,autopct="%1.1f%%")
plt.axis('equal')
d = list(ren_bunpu.keys())
e = list(ren_bunpu.values())
sns.set()
sns.set_style("darkgrid", {'grid.linestyle': '--'})
sns.set_context("paper", 1.0, {"lines.linewidth": 1})
sns.set_palette("winter_r", 2, 1)
sns.set('talk', 'darkgrid', 'dark', font_scale=1.0,
rc={"lines.linewidth": 10, 'grid.linestyle': '--'})
fig, ax = plt.subplots(figsize = (10,5))
ax.set(xlabel ='ren', ylabel='occcurs', xlim=(0,80), ylim=(0,1000))
ax.bar(d,e)
plt.show()