魔法に引き続き「攻撃」の実装について検討します。
攻撃は単純に自分(from)の攻撃力と対象(to)の防御力からダメージを計算すればいいわけですが、武器の種類によって追加ダメージがあったり複数攻撃だったりするわけで、魔法にならって武器に攻撃の責務を任せたほうがいいかもしれません。
ただ、武器の場合、そのほとんどはデフォルトのストラテジーでOKって感じでしょうか。
こうしてみると結局、WeaponもMagicもToolも集約できるのかも。
当たり判定
武器での攻撃の場合まず、攻撃は当たったのか(自分自身の命中度)、相手に避けられはしなかったか、そしてダメージを与えることが出来たのか等の判定をするのが一般的でしょうか。
これらの判定はCreatureとWeaponストラテジーに実装することにします。ただし、それぞれの条件についてはゲームデザインの範疇なので割愛します。
そしてWeaponの攻撃メソッドの中で、当たり判定、回避、そしてダメージ判定を呼び出します。
Creature.prototype.isHit = function(to) {} Creature.prototype.isAvoid = function(to) {} Weapon.prototype.atack = function(from, to) { this._strategy.atack(from, to); } WeaponStg.prototype.isHit = function(from, to) {} WeaponStg.prototype.isAvoid = function(from, to) {} WeaponStg.prototype.getDamage = function(from, to) { return from.getAtack() - to.getDefence() / 2;//攻撃力-防御力/2(ドラクエ風?) } WeaponStg.prototype.atack = function(from, to) { if(!from.isHit(to)) { return false; //ミス } if(to.isAvoid(from)) { return false; //回避された } var hp = this.getDamage(from, to); from.hp(from.hp() - hp > 0 ? hp : from.hp()); }