Python基础之面向对象思维解决游戏《天龙八部》
一、程序设计思维:
以面向对象的思维设计《天龙八部》游戏技能,使得技能效果在增加或者减少时,游戏技能整体框架不改变,仅仅增加或者减少技能效果
二、思路流程图如下:
三、变成框架实现代码:
"""天龙八部技能系统
设计原则:
"""
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基础之面向对象思维解决游戏《天龙八部》 的全部内容, 来源链接: utcz.com/z/388046.html