查看详细信息的网址
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)