投稿記事

2019年 09月の記事 (1)

まるちゃん 2019/09/02 17:17

ダメージの期待値を考慮した会心率と回避率について

全然ゲーム作っていませんでした
思い出すために、今までどんなことしてたかまとめようと思います

魔法剣、やっぱり魔法剣だ…
自分は好きなんですよこういうの
攻撃力が上がらないから魔法も合わせるぞ!って脳筋がすき
属性の弱点をつくことで更にダメージを伸ばせる
頭がいいんだけどやっぱりパワープレイ
弱点をついたときのダメージ倍率は 1.5 倍ぐらいがいいのかなと思っています
魔法剣は全属性を網羅すると考えてしまえば
戦闘終了まで弱点によるダメージがついてしまうので 2 倍は強すぎるのかなって

会心倍率を低くすることでクリティカルが発生する確率を多くしようと思いました
攻撃力とクリティカル率の関係について期待値を使って算出します

期待値の求め方(期待値の定義)
金沢大学のページが最初に来たので参考に載せます
自分が説明するとサイコロはどの目も 1/6 の確率で出るはずです
期待値 = 1 * 1/6 + 2 * 1/6 ... 6 *1/6 = 3.5 ってなります
サイコロを降れば 3.5 の数値が手に入るみたいな

今回は斧の攻撃力は他の武器の 1.25 倍の攻撃力に決定しました
その代わりクリティカルが発生しません
この武器と同値になるように会心倍率と会心率を設定しました

おのの攻撃力を W1 とします
その他の攻撃力を W2 = W1 / 1.25 としました
武器の攻撃力は元となる攻撃力の 1/2 となります
つまり W2 は攻撃力全体の 1/3 に当たります
Atk1 = 3 * W1
Atk2 = 2.4 * W1

Dmg1 = Atk1 * 4 - Def * 2 = 12 * W1 - Def * 2
Dmg2 = Atk2 * 4 - Def * 2 = 9.6 * W1 - Def * 2

会心率を cri 、会心倍率 d とするとダメージの期待値は
E = Dmg * d * cri + Dmg * (1.0 - cri)
1.0 - cri はクリティカルが発生しない確率です
Dmg1 と Dmg2 の期待値が同じになるように
会心率と会心倍率を考えます
Dmg1 = Dmg2 * d * cri + Dmg2 * (1.0 - cri)
Dmg1 - Dmg2 = Dmg2 * d * cri - Dmg2 * cri
2.4 * W1 = cri * (d - 1.0) * Dmg2

会心倍率 d を 1.5 と仮定します。多くクリティカルしてほしいから低めにした
Def を 0 と仮定します。防御力が大きくなるほどダメージが小さくなります
ダメージが小さくなると会心倍率も大きくする必要があるからです
Dmg2 の値が 1 のとき
2.4 * W1 = cri * (d - 1.0) となります
cri = 1.0 のとき d = 2.4 * W1 + 1.0
W1 = 10 のとき会心倍率は 25 倍!?となります
しかも会心率が 100 %ととなります
更に武器の性能が上がるほど必要な会心倍率も上昇します
これは考える必要がないでしょう。ダメージは少し違う程度と考えます

2.4 * W1 = cri * (d - 1.0) * 9.6 * W1
d = 1.5 のとき cri = 0.5 で 50 %にする必要があります
d = 2.0 のとき cri = 0.25 で 25 %です
d = 3.0 のとき cri = 0.125 で 12.5 %です
デフォルトは会心倍率が 3.0 会心率が 5 %となっています

武器はちょうど 1.25 倍なので 25 %の会心率はいいなぁと思いました
防御力が0のとき攻撃力が 25 %上昇することが 25 %の会心率上昇と
同じ意味になるということが言えます
そして防御力が大きくなったとき会心率が 100 %だと仮定すると
会心倍率を極端に大きくしないと同じ価値の武器となりません(多分)

以上の結果から、相手の防御力が大きいほど会心率を上げるよりも
攻撃力を上げたほうが効果的だとも言えます

皆さんは会心率を上げるのが好きだと思いますが
それは効果がないということだと思います

でも自分の感覚ではあっているとは思えないんですね
違ったら数学得意な人は答え教えて下さい
やっぱり会心率を上げたほうが効果が高いと思うからです

しんどい。防御力と回避率についても同様に考えます

A2 = A1 / 1.25
Def1 = A1 * 3
Def2 = A1 * 2.4

Dmg1 = Atk * 4 - Def1 * 2 = Atk * 4 - A1 * 6
Dmg2 = Atk * 4 - Def2 * 2 = Atk * 4 - A1 * 4.8

回避率を eva とします。金属鎧は回避率を 0 %と考えました
Dmg1 = Dmg2 * (1.0 - eva)
Dmg2 > Dmg1 なのは防御力が低いほどダメージが大きくなるから
Dmg1 - Dmg2 = -Dmg2 * eva

1.2 * A1 = Dmg2 * eva

Atk = A1 *2 のとき
防具も武器と同じようにステータスの半分の値をとっていると考える
1.2 = 3.2 * eva
eva = 0.375

Atk = A1 *3 のとき
1.2 = 7.2 * eva
eva = 0.166...

Atk = A1 *100 のとき
1.2 = 395.2 * eva
eva = 0.003

ダメージが大きくなるほどダメージに差がなくなります
そうすると回避率が大きいほど効果が大きくなります
防御力を 25 %上昇させるより回避率を 25 %大きくしたほうが
戦闘を有利にすることができます
つまり、相手の攻撃力が高くなるほど防御力を上げるよりも
回避率を上げたほうが効果的
だと言えるのです

悩んでいるところがあって
やっぱりこれは正しいのか?ということです
本当に回避率を 25 %ぐらいにしていいのか
ボス戦で攻撃力が大きくなったとき回避率が 25 %もあると
回避率がないけれど防御力の高い防具と
回避率が高くて防御力が低い防具は同等の価値をえることができるのか
やっぱり防御力を上げたほうが強いような気がする

多分回避率を持つ防具の回避率を 10 %ぐらいにしてしまおうかと思います
また俊敏性によって回避率を上昇させたりするので小さくても…

デフォルトにある luk_effect_rate というステートを付着させる際に
運の値によって付着率が変化する割合を求める関数があります
1.0 + (user.luk - luk) * 0.001 と求めます
今回ステートの最大値は 9999 なので 500 の違いが 1.5 倍となります
ちょうどいい塩梅です
防具で 10 %にして盾で 5%ぐらいにすればいいかなぁと今は思っています

できるだけ同等の価値を持つように防具を作りました
少し問題ができて盾の防御力を低く設定していたので
それだけ盾の価値が下がってしまったことです
困るのは強い盾が早く購入できてしまうということです
なので盾に魔法防御力が上がる能力をつけることにしました


今できたのはアクターのステータスの決定、防具の設定
あとはモンスターが与えるダメージを考え
モンスターの能力値を決めることです

属性魔法や魔法剣みたいなスキルを決定して
職業固有の必殺技のスキルを早く考えて
ゲームを作ることにしたいです
今まではゲームを作るために必要な設定しか考えていません
やっとゲーム制作に取り掛かる気分です

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索