더북(TheBook)

FireMonster 클래스와 IceMonster 클래스는 공통된 부분이 많으므로 이 부분을 묶어 기본 클래스인 Monster 클래스에 둡니다.

코드 7-14 oop2/oop2_3/character.py ③

# 불과 얼음 몬스터는 모두 Character 클래스에서 추가된
# attack_kind 멤버를 가지고 있으며
# attack( ) 메서드와 get_damage( ) 메서드는 같은 행동을 한다
# 공통된 부분은 Monster라는 부모 클래스를 만들어 거기에 둔다
class Monster(Character):
    def _ _init__(self, name, hp, power):
        super().__init__(name, hp, power)
        self.attack_kind = 'None'

    def attack(self, other, attack_kind):
        if self.attack_kind = = attack_kind:
            other.get_damage(self.power, attack_kind)

    # 플레이어가 불 공격을 할 때
    # 공격받는 객체가 얼음 몬스터라면 체력이 깎이고
    # 공격받는 객체가 불 몬스터라면 오히려 체력이 늘어난다
    def get_damage(self, power, attack_kind):
        '''
        몬스터는 자신과 타입이 같은 공격을 당하면
        오히려 체력이 늘어납니다
        조심해서 공격하세요
        '''
        if self.attack_kind = = attack_kind:
            self.HP += power
        else:
            self.HP -= power

    def get_attack_kind(self):
        return self.attack_kind

class IceMonster(Monster):
    def _ _init__(self, name = 'Ice monster', hp = 50, power = 10):
        super().__init__(name, hp, power)
        self.attack_kind = 'ICE'

class FireMonster(Monster):
    def _ _init__(self, name = 'Fire monster', hp = 50, power = 20):
        super().__init__(name, hp, power)
        self.attack_kind = 'FIRE'

    # 메서드 추가
    # FireMonster만의 행동
    def fireball(self):
        print('fireball')
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.