わかりやすさについてとやかく言わないけどさ、攻撃するってことは、モンスターのHPだとかが減るんだよね?
勇者.attack(モンスター)
って書いたとしてもさ、勇者.attackメソッドの中で、モンスターのHPを直接書き換えるわけじゃないでしょ?
直接書き換えてたら、モンスターに守備力だとか、耐性追加した時に、勇者側を書き換えないといけなくなる。
守備力だとか、耐性だとかは、モンスターの属性なので、影響はモンスター側で面倒見てもらいたいから、
攻撃でHPを減らすのは、モンスターのメソッド経由になると思う。
結局、
class 勇者 : method attack(モンスター: monster): monster.attackedBy(self.attackPower)
みたいなコードになると思うんだけど。
例えば、攻撃力取得メソッド。
interface 攻撃方法: /** 攻撃力取得 */ method getAttackPower();
フィールドは、攻撃方法によって違うかもしれないが、攻撃者を持っとけば汎用的かな。
/** 通常攻撃は力=攻撃力 */ class 通常攻撃 implements 攻撃方法: field _attacker constructor(攻撃者: attacker): self._attacker = attacker method getAttackPower(): return self._attacker.strength
/** 突撃は力*すばやさ=攻撃力 */ class 突撃 implements 攻撃方法: field _attacker constructor(攻撃者: attacker): self._attacker = attacker method getAttackPower(): return self._attacker.strength * self._attacker.agility
そうすると、攻撃方法が違っても、モンスターのattackedByメソッドの処理は共通
class モンスター: method attackedBy(攻撃方法: attackMethod): self._hp = self._hp - attackMethod.getAttackPower()
monster.attackedBy(new 通常攻撃(player)); monster.attackedBy(new 突撃(player));
例えばスーファミの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) 攻撃方法が増えるなら、攻撃方法を抽象化するでしょ。 攻撃方法型を作って モンスター....
モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。 ここの所は、今回の例ではいまいち見えづらい気がする。今回の例で複雑になっているのはモデルだ...
元増田です。ありがとうございます。 モデルで発生するイベントが多く、複雑になるほど、ビューとの関連は密になる。 ここの所は、今回の例ではいまいち見えづらい気がする。 ...