python_练习(小李飞刀大战伏地魔)

查看详细信息的网址

http://www.pythontutor.com/visualize.html#mode=edit

python_练习(小李飞刀大战伏地魔)


# 小李飞刀大战伏地魔
# 通过对象来实现
# 小李将飞刀放入刀袋中,然后带着刀带去找伏地魔,小李飞刀从刀带拿出飞刀飞伏地魔,伏地魔受到伤害
#  需要的类:
#   Person
#       -属性
#       -name 姓名
#       -hp   生命值
#       -kb   刀带
#       -方法
#       -带刀带(take_kb)
#       -放刀(put_knife_in_kb)
#       -取刀(get_knife)
#       -飞刀(fly_knife)
#       -受伤(掉血 injured)
#
#   knife_bag
#       属性:-name 名字   -size 容量   -bag[] 放刀
#       方法:
#           -放刀 put_in_bag
#           -取刀 get_knife
#   knife
#       属性:
#           -name 名字
#           -attack 伤害
#       方法:
#           -伤害 damage

class Knife:
    '''
        定义飞刀的类
    '''

    def __init__(self, name, attack):
        self.name = name  # 刀名
        self.attack = attack  # 攻击力

    def damage(self, other):
        '''
            造成伤害的方法
        '''
        other.injured(self.attack)

    def __str__(self):
        return f'{self.name}攻击力为 {self.attack}'


# kn = Knife('小刀', 10)


# print(kn)


#   knife_bag
#       属性:-name 名字   -size 容量   -bag[] 放刀
#       方法:
#           -放刀 put_in_bag
#           -取刀 get_knife

class Knife_bag:

    def __init__(self, name, size):
        self.name = name  # 名字
        self.size = size  # 容量
        self.bag = []  # 装刀的容器

    def put_in(self, kf):
        '''
            把刀放入到袋中
        '''
        # 判断满没满
        if len(self.bag) < self.size:
            self.bag.append(kf)

    def get_knife(self):
        '''
        从袋中取刀
        '''
        if len(self.bag) == 0:
            return None
        return self.bag.pop()

    def kn_count(self):
        return len(self.bag)

    def __str__(self):
        if self.bag:
            return f'{self.name}, 容量是{self.size}, 现在有{self.kn_count()}把{self.bag[0]}'
        else:
            return f'{self.name}, 容量是{self.size}, 现在是空的'


# kb = Knife_bag('NIKE刀带', 10)

# kb.put_in(Knife('小刀', 10))

# print(kb.get_knife())
# print(kb.get_knife())
# print(kb)

#   Person
#       -属性
#       -name 姓名
#       -hp   生命值
#       -kb   刀带
#       -方法
#       -带刀带(take_kb)
#       -放刀(put_knife_in_kb)
#       -取刀(get_knife)
#       -飞刀(fly_knife)
#       -受伤(掉血 injured)

class Person(object):
    '''表示人的类'''

    def __init__(self, name):
        self.name = name  # 名字
        self.hp = 100  # 生命值
        self.kb = None  # 刀袋

    def put_knife_in_kb(self, kf, kb):
        '''
            将刀放入刀袋中
        '''
        kb.put_in(kf)

    def take_kb(self, kb):
        '''将刀带带到身上'''
        self.kb = kb

    def get_knife(self):
        '''取刀'''
        if self.kb:
            return self.kb.get_knife()

    def fly_knife(self, other):
        # 取刀
        kf = self.get_knife()
        # 检查刀有没有
        if kf:
            # 飞
            kf.damage(other)

    def injured(self, attack):
        '''受伤'''
        self.hp -= attack

        if self.hp < 0:
            self.hp = 0

    def __str__(self):
        if not self.hp:
            return f'{self.name} 生命值{self.hp} 已挂'

        if self.kb:
            return f'{self.name} 生命值{self.hp} 带着 {self.kb}'

        return f'{self.name} 生命值{self.hp} 什么也没拿'


# 创建一个人
# hero = Person('李寻欢')
# hero.put_knife_in_kb(Knife('小刀', 10), kb)
# hero.take_kb(kb)
# print(hero)

# 创建两个人
hero = Person('小李')
npc = Person('伏地魔')

# 创建刀袋
kb = Knife_bag('NIKE刀带', 20)
# 小李,向袋中装刀
for i in range(20):
    hero.put_knife_in_kb(Knife('小刀', 10), kb)

# 将刀袋带在身上
hero.take_kb(kb)

print(hero)
print(npc)

print('-'* 60)

# 发起攻击
for i in range(15):
    hero.fly_knife(npc)
    print(npc)

python_练习(小李飞刀大战伏地魔)

上一篇:如何获取Javascript module metadata的parent module


下一篇:QSEIS、QSSP、PSGRN/PSCMP简介