m0_67411767 2022-05-21 00:37 采纳率: 94.1%
浏览 44
已结题

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

img


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

  • 写回答

2条回答 默认 最新

  • 沐沐不是沫 2022-05-21 16:03
    关注

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

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 5月21日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持