day23 02 组合(继续人狗大战游戏)
2019-05-17 00:02:47来源:博客园 阅读 ()
day23 02 组合(继续人狗大战游戏)
面向对象的三大特性:继承 多态 封装
先讲解一下组合
组合:一个对象的属性值是另一个类的对象:对象.属性.属性(一般有两个点)
继续扩展day22 01里面的人狗大战的小游戏来说明组合的存在,相对于之前的游戏,这次多加了一个武器装备类,而且武器还有它的大招。首先一个武器装备所有的属性有:武器的名字,武器具有的攻击力,武器可使用的次数,购买购买该装备需要的钱,所以你每次使用武器前都要看看自己的钱够不够,不够就得先充值,每次购买武器后,所拥有的钱都要扣除相应的钱。代码如下,以及相关注释:
# 人物类的定义 class someone: def __init__(self,name,blood,aggr,sex): # self对象的创建以及初始化 # 给人物的属性赋值,得到一个具体的人物 self.name=name self.blood=blood self.aggr=aggr self.sex=sex self.money=0 # 人物拥有的攻击技能 def attack(self,dog): dog.blood -=self.aggr # 人物没攻击一下狗,狗就会掉相应的血量 # 给人物装备武器 def get_weapon(self,weapon): if self.money>=weapon.price: # 只有当人物拥有的钱大于或者等于该武器装备的价格的时候才能拥有该武器装备 self.money-=weapon.price # 购买武器后钱就相应的扣除 self.weapon=weapon # 添加武器 self.aggr+=weapon.aggr # 人物添加武器装备后,具有的攻击力就等于它自身的加上武器的 else: print('余额不足,请先充值') # 人物拥有的钱不够买武器装备的时候就提醒人物充值 # 狗类的定义 class dog: def __init__(self,name,blood,aggr,kind,): # self对象的创建以及初始化 # 给狗类的属性赋值,得到一条具体的狗 self.name=name self.blood=blood self.aggr=aggr self.kind=kind self.money=0 # 预设人物开始没有钱 # 狗具有的攻击技能 def bite(self,someone): someone.blood-=self.aggr # 狗每次攻击人物,人物就会掉相应的血量 # 添加一个武器装备类 class weapon: def __init__(self,name,aggr,sustain,price): # self对象的创建以及初始化 # 给武器装备的属性赋值 self.name=name self.aggr=aggr self.sustain=sustain self.price=price # 武器装备里面有个大招double_kill def double_kill(self,person,dog): if self.sustain>0: # 只有当你武器使用次数还有剩余的时候,才能使用武器里面的大招 person.blood-=self.aggr*2 # 每次使用大招,人物的血量就会掉武器两倍攻击力的血量,即武器的大招是武器原本攻击力的两倍 dog.blood-=self.aggr*3 # 每次使用大招,狗被击中,血量就会掉武器3倍攻击力的血量 self.sustain-=1 # 每次使用一次大招,武器使用次数相应的减一次 person1=someone('王昭君',1000,300,'girl') # 人物实例化 print(person1.name) dog1=dog('溜溜球',2000,500,'泰迪') # 狗角色的实例化 print(dog1.name) person1.attack(dog1) # 进行人物攻击狗的操作 print(dog1.blood) # 因为人的攻击力是300,所以当人物攻击狗的时候,狗会掉300的血量,剩余1700的血量 weapon1=weapon('打狗棒',100,3,1000) # 武器实例化 person1.get_weapon(weapon1) # 给人物装备武器打狗棒 person1.money=2000 # 装备过程发现人物拥有的钱不够买武器装备,提醒充值,然后充值2000 person1.get_weapon(weapon1) print(person1.weapon.name) # 人物装备武器成功 print(person1.aggr) # 人物获得武器装备后攻击力等于自身的攻击力加上武器具有的攻击力为400 person1.attack(dog1) # 人物获得武器后再去攻击狗 print(dog1.blood) # 狗会掉400的血量,即此时的血量剩余1300 person1.weapon.double_kill(person1,dog1) # 人物使用武器里面的大招 print(dog1.blood) # 狗会掉300的血量,剩余1000 print(person1.blood) # 人物也会掉200的血量,剩余800
以上代码中:
person1.weapon是weapon类的一个对象
person1.weapon是person1这个对象的一个属性值
double_kill又是person1.weapon的一个属性值
这种一个对象的属性值是另一个类的对象,就形成了一个组合
原文链接:https://www.cnblogs.com/wxm422562/p/10878401.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Python 字符串的方法
- python 之 面向对象基础(组合和封装) 2019-07-24
- python随机验证码(数字和字母组合) 2019-07-24
- day23 03 组合的例子 2019-05-22
- day23(XML,面向对象基础) 2019-05-17
- day23 01 类的命名空间 2019-05-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash