zoukankan      html  css  js  c++  java
  • 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()

      

  • 相关阅读:
    图解HTTPS
    JQuery 控件
    sql server 中某个字段值合并【转】
    ASP.NET时间函数及其格式转换
    数据库 'tempdb' 的日志已满
    @@ERROR 和 @@ROWCOUNT
    SQL Server中行列转换 Pivot UnPivot 【转】
    Global.asax详解
    SQL Server 2008时提示评估期已过的解决办法
    C# IO读取文件问题:正由另一进程使用
  • 原文地址:https://www.cnblogs.com/yuxiangyang/p/10731465.html
Copyright © 2011-2022 走看看