#组合
#一个类的对象作为另一个类对象的属性
# 1,暴力摩托程序(完成下列需求):
# 1.1
# 创建三个游戏人物,分别是:
# • 苍井井,女,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)
# 2,定义一个类,计算圆的周长和面积。
from math import pi
class Circle:
def __init__(self,r):
self.r = r
def area(self):
return round(self.r ** 2 * pi,2)
def perimeter(self):
return round(self.r * 2 * pi,2)
# c1 = Circle(5)
# print(c1.area())
# print(c1.perimeter())
# 组合的思想
class Ring:
def __init__(self,r1,r2):
self.r1 = Circle(r1)
self.r2 = Circle(r2)
def area(self):
return self.r1.area() - self.r2.area()
def perimeter(self):
return self.r1.perimeter() + self.r2.perimeter()
r1 = Ring(6,3)
print(r1.area())
print(r1.perimeter())