如何用Python面向对象解决问题

img


如何解决以上英雄类的问题,以面向对象解决,属开放性问题,解决问题

你好!
因为题目比较有趣就尝试写了一下,代码如下:
若有帮助,请采纳!
注:因为写得比较匆忙还没优化,所以有点长

class equip:
    def __init__(self, name=None, hp=0, ad=0, ap=0, dd=0, dp=0):
        self.name = name
        self.hp = hp
        self.ad = ad
        self.ap = ap
        self.dd = dd
        self.dp = dp

    def attribute_list(self):
        return [self.hp, self.ad, self.ap, self.dd, self.dp]

class skill():
    def __init__(self,name, basic, adp, app):
        self.name = name
        self.basic = basic
        self.adp = adp
        self.app = app

    def damage(self, ad, ap):
        if ad >= ap:
            Attack_type = '物理攻击'
            damage = self.basic + (1 + self.adp) * ad
        else:
            Attack_type = '魔法攻击'
            damage = self.basic + (1 + self.app) * ap
        return damage, Attack_type

class hero():
    list = [0, 0, 0, 0, 0]
    def __init__(self, name, hp=0, ad=0, ap=0, dd=0, dp=0):
        self.name = name
        self.hp = hp
        self.ad = ad
        self.ap = ap
        self.dd = dd
        self.dp = dp
        self.equipment()

    def equipment(self, list= list):
        self.hp = self.hp + list[0]
        self.ad = self.ad + list[1]
        self.ap = self.ap + list[2]
        self.dd = self.dd + list[3]
        self.dp = self.dp + list[4]

    def fight(self,target, hero_damage, target_damage):
        while True:
            if self.ad > target.ad:
                target.hp -= hero_damage
                if target.hp <= 0:
                    print('hero胜利!')
                    break
            else:
                self.hp -= target_damage
                if self.hp <= 0:
                    print('target胜利!')
                    break

    def attack(self, damage, Attack_type, target):
        if Attack_type == '物理攻击':
            hero_damage = ((self.ad * 2 + damage) * (1000 - target.dd)) / 1000 + \
                          ((self.ap * 2) * (1000 - target.dp)) / 1000
        else:
            hero_damage = ((self.ad * 2) * (1000 - target.dd)) / 1000 + \
                          ((self.ap * 2 + damage) * (1000 - target.dp)) / 1000
        return hero_damage

if __name__ == "__main__":
    Equip = equip('初始木棍',4,5,0,2) # 英雄装备属性
    Hero = hero('小米',200,18,0,1,1) #英雄的基本属性
    Hero.equipment(Equip.attribute_list()) # 英雄装上装备
    Hero_skill = skill('当头一棒', 8, 2, 0)  # 英雄使用的技能

    target_Equip = equip('奇怪的棒棒糖', 4, 4, 2, 2)  # 敌人装备的属性
    target = hero('敌人', 250, 30, 22, 3, 3)  # 定义敌人的属性
    target.equipment(target_Equip.attribute_list()) # 敌人装上装备
    target_skill = skill('无情狗叫', 12, 3, 8)  # 敌人使用的技能

    damage, Attack_type = Hero_skill.damage(Hero.ad, Hero.ap) # 返回技能的伤害 & 技能的类型
    hero_damage = Hero.attack(damage, Attack_type, target)  # 英雄每次给敌人造成的总伤害

    tdamage,target_type = target_skill.damage(target.ad, target.ap) # 返回敌人技能的伤害和属性
    target_damage = target.attack(tdamage, target_type, Hero) # 敌人每次给英雄造成的总伤害

    # 战斗开始
    Hero.fight(target, hero_damage, target_damage)

结果如下:

img

这里有一个相同问题: 请查看是否对问题有帮助~
https://ask.csdn.net/questions/7723224