モンクDPS予想2
DPS予想プログラム
前回の日記で書きかけだったDPS予想プログラムを完成させた。
こんな感じ
N=10000 # 実験回数 FB=0.45*(1.21+0.05) # FB発動率 BB1=0.05*(1.21+0.05) # BB発動率 BB2=BB1+0.45 # BB発動率(FBからの発動) DM_N = 371 # 通常攻撃与ダメ DM_FB = 824 # FB与ダメ DM_BB = 1396 # BB与ダメ ST_N = (2+1)*1.3*1.3 # 通常攻撃スタミナ ST_FB = (4+1)*1.3 # FBスタミナ ST_BB = (6+1)*1.3 # BBスタミナ TM_N = 1.04 # 通常攻撃の時間 TM_FB = 0.53 # FBの時間 TM_BB = 0.53 # BBの時間 CRI=0.8 # クリ率 CRI_DM=1.5+1.0+0.07 # クリダメ増 GRO_DM=1.0+1.2 # グロダメ増 MaxStamina = 280 # かかしの最大スタミナ DM_Hash={:normal => DM_N, :fb => DM_FB, :bb => DM_BB} ST_Hash={:normal => ST_N, :fb => ST_FB, :bb => ST_BB} TM_Hash={:normal => TM_N, :fb => TM_FB, :bb => TM_BB} $frand=Random.new() def occ(q) $frand.rand(1.0) < q end # 攻撃の種類を決める def at_type(prev) case prev when :start return :normal when :normal return :bb if occ(BB1) return :fb if occ(FB) return :normal when :fb return :bb if occ(BB2) return :fb if occ(FB) return :normal when :bb return :fb if occ(FB) return :normal end end def sim (max_time) type=:start stamina=MaxStamina gro_time=0 time=0 total=0 while time < max_time type=at_type(type) dm = DM_Hash[type] dm *= CRI_DM if occ(CRI) if time <= gro_time then # グロ中 dm *= GRO_DM else # グロ中でない stamina -= ST_Hash[type] end total+=dm.to_i time +=TM_Hash[type] if stamina < 0 then stamina = MaxStamina gro_time = time + 5 # 5秒間グロ end end total end N.times do p sim(2*60) end
てかプログラム長い><
これまでは、シミュレート回数を10万回でやっていたけれど、処理が重いので1万回に減らした。そして、このプログラムを使って2分間かかしを通常放置で叩くシミュレートをした結果がこちら。
横軸が総与ダメで縦軸が頻度。与ダメは大体 320,000 - 420,000 くらいに収まる感じ。
実測
そしたら、実際に叩いてみたらどうなるかが気になるところだけれど、やってみた結果がこちら。
310,873
338,954
303.108
んー。正直外れていると言えば外れてる。ただ、この実験をしたのは結構夜遅い時間で、実験中も通信遅延でキャラが結構止まっていたりした。なので、そのせいで1割ぐらい下がったんだと考えれば、一応つじつまは合っている。
やはり、鯖の空いている時間帯に実験しないとだめみたい。