【解決済み】スキルの計算式について教えてください。
【解決済み】スキルの計算式について教えてください。
こんにちは。
続けての質問失礼します。
スキルの計算式についてわからないことがあります。
物理100%依存
a.atk * 4 - b.def * 2
魔法100%依存
a.mat * 4 - b.mdf * 2
まずは、上記で合っていますか?
合っているなら、物理50%は「a.atk * 2 - b.def * 2」で、魔法50%は「a.mat * 2 - b.mdf * 2」ですよね?
では、10%~40%、60%~90%は、どういった式にすればいいのでしょうか?
また、「*3」や「*5」など奇数でもきちんと機能するのでしょうか?
教えていただけると助かります。
続けての質問失礼します。
スキルの計算式についてわからないことがあります。
物理100%依存
a.atk * 4 - b.def * 2
魔法100%依存
a.mat * 4 - b.mdf * 2
まずは、上記で合っていますか?
合っているなら、物理50%は「a.atk * 2 - b.def * 2」で、魔法50%は「a.mat * 2 - b.mdf * 2」ですよね?
では、10%~40%、60%~90%は、どういった式にすればいいのでしょうか?
また、「*3」や「*5」など奇数でもきちんと機能するのでしょうか?
教えていただけると助かります。
最後に編集したユーザー ゆ―― [ 2023年5月05日(金) 21:53 ], 累計 1 回
Re: スキルの計算式について教えてください。
まず、上記について、物理100%依存
a.atk * 4 - b.def * 2
魔法100%依存
a.mat * 4 - b.mdf * 2
まずは、上記で合っていますか?
「100%依存」がどういう意味なのか分からないのですが、
各能力値の使い方は作者が自由に決められるので、
必ずしも合っているとは言えない……という曖昧な回答になります。
次について、10%~40%、60%~90%は、どういった式にすればいいのでしょうか?
ダメージ計算式では計算結果として1個の値を決めるものなので、
「~」というのが何を指しているのか分かりませんが、
小数が使えますので、90%は 「* 0.9」になると思います。
こちらについては、奇数、偶数、小数どれも機能します。「*3」や「*5」など奇数でもきちんと機能するのでしょうか?
といったところで、以上をさくっと無視して、
ダメージ計算式について説明すると、
ダメージ計算式では、
小数を含む数値と、
+ 足し算
- 引き算
* 掛け算(×の代わり)
/ 割り算(÷の代わり)
( ) 計算順序を決めるカッコ
などの記号と、
以下の画像にある能力値を指定する文字列が使えます。
(高度なテクニックとしてJavaScriptも使えます)
それらを組み合わせて、ご自身の作りたい計算式を作ってください。
おまけ
ダメージ計算式内でJavaScriptを使うことについて気になる場合、
以下の拙作ゲームが少し勉強になるかもしれません。
俺の勉強【JavaScript】初歩
https://game.nicovideo.jp/atsumaru/games/gm9647
(ゲームアツマールのサービス終了までプレイ可能)
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
https://twitter.com/kuroudo119
Re: スキルの計算式について教えてください。
くろうどさま、返信ありがとうございます。
a.atk * 4 - b.def * 2
これが、最初の攻撃にあった式だと思うのですが、それを少し変更して、
Math.max((a.atk * 4 - b.def * 2),a.luk)
とする場合、*0.7をやるとしたら、
(Math.max((a.atk * 5 - b.def * 2),a.luk)) * 0.7
これで合っていますか?
もし、根本的に間違っている場合は、ご指摘いただけると助かります。
a.atk * 4 - b.def * 2
これが、最初の攻撃にあった式だと思うのですが、それを少し変更して、
Math.max((a.atk * 4 - b.def * 2),a.luk)
とする場合、*0.7をやるとしたら、
(Math.max((a.atk * 5 - b.def * 2),a.luk)) * 0.7
これで合っていますか?
もし、根本的に間違っている場合は、ご指摘いただけると助かります。
Re: スキルの計算式について教えてください。
で合っているかどうかは、(Math.max((a.atk * 5 - b.def * 2),a.luk)) * 0.7
ご自身のやりたい事によって変わりますので分かりませんが、
エラーは出ないと思います。
補足
Math.max((a.atk * 5 - b.def * 2),a.luk)
の部分で、(a.atk * 5 - b.def * 2) または a.luk のうち値の大きい値が選ばれ、
その後、* 0.7 をするので、
(a.atk * 5 - b.def * 2) * 0.7 または a.luk * 0.7 が結果となります。
これがやりたい事であれば合っています。
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
https://twitter.com/kuroudo119
Re: スキルの計算式について教えてください。
値の大きいほうとは、くろうど さんが書きました: Math.max((a.atk * 5 - b.def * 2),a.luk)
の部分で、(a.atk * 5 - b.def * 2) または a.luk のうち値の大きい値が選ばれ、
その後、* 0.7 をするので、
(a.atk * 5 - b.def * 2) * 0.7 または a.luk * 0.7 が結果となります。
(a.atk * 5 - b.def * 2)で出た数値か、 a.luk=1? のうち大きいほうという意味ですよね?
Math.max((a.atk * 5 - b.def * 2),a.luk)
この式は、「結果が数値0だった場合に最終的なダメージを1で保証する」ということで合っていますか?
合っているなら、私がやりたいことは
「結果の数値が0だった場合は1を最低保証、それ以外だったら(a.atk * 5 - b.def * 2) * 0.5のダーメージ」です。
分かりづらくて申し訳ないですが、つまり、 a.luk * 0.7はしたくないです。
最低保証の1or (a.atk * 5 - b.def * 2) * 0.5の結果、どちらかがダメージとして算出される式を作りたいです。
この場合は、どういった式にすればいいのでしょうか?
Re: スキルの計算式について教えてください。
順を追って書いていきます。
(a.luk=1なのかどうかは設定次第です)
ただし、a.lukが常に1であるならばYesとも言えます。
この場合でも、特に左側(a.atk * 5 - b.def * 2 の部分)はマイナス(0以下の値)になる可能性もあります。
前者だとしたら、以下でも良さそうです。
(2って部分がスマートではないですが)
また、この計算式中に変化する値はなさそうなので、
三項演算子 (a ? b : c) というものを使うのが手っ取り早い気がします。
「結果の数値が0だった場合は」とのことなので、あえて「=== 0」としていますが、
マイナス値を考慮すると「> 1」の方が良さそうです。
Yesです。値の大きいほうとは、
(a.atk * 5 - b.def * 2)で出た数値か、 a.luk=1? のうち大きいほうという意味ですよね?
(a.luk=1なのかどうかは設定次第です)
この部分だけを切り取ると No です。Math.max((a.atk * 5 - b.def * 2),a.luk)
この式は、「結果が数値0だった場合に最終的なダメージを1で保証する」ということで合っていますか?
ただし、a.lukが常に1であるならばYesとも言えます。
この場合でも、特に左側(a.atk * 5 - b.def * 2 の部分)はマイナス(0以下の値)になる可能性もあります。
「結果の数値」というのが、(a.atk * 5 - b.def * 2) なのか (a.atk * 5 - b.def * 2) * 0.5 なのか分かりませんが、私がやりたいことは
「結果の数値が0だった場合は1を最低保証、それ以外だったら(a.atk * 5 - b.def * 2) * 0.5のダーメージ」です。
前者だとしたら、以下でも良さそうです。
(2って部分がスマートではないですが)
コード: 全て選択
Math.max(a.atk * 5 - b.def * 2, 2) * 0.5
三項演算子 (a ? b : c) というものを使うのが手っ取り早い気がします。
コード: 全て選択
(a.atk * 5 - b.def * 2) === 0 ? (a.atk * 5 - b.def * 2) * 0.5 : 1
マイナス値を考慮すると「> 1」の方が良さそうです。
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
https://twitter.com/kuroudo119
Re: スキルの計算式について教えてください。
すみません、ずっと書き間違えていました。くろうど さんが書きました: 「結果の数値」というのが、(a.atk * 5 - b.def * 2) なのか (a.atk * 5 - b.def * 2) * 0.5 なのか分かりませんが、
前者だとしたら、以下でも良さそうです。
(2って部分がスマートではないですが)コード: 全て選択
Math.max(a.atk * 5 - b.def * 2, 2) * 0.5
Math.max(a.atk * 5 - b.def * 2) * 0.5
ではなく、
Math.max(a.atk * 4 - b.def * 2) * 0.5
です。
「結果の数値」は、(a.atk * 4 - b.def * 2) * 0.5 のほうです。
例えば、
「a.atk * 4」=100
「b.def * 2」=50
とします。
「(a.atk * 4 - b.def * 2) * 0.5」
(100-50)*0.5=25
①a.luk=1
②a.luk=5
「(Math.max((a.atk * 4 - b.def * 2),a.luk)) * 0.5」この式だとしたら、上の数値に当てはめると
ダメージは、
①「25」or「1」
②「25」or「5」
どっちなんでしょうか?
対象のlukが1だろうが100だろうが「25」or「1」?
対象のlukの値により変動する?
後者だとしたら、もし(Math.max((a.atk * 4 - b.def * 2),a.luk)) * 0.5の結果が、(a.atk * 4 - b.def * 2) * 0.5よりa.lukが上回っていたら、ダメージは高くなってしまうのでしょうか?
(a.atk * 4 - b.def * 2) * 0.5 = 25
a.luk = 100
だった場合は、どちらか高いほうなので、lukの影響を受け、最終ダメージは100となってしまうのでしょうか?
ここでも少し分からないことがあります。また、この計算式中に変化する値はなさそうなので、
三項演算子 (a ? b : c) というものを使うのが手っ取り早い気がします。「結果の数値が0だった場合は」とのことなので、あえて「=== 0」としていますが、コード: 全て選択
(a.atk * 5 - b.def * 2) === 0 ? (a.atk * 5 - b.def * 2) * 0.5 : 1
マイナス値を考慮すると「> 1」の方が良さそうです。
=== 0 ?
とはどういう意味か?
最後の * 0.5 : 1の : 1はどういう意味か?
この2点を教えていただけると助かります。
何度もすみません。
長文失礼いたしました。
Re: スキルの計算式について教えてください。
①②ともに、「25」です。「結果の数値」は、(a.atk * 4 - b.def * 2) * 0.5 のほうです。
例えば、
「a.atk * 4」=100
「b.def * 2」=50
とします。
「(a.atk * 4 - b.def * 2) * 0.5」
(100-50)*0.5=25
①a.luk=1
②a.luk=5
「(Math.max((a.atk * 4 - b.def * 2),a.luk)) * 0.5」この式だとしたら、上の数値に当てはめると
ダメージは、
①「25」or「1」
②「25」or「5」
どっちなんでしょうか?
a.lukよりも「50」の方が値が大きいためです。
(Math.max() の外に「* 0.5」があるようなのでMath.maxの比較対象は「(100-50)=50」です)
lukの値により変動します。対象のlukが1だろうが100だろうが「25」or「1」?
対象のlukの値により変動する?
後者だとしたら、もし(Math.max((a.atk * 4 - b.def * 2),a.luk)) * 0.5の結果が、(a.atk * 4 - b.def * 2) * 0.5よりa.lukが上回っていたら、ダメージは高くなってしまうのでしょうか?
(a.atk * 4 - b.def * 2) * 0.5 = 25
a.luk = 100
だった場合は、どちらか高いほうなので、lukの影響を受け、最終ダメージは100となってしまうのでしょうか?
なので、lukが100なら100になります。
(a.luk なのでスキル使用者のlukである点には注意してください)
そのため、ダメージの最低保証値が 1 であるならば、Math.max()内に 1 と書くことになります。
三項演算子を使用する場合でも 1 にしたいのであれば 1 と書くことになります。
詳しくは以下のリンク先をご覧ください。
Math.max()
https://developer.mozilla.org/ja/docs/W ... s/Math/max
三項演算子(a ? b : c)
https://developer.mozilla.org/ja/docs/W ... l_operator
厳密等価(===)
https://developer.mozilla.org/ja/docs/W ... t_equality
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
https://twitter.com/kuroudo119
Re: スキルの計算式について教えてください。
詳しく教えていただきありがとうございます。
貼っていただいたリンク先のものも、とても勉強になりました。
これの意味は理解できました。
ちなみになんですけど、
この式のa.lukをなくして、
にした場合は、最低保証ダメージ1ということになりますか?
どちらか大きいほう、a.atk * 4 - b.def * 2) * 0.5の結果が1未満だった場合は、最低保証の1ダメージということになりますよね?
ただ、最初に言ったことが気になっていて、上記の式だと
①(a.atk * 4 - b.def * 2) * 0.5
②1 * 0.5
①の結果が仮に1未満だったとします。
その場合は、②が採用なので1 * 0.5となるわけですが、最終ダメージに小数点で表示することはないですよね? この場合は、1ダメージということになるのでしょうか?
でもやはり、くろうどさまがおっしゃったように、
の式のほうが楽なんでしょうか。
上記の場合は、
*0.5のところを変えれば120%や200%もできますよね?(*1.2や*2など)
貼っていただいたリンク先のものも、とても勉強になりました。
コード: 全て選択
(a.atk * 4 - b.def * 2) === 0 ? (a.atk * 4 - b.def * 2) * 0.5 : 1
ちなみになんですけど、
コード: 全て選択
(Math.max((a.atk * 4 - b.def * 2),a.luk)) * 0.5
コード: 全て選択
(Math.max((a.atk * 4 - b.def * 2),1)) * 0.5
どちらか大きいほう、a.atk * 4 - b.def * 2) * 0.5の結果が1未満だった場合は、最低保証の1ダメージということになりますよね?
ただ、最初に言ったことが気になっていて、上記の式だと
①(a.atk * 4 - b.def * 2) * 0.5
②1 * 0.5
①の結果が仮に1未満だったとします。
その場合は、②が採用なので1 * 0.5となるわけですが、最終ダメージに小数点で表示することはないですよね? この場合は、1ダメージということになるのでしょうか?
でもやはり、くろうどさまがおっしゃったように、
コード: 全て選択
(a.atk * 4 - b.def * 2) === 0 ? (a.atk * 4 - b.def * 2) * 0.5 : 1
上記の場合は、
*0.5のところを変えれば120%や200%もできますよね?(*1.2や*2など)
Re: スキルの計算式について教えてください。
小数点をどうするかは実際にツクールで動かして確認してもらうのが確実です。ただ、最初に言ったことが気になっていて、上記の式だと
①(a.atk * 4 - b.def * 2) * 0.5
②1 * 0.5
①の結果が仮に1未満だったとします。
その場合は、②が採用なので1 * 0.5となるわけですが、最終ダメージに小数点で表示することはないですよね? この場合は、1ダメージということになるのでしょうか?
切り捨てて 0 ダメージのような気はしますが……曖昧です。
ちなみに、
とのことなので、「結果の数値」は、(a.atk * 4 - b.def * 2) * 0.5 のほうです。
Math.maxのカッコの中に、「* 0.5」を入れちゃって良いと思うんですが、
入れられないとお考えでしょうか?
つまり、↓このようにする。
コード: 全て選択
Math.max((a.atk * 4 - b.def * 2) * 0.5, 1)
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
https://twitter.com/kuroudo119