一、程序设计思维:

  以面向对象的思维设计《天龙八部》游戏技能,使得技能效果在增加或者减少时,游戏技能整体框架不改变,仅仅增加或者减少技能效果

  

二、思路流程图如下:

  

三、变成框架实现代码:

  

"""
天龙八部技能系统
设计原则: """ class ImpactEffect:
"""
影响效果
隔离技能释放器 与 具体的影响效果
"""
def impact(self):
# 要求子类必须实现,否则报错
raise NotImplementedError() class LowerDefense(ImpactEffect):
"""
降低防御力
""" def __init__(self,distance,ratio):
# 距离
self.distance = distance
# 比例
self.ratio = ratio def impact(self):
print("降低%d米内,目标的防御力为%d."%(self.distance,self.ratio)) class LowerSpeed(ImpactEffect):
"""
降低速度
""" def __init__(self, time, ratio):
# 时间
self.time = time
# 比例
self.ratio = ratio def impact(self):
print("降速为%.1f.时间是:%d" % (self.ratio, self.time)) class Damage(ImpactEffect):
"""
伤害生命
""" def __init__(self, value):
# 伤害值
self.value = value def impact(self):
print("伤害%d生命" % (self.value)) class SkillDeployer:
"""
技能释放器
"""
def __init__(self,name):
self.name = name
# 配置释放器,存储当前技能具有的所有影响效果对象
self.__list_impact = self.__config_deployer() def __config_deployer(self):
"""
配置释放器
:return:
"""
#*. 定义配置
#1. 读取相应的影响效果
#2. 创建影响效果对象
# 依赖注入
dict_skill_config = {
"韦陀杵":["LowerDefense(10,0.5)","Damage(30)"],
"降龙十八掌": ["LowerSpeed(5,0.2)", "Damage(80)"]
}
# ["LowerDefense(10,0.5)","Damage(30)"]
# 根据键(技能名称)获取值(影响效果列表)
list_impact_name = dict_skill_config[self.name]
# list_impact = []
# for item in list_impact_name:
# # 创建影响效果对象,并加入到列表中
# list_impact.append(eval(item))
return [eval(item) for item in list_impact_name] def generate_skill(self):
"""
生成技能
:return:
"""
print(self.name,"释放啦!")
# 执行所有影响效果
for item in self.__list_impact:
# 编码期间:认为调用的是影响效果(父类ImpactEffect)
# 运行期间:由于创建的是子类对象(伤害生命Damage...),所以执行的是子类方法.
item.impact() #--------测试---------------
# 创建技能对象
wei_tuo_chu = SkillDeployer("韦陀杵")
# 释放技能
wei_tuo_chu.generate_skill() xiang_long_18_zhang = SkillDeployer("降龙十八掌")
xiang_long_18_zhang.generate_skill()

  

Python基础之面向对象思维解决游戏《天龙八部》的更多相关文章

  1. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  2. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  3. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  4. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  5. 二十. Python基础(20)--面向对象的基础

    二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...

  6. python基础实战之猜年龄游戏

    目录 一.Python基础实战之猜年龄游戏 给定年龄,用户可以猜三次年龄 年龄猜对,让用户选择两次奖励 用户选择两次奖励后可以退出 age = 18 # 答案 count = 0 # 游戏次数控制 p ...

  7. Python基础之面向对象2(封装)

    一.封装定义: 二.作用 三.私有成员: 1.基本概念及作用 2.__slots__手段私有成员: 3.@property属性手段私有成员: 四.基础示例代码 1.用方法封装变量 "&quo ...

  8. python基础之面向对象1

    一.面向对象VS面向过程 1.面向过程 2.面向对象 二.类与对象 1.类和对象 (1)基本概念 类和对象的内存图如下: 2.实例成员 (1)实例变量 (2)实例方法: 3.类成员: (1)类变量 ( ...

  9. Day7 - Python基础7 面向对象编程进阶

    Python之路,Day7 - 面向对象编程进阶   本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...

随机推荐

  1. MariaDB存储过程笔记

    FECTH INTO 字段名不能与 CURSOR FOR 中select字段名一致,否则FETCH出的值均为空. DECLARE 字段名不能与 CURSOR FOR 中select语句内where条件 ...

  2. python学习第31天

    # 操作系统的发展历程 # 主要的人机矛盾是什么 : CPU的使用率 # 输入\输出数据和CPU计算没有关系 # 操作系统是怎么进化的 # 传统的纸带输入 # 磁带的存储降低了输入输出数据占用的时间, ...

  3. iOS cocoapods 速度过慢问题

    这个问题真的困扰了很久,虽然我也开了shadowsocks,但是我不知道git命令默认是不走shadowsocks的,所以速度慢的很. 今天拜读了 https://blog.csdn.net/wuqu ...

  4. 洛谷P4770 [NOI2018]你的名字 [后缀自动机,线段树合并]

    传送门 思路 按照套路,直接上后缀自动机. 部分分:\(l=1,r=|S|\) 首先把\(S\)和\(T\)的后缀自动机都建出来. 考虑枚举\(T\)中的右端点\(r\),查询以\(r\)结尾的串最长 ...

  5. Js获取客户端用户Ip地址

    利用搜狐查询接口查询Ip地址: <!DOCTYPE html> <html> <head> <meta charset="utf-8" / ...

  6. java接口,接口的特性,接口实现多态,面向接口编程

    package cn.zy.cellphone; /**接口是一种引用数据类型.使用interface声明接口,形式 * 形式:public interface 接口名称{} * 接口不能拥有构造方法 ...

  7. 学习笔记_J2EE_SpringMVC_02_注解配置

    SpringMVC注解配置 1.测试环境: 名称 版本 备注 操作系统 Windows10 专业版1809X64   WEB服务器 Tomcat 8.5 X64   浏览器 Google Chrome ...

  8. mysql 两例习题

    一. 综述:两张表,一张顾客信息表customers,一张订单表orders .创建一张顾客信息表customers,字段要求如下: c_id 类型为整型,设置为主键,并设置为自增长属性 c_name ...

  9. 【GIT】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚

    [git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br  (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退 ...

  10. 1、Linux文件结构介绍

    文件目录介绍 bin 可执行的命令 boot 启动相关的程序:boot→grub→grub.conf timeout修改启动时间 dev 设备.硬件相关信息 etc 程序.系统配置文件 home 用户 ...