from abc import ABCMeta, abstractmethod


class Skill:

    """
    :param attacking_hero 攻擊者
    :param attacked_hero 被攻擊者
    :return 攻擊傷害值
    """

    @abstractmethod
    def attack(self, attacking_hero, attacked_hero):
        pass


class Colliding(Skill):

    def __str__(self):
        return "COLLIDING!"

    def attack(self, attacking_hero, attacked_hero):
        injury = attacking_hero.strength - attacked_hero.defense
        attacked_hero.lost_hp(injury)
        return injury


class WaterBall(Skill):

    def __str__(self):
        return "WATER BALL!"

    def attack(self, attacking_hero, attacked_hero):
        attacking_hero.mp = attacking_hero.mp - 5
        injury = attacking_hero.wisdom * 2
        attacked_hero.lost_hp(injury)
        return injury

from abc import ABCMeta, abstractmethod


class Skill:

    """
    :param attacking_hero 攻擊者
    :param attacked_hero 被攻擊者
    :return 攻擊傷害值
    """

    @abstractmethod
    def attack(self, attacking_hero, attacked_hero):
        pass


class Colliding(Skill):

    def __str__(self):
        return "COLLIDING!"

    def attack(self, attacking_hero, attacked_hero):
        injury = attacking_hero.strength - attacked_hero.defense
        attacked_hero.lost_hp(injury)
        return injury


class WaterBall(Skill):

    def __str__(self):
        return "WATER BALL!"

    def attack(self, attacking_hero, attacked_hero):
        attacking_hero.mp = attacking_hero.mp - 5
        injury = attacking_hero.wisdom * 2
        attacked_hero.lost_hp(injury)
        return injury

:param attacking_hero 攻擊者     :param attacked_hero 被攻擊者     :return 攻擊傷害值