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()

 

  

posted @ 2019-04-18 18:31  一如年少模样  阅读(569)  评论(0编辑  收藏  举报