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

アバター
エコー
記事: 14
登録日時: 2016年6月14日(火) 09:25

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

投稿記事by エコー » 2016年8月06日(土) 07:12

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

アバター
トリアコンタン
記事: 912
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

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

投稿記事by トリアコンタン » 2016年8月06日(土) 10:40

残念ながら、ご提示のコードは動作しません。
まず、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)
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
yamachan
記事: 107
登録日時: 2016年6月19日(日) 22:34

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

投稿記事by yamachan » 2016年8月06日(土) 11:28

おはようございます! :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引数を忘れていたので、使った例を追記しました
最後に編集したユーザー yamachan on 2016年8月06日(土) 14:52 [ 編集 1 回目 ]
Toshio Yamashita (yamachan)
Plugin https://github.com/yamachan/jgss-hack/blob/master/README.ja.md
Twitter https://twitter.com/yamachan360

私が作成して本サイトに投稿したコードは著作権を放棄し、利用・改変・配布など全て自由です。
ただし同じ投降内に制限を明記している場合はそちらが優先します。
アバター
エコー
記事: 14
登録日時: 2016年6月14日(火) 09:25

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

投稿記事by エコー » 2016年8月06日(土) 13:42

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

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

“MV:質問” へ戻る