如何解决以上英雄类的问题,以面向对象解决,属开放性问题,解决问题
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)
结果如下:
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录