ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-03-21 22:59:11  阅读:211  来源: 互联网

标签:小李飞刀 name kb python self bag def knife 伏地


查看详细信息的网址

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

在这里插入图片描述


# 小李飞刀大战伏地魔
# 通过对象来实现
# 小李将飞刀放入刀袋中,然后带着刀带去找伏地魔,小李飞刀从刀带拿出飞刀飞伏地魔,伏地魔受到伤害
#  需要的类:
#   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)

在这里插入图片描述

标签:小李飞刀,name,kb,python,self,bag,def,knife,伏地
来源: https://blog.csdn.net/qq_39128254/article/details/115058047

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有