当前位置:
首页 > Python基础教程 >
-
python基础教程之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的一个属性值
这种一个对象的属性值是另一个类的对象,就形成了一个组合
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式