ページ 11

ステートのダメージ計算式について【】解決済み

Posted: 2016年8月06日(土) 07:12
by エコー
複数のステートのうちどれかにかかっている場合にダメージがあがるダメージ計算について質問です。
ダメージ計算式にa.atk * 4 * b.isStateAffected(4)と入れて毒がかかっているときにダメージを上げるようにしているんですが、これを毒だけではなく暗闇や、沈黙がかかっている場合でもダメージがあがるようにするにはどのように記述すればよろしいでしょうか?
b.isStateAffected(4,5,6)とかb.isStateAffected(4 || 5 || 6 )みたいな感じだったと思いますが、わかりません。
他に方法があるかと海外のも調べてみたのですが見つけられませんでした。

Re: ステートのダメージ計算式について

Posted: 2016年8月06日(土) 10:40
by トリアコンタン
残念ながら、ご提示のコードは動作しません。
まず、isStateAffectedは引数を一つしか取ることができないので、下のような書き方はできません。

コード: 全て選択

b.isStateAffected(4,5,6)
b.isStateAffected(4 || 5 || 6 )


多少冗長ではありますが、以下のように記述してください。

コード: 全て選択

b.isStateAffected(4) || b.isStateAffected(5) || b.isStateAffected(6)


また、計算式は1行での記述が前提になるので、特定の条件でダメージを変更したい場合、
条件演算子を使う必要があります。

・条件 (三項) 演算子
https://developer.mozilla.org/ja/docs/JavaScript/Reference/Operators/Conditional_Operator

上記を踏まえた場合の記述例です。

毒、暗闇、沈黙の場合ダメージが10000加算

コード: 全て選択

a.atk * 4 - b.def * 2 + (b.isStateAffected(4) || b.isStateAffected(5) || b.isStateAffected(6) ? 10000 : 0)


毒、暗闇、沈黙の場合ダメージが2倍

コード: 全て選択

(a.atk * 4 - b.def * 2) * (b.isStateAffected(4) || b.isStateAffected(5) || b.isStateAffected(6) ? 2 : 1)

Re: ステートのダメージ計算式について

Posted: 2016年8月06日(土) 11:28
by yamachan
おはようございます! :D

よこからスイマセン。
ちょうど先日、関数型言語の本を読んで影響されています ;)

以下のコードなのですが

コード: 全て選択

b.isStateAffected(4) || b.isStateAffected(5) || b.isStateAffected(6)

some() と組み合わせると以下のどちらかのようにも書けます。
10個とか、多めのステートをチェックする場合に使ってみてください。

コード: 全て選択

[4,5,6].some(b.isStateAffected.bind(b))
[4,5,6].some(b.isStateAffected, b)

ではでは。

※ some の第2引数を忘れていたので、使った例を追記しました

Re: ステートのダメージ計算式について

Posted: 2016年8月06日(土) 13:42
by エコー
トリアコンタン様、yamachan様、ありがとうございます。
すみませんが、いままでは見ようみまね程度でコードを組んでました。
なるほど、そのように記述するんですね。
そう思うと自分が書いたコードは確かに無理があります><
また条件演算子のページの紹介もありがとうございます。
yamachan様の方法もあるとは思いませんでした。
someとbind(b))は私の中のダメージ計算式では見たことない関数なので勉強になります。
どうやら私にはまだまだ学習しないといけないことがたくさんあるようですね。
まず条件演算子を完全に把握してないので初級から読み直してみようと思います。

お二人ともこんな初心的な質問にわざわざ付き合っていただきありがとうございました。