# 咱们设计一个游戏人物类,让实例化几个对象让这几个游戏人物实现互殴的效果
#
# class Gamerole:
#
# def __init__(self,name,ad,hp):
# self.name = name
# self.ad = ad
# self.hp = hp
#
# def attack(self,p1):
# p1.hp = p1.hp - self.ad
# print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血')
#
# gailun = Gamerole('盖伦',10,100)
# yasuo = Gamerole('亚索',20,80)
# 盖伦攻击亚索
# gailun.attack(yasuo)
# 亚索攻击盖伦
# yasuo.attack(gailun)
# 但是这样互相攻击没有意思,一般游戏类的的对战方式要借助武器,武器是一个类,
# 武器类包含的对象很多:刀枪棍剑斧钺钩叉等等,所以咱们要写一个武器类。
#
# class Gamerole:
#
# def __init__(self,name,ad,hp):
# self.name = name
# self.ad = ad
# self.hp = hp
#
# def attack(self,p1):
# p1.hp = p1.hp - self.ad
# print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血')
#
# class Weapon:
# def __init__(self,name,ad):
# self.name = name
# self.ad = ad
#
# def weapon_attack(self,p1,p2):
# p2.hp = p2.hp - self.ad - p1.ad
# print(f'{p1.name}利用{self.name}攻击了{p2.name},{p2.name}还剩{p2.hp}血')
#
#
# gailun = Gamerole('盖伦',10,100)
# yasuo = Gamerole('亚索',20,80)
# pillow = Weapon('绣花枕头',2)
# pillow.weapon_attack(gailun,yasuo)
# 但是上面这么做不好,利用武器攻击是人类,人类是动作的发起者,所以不能是pillow武器对象,而是人类利用武器攻击对方
class Gamerole: # 定义一个游戏人物类
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p1): # 人类基础伤害
p1.hp = p1.hp - self.ad
print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血')
def equip_weapon(self,wea):
# print(self) 谁调用equip_weapon,即self=调用者
# print(wea) wea等于调用者传的值
self.wea = wea # 组合,给一个对象封装一个属性,该属性是另一个类的对象
class Weapon: # 定义一个武器类
def __init__(self,name,ad):
self.name = name
self.ad = ad
def weapon_attack(self,p1,p2): # 武器攻击伤害
p2.hp = p2.hp - self.ad - p1.ad
print(f'{p1.name}利用{self.name}攻击了{p2.name},{p2.name}还剩{p2.hp}血')
# 实例化三个人物对象:
xiaoyang = Gamerole('小阳',10,100)
xiaoming = Gamerole('小明',30,90)
pillow = Weapon('绣花枕头',50)
# 给人物装备武器对象
# print(xiaoyang)
xiaoyang.equip_weapon(pillow) # 这步相当于 调用def equip_weapon方法,即self=xiaoyang=Gamerole ,wea=pillow=Weapon
xiaoming.equip_weapon(pillow)
# 开始攻击
# xiaoyang 攻击
xiaoyang.wea.weapon_attack(xiaoyang,xiaoming)
# xiaoming 攻击
xiaoming.wea.weapon_attack(xiaoming,xiaoyang)