python类的组合

模拟英雄联盟写一个游戏人物的类
要求:
(1)创建一个 Game_role的类.
(2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
(3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
例: 实例化一个对象 盖伦,ad为10, hp为100
实例化另个一个对象 剑豪 ad为20, hp为80
盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能

class GameRole: #  英雄类
    def __init__(self, name, ad, hp):
        self.name = name
        self.ad = ad
        self.hp = hp

    def attack(self, p):
        p.hp = p.hp - self.ad
        print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name, p.name, p.name, self.ad, p.hp))

    def armament_weapon(self, wea):
        self.wea = wea

class Weapon: #  武器类
    def __init__(self, name, ad):
        self.name = name
        self.ad = ad
    def fight(self,p1,p2):
        p2.hp = p2.hp - self.ad
        print('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\
              % (p1.name, self.name, p2.name, p2.name, self.ad, p2.hp))

p1 = GameRole('大阳哥',20,500)  #  实例化人物
p2 = GameRole('印度阿宁', 50, 200)   #  实例化人物
axe = Weapon('三板斧', 60)   #  实例化人物
broadsword = Weapon('屠龙宝刀', 100)   #  实例化武器
print(axe)
p1.armament_weapon(axe)  # 给大阳哥 装备了三板斧这个对象.(将对象exe的命名空间赋值给对象p1的wea变量)
print(p1.wea)
print(p1.wea.name)
print(p1.wea.ad)
p1.wea.fight(p1, p2)

 

# 创建三个游戏人物,分别是:
# • 苍井井,女,18,攻击力ad为20,血量200
# • 东尼木木,男,20,攻击力ad为30,血量150
# • 波多多,女,19,攻击力ad为50,血量80
# 1.2
# 创建三个游戏武器,分别是:
# • 平底锅,ad为20
# • 斧子,ad为50
# • 双节棍,ad为65
#
# 1.3
# 创建三个游戏摩托车,分别是:
#
# • 小踏板,速度60迈
# • 雅马哈,速度80迈
# • 宝马,速度120迈。
#
# 完成下列需求(利用武器打人掉的血量为武器的ad + 人的ad):

# (1)苍井井骑着小踏板开着60迈的车行驶在赛道上。
# (2)东尼木木骑着宝马开着120迈的车行驶在赛道上。
# (3)波多多骑着雅马哈开着80迈的车行驶在赛道上。


# (4)苍井井赤手空拳打了波多多20滴血,波多多还剩xx血。
# (5)东尼木木赤手空拳打了波多多30滴血,波多多还剩xx血。

# (6)波多多利用平底锅打了苍井井一平底锅,苍井井还剩xx血。
# (7)波多多利用斧子打了东尼木木一斧子,东尼木木还剩xx血。


# (8)苍井井骑着宝马打了骑着小踏板的东尼木木一双节棍,东尼木木哭了,还剩xx血。
# (9)波多多骑着小踏板打了骑着雅马哈的东尼木木一斧子,东尼木木哭了,还剩xx血。
class GameRole:
    def __init__(self,name,sex,age,ad,hp):
        self.name = name
        self.sex = sex
        self.age = age
        self.ad = ad
        self.hp = hp

    def attack(self,p):
        p.hp = p.hp - self.ad
        print('%s赤手空拳打了%s%s滴血,%s还剩%s血' %(self.name,p.name,self.ad,p.name,p.hp))

    def add_moto(self,mo):
        self.mo = mo

    def add_weapon(self,wea):
        self.wea = wea

    def road_rush(self,p1):
        p1.hp = p1.hp - self.ad - self.wea.ad
        print('%s骑着%s打了骑着%s的%s一%s,%s哭了,还剩%s血' \
              %(self.name,self.mo.name,p1.mo.name,p1.name,self.wea.name,p1.name,p1.hp))

class Weapon:
    def __init__(self,name,ad):
        self.name = name
        self.ad = ad

    def fight(self,p1,p2):
        p2.hp = p2.hp - p1.ad - self.ad
        # print(' %s利用%s打了%s一%s,%s还剩%s血' %(p1.name,self.name,p2.name,self.name,p2.name,p2.hp))
        print('{0}利用{1}打了{2}一{1},{2}还剩{3}血'.format(p1.name,self.name,p2.name,p2.hp))


class Moto:
    def __init__(self,name,speed):
        self.name = name
        self.speed = speed

    def drive(self,p1):
        print('%s骑着%s开着%d迈的车行驶在赛道上' % (p1.name,self.name,self.speed))

p1 = GameRole('苍井井','', 18, 20, 200)
p2 = GameRole('东尼木木', '' ,20, 30, 150)
p3 = GameRole('波多多', '', 19, 50, 80)

w1 = Weapon('平底锅', 20)
w2 = Weapon('斧子', 50)
w3 = Weapon('双节棍', 65)

m1 = Moto('小踏板', 60)
m2 = Moto('雅马哈', 80)
m3 = Moto('宝马', 120)

# p1.add_moto(m1)  # 组合: 给p1 对象封装了一个属性,属性值 m1这个对象
# p1.mo.drive(p1)

# p1.attack(p3)

# 波多多利用平底锅打了苍井井一平底锅,苍井井还剩xx血。
# p3.add_weapon(w1)  # 组合: 给p1 对象封装了一个属性,属性值 w1这个对象
# p3.wea.fight(p3,p1)

# 苍井井骑着宝马打了骑着小踏板的东尼木木一双节棍,东尼木木哭了,还剩xx血。
p1.add_moto(m3)
p1.add_weapon(w3)
p2.add_moto(m1)
p1.road_rush(p2)  #  苍井井骑着宝马打了骑着小踏板的东尼木木一双节棍,东尼木木哭了,还剩65血

 

posted @ 2021-02-22 09:18  跳动0101  阅读(187)  评论(0)    收藏  举报