针对之前面向对象的知识,设计了一个技能系统。

文章目录

  • 技能系统设计思想
  • 技能系统代码实现
  • 技能系统项目总结

技能系统设计思想


技能系统代码实现

"""技能系统
"""
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秒

技能系统项目总结

技能系统三大特征

  1. 封装:将每种影响效果单独做成类。
  2. 继承:将各种影响效果抽象为SkillImpactEffect,隔离技能释放器与各种影响效果的变化。
  3. 多态:各种影响效果在重写SkillImpactEffect类 中impact(),多态是方法,释放器调用SkillImpactEffect执行各种效果。

技能系统六大原则

  1. 开闭:增加新(技能/影响效果)·不修改释放器代码。
  2. 单一职责:SkillImpactEffect负责隔离变化,DamageEffect…负责定义具体的效果,SkillDeployer负责释放技能。
  3. 依赖倒置:(1)释放器没有调用具体影响效果,而是调用SkillImpactEffect。(2)抽象不依赖具体的。具体做法:释放器通过“依赖注入”(读取配置文件,创建影响效果对象),使释放器不依赖具体影响效果。
  4. 组合复用:释放器与影响效果是组合关系,可以灵活的选择各种影响效果。
  5. 里氏替换:父类出现的地方可以被子类替换。释放器存储影响效果列表,实际可以将各种子类存入进来。
  6. 迪米特法则:低耦合,所有类之间耦合度都很低。

【python面向对象】技能系统相关推荐

  1. 面向对象分析与设计——案例:天龙八部技能系统

    面向对象分析与设计 知识点: 面向对象的三大特征:从设计者的角度理解, 封装:将需求拆分为一个个类(分而治之).每一个变化点封装成一个独立的类(封装变化) 继承:通过抽象出一个父类来约束子类,隔离子类 ...

  2. 视频教程-彻底掌握Python面向对象编程-Python

    彻底掌握Python面向对象编程 曾就职于猎豹移动,从业已有8年,资深技术专家,现致力于线上教育 陈政强 ¥39.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP ...

  3. Python面向对象(1)

    Python面向对象 1.面向对象编程介绍 如今主流的软件开发思想有两种:一个是面向过程,另一个是面向对象.面向过程出现得较早,典型代表为C语言,开发中小型项目的效率很高,但是很难适用于如今主流的大中 ...

  4. 思维导图:python面向对象(搞笑案例)

    关联阅读:可能是最全的 Python 面向对象入门教程了 手机版本 关联阅读:可能是最全的 Python 面向对象入门教程了 Python面向对象 面向对象入门 对象编程体验 一款简单自动运行小游戏模 ...

  5. python编程基础是什么-Python面向对象编程基础解析(一)

    1.什么是面向对象 面向对象(oop)是一种抽象的方法来理解这个世界,世间万物都可以抽象成一个对象,一切事物都是由对象构成的.应用在编程中,是一种开发程序的方法,它将对象作为程序的基本单元. 2.面向 ...

  6. python面向对象生动讲解_Python面向对象语法精讲

    本专题的内容结构: 第一部分主要是:面向对象基础 第二部分主要是:面向对象进阶 第一部分的结构: unit1:面向对象编程模式: (1),面向对象编程思想 (2),面向对象的三个特征 (3),Pyth ...

  7. Python面向对象中反射和双下的正确用法

    一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...

  8. Python面向对象反射,双下方法

    一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  9. python 完全面向对象_史上最全的Python面向对象知识点疏理

    原标题:史上最全的Python面向对象知识点疏理 面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变 ...

  10. 【Python基础】Python 面向对象编程(上篇)

    我的施工计划图 已完成专题包括: 1我的施工计划 2数字专题 3字符串专题 4列表专题 5流程控制专题 6编程风格专题 7函数使用专题 今天是面向对象编程的上篇:基础专题 Python 面向对象编程 ...

最新文章

  1. 运筹学(最优化理论)学习笔记 | 共轭梯度法
  2. 计算机基础应用模拟试题,计算机基础应用模拟试题5
  3. 6.2 二叉树的定义、性质与存储结构
  4. stringbuffer常用方法_第八讲:常用类库API
  5. 禅道报表中关闭bug统计图_想要简单制作数据可视化分析报表?这个工具绝对好用...
  6. CANOpen同步报文
  7. 烟台市计算机二级培训机构,烟台市2020年3月计算机二级报名时间|网上报名入口【12月20日9:00开通】...
  8. spring boot生成Excel表格 导出/导入
  9. risc-v gcc 编译 atomic 指令时产生 illegal operands 错误的解决办法
  10. 又一个中国男人荣获巨奖!拿奖拿的手软,却坦言“我对诺奖没有兴趣”...
  11. 【Linux学习笔记】线程同步 之 信号量 之 sem_t结构体
  12. python程序设计,猜数游戏编程实践课程实验
  13. 通过DNS2SOCKS建立本地稳定无污染DNS
  14. 用python画皮卡丘画法-用python画一只可爱的皮卡丘实例
  15. 在linux上运行python脚本(安装pytorch踩坑记录,pyinstaller使用方式,构建docker镜像)
  16. 【STC8G2K64S4】比较器介绍以及比较器掉电检测示例程序
  17. art-pi lvgl添加触摸事件部分代码
  18. 工具“正确”打开方式——如何用notion来谈恋爱
  19. WebView(五)—— WebView的优化
  20. meethigher-定时刷步数收取蚂蚁森林能量

热门文章

  1. 热敏电阻(NTC)的基本参数及其应用
  2. 倾斜摄影实景三维与游戏的结合
  3. Cesium 加载实景三维模型 优化建议
  4. linux redis-trib.rb,redis redis-trib.rb使用密码管理集群
  5. 向量叉积和点积混合运算_向量点积与叉积的意义
  6. Android客户端入门开发
  7. vue给文字加下划线
  8. 科技云报道:资本涌入的计算机视觉,却逃不开商业化“摆烂”?
  9. 2020年7月的自我鉴定(非技术篇)
  10. 51花样流水灯c语言程序,51单片机花样流水灯程序