李白和貂蝉打主宰和小兵

要求:
实验一:
主要实现功能:
A、模拟场景,某个英雄与某个怪物打斗,英雄可以对怪物释放技能,怪物也可以对英雄释放技能,双方每释放一个技能输出对方的血量值
B、模拟场景,两个英雄与某个怪物打斗,英雄可以对怪物释放技能,怪物也可以对英雄释放技能,
双方每释放一个技能输出对方的血量值(考虑怪物释放的技能是指向性技能还是群伤技能)
1、设计一个Hero类作为基类,基类中有哪些属性和方法自行定义
2、设计一个Libai类作为Hero类的派生类,类中有哪些属性和方法自行定义,设计一个Diaochan类作为Hero类的派生类,类中有哪些属性和方法自行定义
3、设计一个Gost类作为一个基类,基类中有哪些属性和方法自行定义
4、设计一个Xiaobing类作为派生类
设计一个Drag类作为派生类
5、设计一个技能类

import random as rn  # 引入随机数


class Skill(object):
    def __init__(self, name, value):
        self.name = name
        self.value = value


class Hero(object):
    def __init__(self, name, blood, skill):
        self.name = name
        self.blood = blood
        self.skill = skill

    def attack(self, gost):
        i = rn.randint(0, 1)
        gost.blood -= self.skill[i].value
        if gost.blood < 0:
            gost.blood = 0
        print(self.name, "使用", self.skill[i].name, "攻击了",
              gost.name, "造成了", self.skill[i].value, ,
              gost.name, "剩余", gost.blood, )

    def has_living(self):
        if self.blood > 0:
            return True
        return False


class Libai(Hero):
    def __init__(self):
        self.a = Skill('普通攻击', 20)
        self.s = Skill('青莲剑歌', 40)
        self.skill = [self.a, self.s]
        super().__init__('李白', 100, self.skill)

    def get_skill(self):
        return self.a


class Diaochan(Hero):
    def __init__(self):
        self.a = Skill('普通攻击', 10)
        self.s = Skill('落-红雨', 50)
        self.skill = [self.a, self.s]
        super().__init__('貂蝉', 100, self.skill)

    def get_skill(self):
        return self.a


class Gost(object):
    def __init__(self, name, blood, power):
        self.name = name
        self.blood = blood  
        self.power = power 

    def attack(self, hero):
        hero.blood -= self.power
        if hero.blood < 0:
            hero.blood = 0
        print(self.name, "攻击了", hero.name, "造成了", self.power,
              , hero.name, "剩余", hero.blood, )

    def has_living(self):
        if self.blood > 0:
            return True
        return False


class Xiaobing(Gost):
    def __init__(self):
        super().__init__("小兵", 100, 5)


class Drag(Gost):
    def __init__(self):
        super().__init__("大龙", 200, 20)
        self.angry = 40

    def attack(self, hero):
        if self.blood < 100:
            hero.blood -= self.angry
        else:
            hero.blood -= self.power
        if hero.blood < 0:
            hero.blood = 0
        if self.blood < 100:
            print(self.name, "使用主宰之怒,攻击了", hero.name, "造成了",
                  self.angry, , hero.name, "剩余", hero.blood, )
        else:
            print(self.name, "攻击了", hero.name, "造成了",
                  self.power, , hero.name, "剩余", hero.blood, )


if __name__ == '__main__':
    lb = Libai()
    dc = Diaochan()
    xb = Xiaobing()
    drag = Drag()
    # 这是李白和大龙的战斗
    print(lb.name + ' 的初始血量:' + str(lb.blood))
    print(drag.name + ' 的初始血量:' + str(drag.blood))

    while lb.has_living() and drag.has_living():
        if lb.has_living() and drag.has_living():
            lb.attack(drag)
        if lb.has_living() and drag.has_living():
            drag.attack(lb)

    if lb.has_living():
        print(lb.name + ' 胜利!')
    elif drag.has_living():
        print(drag.name + ' 胜利!')
    else:
        print("同归于尽")
    print("游戏结束")
    # 下面代码是李白和小兵的战斗
    # print(lb.name + ' 的初始血量:' + str(lb.blood))
    # print(xb.name + ' 的初始血量:' + str(xb.blood))
    #
    # while lb.has_living() and xb.has_living():
    # if lb.has_living() and xb.has_living():
    # lb.attack(xb)
    # if lb.has_living() and xb.has_living():
    # xb.attack(lb)
    #
    # if lb.has_living():
    # print(lb.name + ' 胜利!')
    # elif xb.has_living():
    # print(xb.name + ' 胜利!')
    # else:
    # print("同归于尽")
    # print("游戏结束")

还有各种不同的英雄和怪物的打法,只需修改变量和参数就好了