AB判定機

以前の日記で、バルキリとツリーのどちらが強いかという比較をした。

バルキリとツリー - お茶の国 プリ日記 ロードス島 調査兵団
ツリバル判定機 - お茶の国 プリ日記 ロードス島 調査兵団

そして、判定するためのプログラムを書いた。けれど、これではバルキリとツリーの比較しかできない上に物理職でないと使えない。

そこで、もう少し他の状況でも2つの装備の比較をしてみたい。

判定機

あまりクリダメやチェインダメ増などにまで手を広げると話が複雑になってしまうので、

「筋力/知力」「攻撃力」「攻撃力増」「スキル攻撃力」「スキル攻撃力増」

の5つのデータから、どちらが強いかを判定するプログラムを書いてみた。こんな感じ。

K   = 11    # 筋力/知力
AT  = 317   # 攻撃力(バフなし)
SAT = 60    # スキル攻撃力上昇
SUP = 0     # スキル攻撃力上昇(%)
UP0 = 10+15 # バフなし時、攻撃力増

# 装備A(ツリー)
K1   = 0
AT1  = 35
SAT1 = 0
SUP1 = 0
UP1  = 0
# 装備B(バルキリー)
K2   = 1
AT2  = 0
SAT2 = 0
SUP2 = 0
UP2  = 21


# ---
S = 0.7*(1+0.06*K)
S1= 0.7*(1+0.06*(K+K1))
S2= 0.7*(1+0.06*(K+K2))
A0=AT/S/(1+UP0/100.0)
A1=A0+AT1
A2=A0+AT2
U1=(1+(UP0+UP1)/100.0)
U2=(1+(UP0+UP2)/100.0)
Sk1=(SAT+SAT1)*(1+(SUP+SUP1)/100.0)
Sk2=(SAT+SAT2)*(1+(SUP+SUP2)/100.0)
# ---

P=A1*S1-A2*S2
Q=(A1*U1+Sk1)*S1-(A2*U2+Sk2)*S2

def compare
  return "A" if P>=0 && Q>=0
  return "B" if P<=0 && Q<=0
  u=-(100*Q/P).round
  return "攻撃力バフが%d%%以上ならA、以下ならB" % u if P>=0
  return "攻撃力バフが%d%%以上ならA、以下ならB" % u
end 

print compare

使い方

(同じ場所につける)二つの装備(or パぺ)A,Bのどちらが強いかを
比較したいとする。

A,Bは、例えば「ツリー」と「バルキリー」のように、同じ場所につけるもので、それぞれ、「筋力/知力」「攻撃力+?」「攻撃力+?%」「スキル攻撃力+?」「スキル攻撃量+?%」の効果を持っているとする。

最初に、A,B二つの装備を外した状態で、K,AT,SAT,SUPに「筋力/知力」「攻撃量(バフなし)」「スキル攻撃力上昇」「スキル攻撃力上昇(%)」入れる。これは、詳細情報で表示される値をそのまま使えばよい。

そして、UP0に「バフなし時の攻撃力増」を入力する。これは詳細情報に表示されないので、装備やGP、パッシブのOPを合計するしかない。

さらに、比較したい二つの装備A,Bの効果を入力する。

例えば、ツリーは攻撃力が35上がり、他は上がらないので

K1=0
AT1=35
SAT1=0
SUP1=0
UP1=0

となる。

バルキリーは筋力+1と攻撃力+21%なので、物理職なら

K2   = 1
AT2  = 0
SAT2 = 0
SUP2 = 0
UP2  = 21

となり、魔法職なら

K2   = 0
AT2  = 0
SAT2 = 0
SUP2 = 0
UP2  = 21

となる。そして、プログラムをrubyで動かすと、どちらが強いかを教えてくれる。

javascript版は後日作る予定