【python面向对象】技能系统
针对之前面向对象的知识,设计了一个技能系统。
文章目录
- 技能系统设计思想
- 技能系统代码实现
- 技能系统项目总结
技能系统设计思想
技能系统代码实现
"""技能系统
"""
class SkillImpactEffect:"""技能影响效果"""def impact(self):raise NotImplementedError()class DamageEffect(SkillImpactEffect):"""伤害生命效果"""def __init__(self,value):self.value = valuedef impact(self):print("扣你%d血"%self.value)class LowerDeffenseEffect(SkillImpactEffect):"""降低防御力"""def __init__(self,value,time):self.value = valueself.time = timedef impact(self):print("降低%d防御力,持续%d秒"%(self.value,self.time))class DizzinessEffect(SkillImpactEffect):"""眩晕"""def __init__(self,time):self.time = timedef impact(self):print("眩晕%d秒"%(self.time))class SkillDeployer:"""技能释放器"""#生成技能(执行效果)def __init__(self,name):self.name = name# 加载配置文件{技能名称:[效果1,效果2..],...}self.__dict__skill_config = self.__load_config_file()# 创建效果对象self.__effect_objects = self.__create_effect_objects()def __load_config_file(self):# 加载文件return{"降龙十八掌":["DamageEffect(200)","LowerDeffenseEffect(-10,5)","DizzinessEffect(6)"],"六脉神剑":["DamageEffect(100)","DizzinessEffect(6)"]}def __create_effect_objects(self):#根据name创建相应的技能对象# 降龙十八掌->["技能1","技能2"]List_effect_name = self.__dict__skill_config[self.name]List_effect_object = []for item in List_effect_name:# "技能1" --> 技能1的对象#对象 = eval("DamageEffect(200)")effect_object = eval(item)List_effect_object.append(effect_object)return List_effect_objectdef generate_skill(self):print(self.name,"技能释放啦")for item in self.__effect_objects:#调用父类,执行子类item.impact()xlsbz = SkillDeployer("降龙十八掌")
xlsbz.generate_skill()# 降龙十八掌 技能释放啦
# 扣你200血
# 降低-10防御力,持续5秒
# 眩晕6秒lmsj = SkillDeployer("六脉神剑")
lmsj.generate_skill()# 六脉神剑 技能释放啦
# 扣你100血
# 眩晕6秒
技能系统项目总结
技能系统三大特征
- 封装:将每种影响效果单独做成类。
- 继承:将各种影响效果抽象为SkillImpactEffect,隔离技能释放器与各种影响效果的变化。
- 多态:各种影响效果在重写SkillImpactEffect类 中impact(),多态是方法,释放器调用SkillImpactEffect执行各种效果。
技能系统六大原则
- 开闭:增加新(技能/影响效果)·不修改释放器代码。
- 单一职责:SkillImpactEffect负责隔离变化,DamageEffect…负责定义具体的效果,SkillDeployer负责释放技能。
- 依赖倒置:(1)释放器没有调用具体影响效果,而是调用SkillImpactEffect。(2)抽象不依赖具体的。具体做法:释放器通过“依赖注入”(读取配置文件,创建影响效果对象),使释放器不依赖具体影响效果。
- 组合复用:释放器与影响效果是组合关系,可以灵活的选择各种影响效果。
- 里氏替换:父类出现的地方可以被子类替换。释放器存储影响效果列表,实际可以将各种子类存入进来。
- 迪米特法则:低耦合,所有类之间耦合度都很低。
【python面向对象】技能系统相关推荐
- 面向对象分析与设计——案例:天龙八部技能系统
面向对象分析与设计 知识点: 面向对象的三大特征:从设计者的角度理解, 封装:将需求拆分为一个个类(分而治之).每一个变化点封装成一个独立的类(封装变化) 继承:通过抽象出一个父类来约束子类,隔离子类 ...
- 视频教程-彻底掌握Python面向对象编程-Python
彻底掌握Python面向对象编程 曾就职于猎豹移动,从业已有8年,资深技术专家,现致力于线上教育 陈政强 ¥39.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP ...
- Python面向对象(1)
Python面向对象 1.面向对象编程介绍 如今主流的软件开发思想有两种:一个是面向过程,另一个是面向对象.面向过程出现得较早,典型代表为C语言,开发中小型项目的效率很高,但是很难适用于如今主流的大中 ...
- 思维导图:python面向对象(搞笑案例)
关联阅读:可能是最全的 Python 面向对象入门教程了 手机版本 关联阅读:可能是最全的 Python 面向对象入门教程了 Python面向对象 面向对象入门 对象编程体验 一款简单自动运行小游戏模 ...
- python编程基础是什么-Python面向对象编程基础解析(一)
1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向 ...
- python面向对象生动讲解_Python面向对象语法精讲
本专题的内容结构: 第一部分主要是:面向对象基础 第二部分主要是:面向对象进阶 第一部分的结构: unit1:面向对象编程模式: (1),面向对象编程思想 (2),面向对象的三个特征 (3),Pyth ...
- Python面向对象中反射和双下的正确用法
一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...
- Python面向对象反射,双下方法
一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- python 完全面向对象_史上最全的Python面向对象知识点疏理
原标题:史上最全的Python面向对象知识点疏理 面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变 ...
- 【Python基础】Python 面向对象编程(上篇)
我的施工计划图 已完成专题包括: 1我的施工计划 2数字专题 3字符串专题 4列表专题 5流程控制专题 6编程风格专题 7函数使用专题 今天是面向对象编程的上篇:基础专题 Python 面向对象编程 ...
最新文章
- 运筹学(最优化理论)学习笔记 | 共轭梯度法
- 计算机基础应用模拟试题,计算机基础应用模拟试题5
- 6.2 二叉树的定义、性质与存储结构
- stringbuffer常用方法_第八讲:常用类库API
- 禅道报表中关闭bug统计图_想要简单制作数据可视化分析报表?这个工具绝对好用...
- CANOpen同步报文
- 烟台市计算机二级培训机构,烟台市2020年3月计算机二级报名时间|网上报名入口【12月20日9:00开通】...
- spring boot生成Excel表格 导出/导入
- risc-v gcc 编译 atomic 指令时产生 illegal operands 错误的解决办法
- 又一个中国男人荣获巨奖!拿奖拿的手软,却坦言“我对诺奖没有兴趣”...
- 【Linux学习笔记】线程同步 之 信号量 之 sem_t结构体
- python程序设计,猜数游戏编程实践课程实验
- 通过DNS2SOCKS建立本地稳定无污染DNS
- 用python画皮卡丘画法-用python画一只可爱的皮卡丘实例
- 在linux上运行python脚本(安装pytorch踩坑记录,pyinstaller使用方式,构建docker镜像)
- 【STC8G2K64S4】比较器介绍以及比较器掉电检测示例程序
- art-pi lvgl添加触摸事件部分代码
- 工具“正确”打开方式——如何用notion来谈恋爱
- WebView(五)—— WebView的优化
- meethigher-定时刷步数收取蚂蚁森林能量