守備力だとか、耐性だとかは、モンスターの属性なので、影響はモンスター側で面倒見てもらいたいから、
攻撃でHPを減らすのは、モンスターのメソッド経由になると思う。
結局、
class 勇者 : method attack(モンスター: monster): monster.attackedBy(self.attackPower)みたいなコードになると思うんだけど。
ぐうの音もでません、その通りですね。
攻撃方法の実装もわかりました。
遅延攻撃や即死攻撃に対応したい場合、例えば次のように変更すればよいでしょうか。
interface 攻撃方法: /** 対称を攻撃 */ method apply(攻撃対象: atackee);
それで、その他のクラスは下記のような感じに。
class 勇者 : // 中略 method attack(モンスター: monster): self.currentAttackMethod.apply(monster) class 即死攻撃 : implements 攻撃方法 method apply(攻撃対象: atackee): atackee.kill class 通常攻撃 : implements 攻撃方法 // 中略 method apply(攻撃対象: atackee): atackee.attackedBy(self.getAttackPower)
小一時間考えてみましたが、通常攻撃は
new 通常攻撃(player)
より
new 通常攻撃(player.getAttackPower)
の方が良いかもしれませんね。攻撃が放たれたら、その攻撃を誰が行ったかは関係なくなる、とした方が情報の流れがすっきりすると思います。
攻撃者 → 攻撃方法(突撃・斬撃・ジャンプ・即死攻撃) → 攻撃対象
例えばスーファミのFFみたいな、古典的なRPGの戦闘シーンを作っていて、「勇者がモンスターを攻撃する」。 勇者.attack(モンスター); という設計だったとする。 これに「モンスターが毒...
MVC以前にオブジェクト指向がしっくりきてないでしょ。 「勇者がモンスターを攻撃する」。 勇者.attack(モンスター); という設計だったとする。 これが既にオブジェクト指向的じゃな...
ご意見くださって、ありがとうございます。 例にあげたRPGのモデル設計はhttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1178047006を参考にしました。 ですが自分で書くとしても、十中八九そ...
一理あるご意見をいただきました。ありがとうございます。 英語として読みにくいなら、メソッド名のほうを変えるよ。 モンスター.attackedBy(勇者.attackPower) 誤解を招いてしまったよ...
わかりやすさについてとやかく言わないけどさ、攻撃するってことは、モンスターのHPだとかが減るんだよね? 勇者.attack(モンスター) って書いたとしてもさ、勇者.attackメソッドの中で、...
守備力だとか、耐性だとかは、モンスターの属性なので、影響はモンスター側で面倒見てもらいたいから、 攻撃でHPを減らすのは、モンスターのメソッド経由になると思う。 結局、 c...
英語として読みにくいなら、メソッド名のほうを変えるよ。 モンスター.attackedBy(勇者.attackPower) 攻撃方法が増えるなら、攻撃方法を抽象化するでしょ。 攻撃方法型を作って モンスター....
モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。 ここの所は、今回の例ではいまいち見えづらい気がする。今回の例で複雑になっているのはモデルだ...
元増田です。ありがとうございます。 モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。 ここの所は、今回の例ではいまいち見えづらい気がする。 ...