设计融合_ c#

单例模式

using System;
namespace DesignIntegration{
    public class TimeManager{
        private static TimeManager _instance;
        private static readonly Object locker = new Object();
        private TimeManager() { }
        public static TimeManager Instance{
            get{
                //当地一个线程运行到这里时
                //此时会对locker对象“枷锁”,
                //当第二个线程运行该方法时,首先检测到locker对象为“加锁”状态,
                //该线程就会挂起等待第一个线程解锁
                if (_instance == null){
                    lock (locker){
                        if (locker == null)
                            _instance = new TimeManager();
                    }
                }
                return _instance;
            }
        }
        public void Greet() {
            DateTime dateTime = DateTime.Now;
            Console.WriteLine($"我是地球Online的时间管理者,现在时间是{dateTime}");
        }
    }
}

using System;
namespace DesignIntegration{
    //工厂模式
    public abstract class IItem{
        //武器名称
        protected string Name { get; set; }
        //道具编号
        protected int ID { get; set; }
        //道具描述
        protected string Description { get; set; }
        //虚方法 子类可以按照需要决定是否重写
        public virtual void Use() {
            Console.WriteLine("使用道具的方法");
        }
        public IItem(string name, int iD, string description){
            Name = name;
            ID = iD;
            Description = description;
        }
    }
}

namespace DesignIntegration{
    public abstract class IItemIWeapon : IItem{
        //攻击力
        protected float AttackValue { 
            get; 
        }
        protected IItemIWeapon(string name, int iD, string description,
            float attackValue) : base(name, iD, description){
            AttackValue = attackValue;
        }
        //抽象攻击方法
        public abstract void Attack();
    }
}

using System;
namespace DesignIntegration{
    public class IWeaponSword : IItemIWeapon{
        public IWeaponSword(string name, int iD, string description,
            float attackValue) : base(name, iD, description, attackValue){
        }
        //装备武器
        public override void Use(){
            Console.WriteLine($",双手紧握");
        }
        public override void Attack() {
            Console.WriteLine($"{Name}发动攻击");
            //可以嵌入桥接模式
        }
    }
}

namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        //角色名字
        public string Name { get; set; }
        //角色ID
        public int ID { get; }
    }
}


修改抽象武器基类攻击方法

namespace DesignIntegration{
    public abstract class IItemIWeapon : IItem{
        //攻击力
        protected float AttackValue { 
            get; 
        }
        protected IItemIWeapon(string name, int iD, string description,
            float attackValue) : base(name, iD, description){
            AttackValue = attackValue;
        }
        //抽象攻击方法 - 单体攻击
        public abstract void Attack(IPlayer player);
    }
}

namespace DesignIntegration{
    public abstract class IAction{
        public string Name { get; }
        //播放动作
        public abstract void Behaviour();
        public IAction(string name){
            Name = name;
        }
    }
}

武器桥接动作

namespace DesignIntegration{
    public abstract class IItemIWeapon : IItem{
        //攻击力
        protected float AttackValue { get; }
        //动作
        protected IAction _action = null;
        //设置武器动作
        public void SetWeaponAction(IAction action) {
            _action = action;
        }
        protected IItemIWeapon(string name, int iD, string description,
            float attackValue) : base(name, iD, description){
            AttackValue = attackValue;
        }
        //抽象攻击方法 - 单体攻击
        public abstract void Attack(IPlayer player);
    }
}

namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        //角色名字
        public string Name { get; set; }
        //角色ID
        public int ID { get; }
        public IRole(string name,int id) {
            Name = name;
            ID = id;
        }
    }
}

namespace DesignIntegration{
    public class RoleMonster : IRole{
        public RoleMonster(string name, int id) : base(name, id){
        }
    }
}
更新Program类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignIntegration{
    public class Program{
        public static void Main(string[] args){
            //TimeManager.Instance.Greet();
            IRole monster = new RoleMonster("Bug兽",20001);
            IItem sword = new IWeaponSword("火焰圣剑", 5001, "中级武器", 15f);
            ((IItemIWeapon)sword).Attack(monster);
        }
    }
}

using System;
namespace DesignIntegration{
    public class ActionSweepHorizontally : IAction{
        public ActionSweepHorizontally(string name) : base(name){
        }
        public override void Behaviour(){
            Console.WriteLine("从左至右横扫");
        }
    }
}
修改武器子剑类

using System;
namespace DesignIntegration{
    public class IWeaponSword : IItemIWeapon{
        public IWeaponSword(string name, int iD, string description,
            float attackValue) : base(name, iD, description, attackValue){
        }
        //装备武器
        public override void Use(){
            Console.WriteLine($"双手紧握");
        }
        public override void Attack(IRole role) {
            if (_action == null)
                Console.WriteLine($"{Name}发动攻击");
            else {
                //播放动作动画
                _action.Behaviour();
                Console.WriteLine($"{Name}发动攻击");
            }
            //受攻击方减血
        }
    }
}

运行

新增动作

using System;
namespace DesignIntegration{
    public class ActionRaise : IAction{
        public ActionRaise(string name) : base(name){
        }
        public override void Behaviour(){
            //新增动作动画
            Console.WriteLine("举过头顶 往下劈砍");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignIntegration{
    public class Program{
        public static void Main(string[] args){
            //TimeManager.Instance.Greet();
            IRole monster = new RoleMonster("Bug兽",20001);
            IItem sword = new IWeaponSword("火焰圣剑", 5001, "中级武器", 15f);
            //((IItemIWeapon)sword).SetWeaponAction(new ActionSweepHorizontally("横扫千钧"));
            //切换新动作
            ((IItemIWeapon)sword).SetWeaponAction(new ActionRaise("下劈"));
            ((IItemIWeapon)sword).Attack(monster);
        }
    }
}
修改抽象角色基类

namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        //角色名字
        public string Name { get; set; }
        //角色ID
        public int ID { get; }
        //最大血量
        protected float MaxHp { get; set; }
        //当前血量
        protected float CurrentHp { get; set; }
        public IRole(string name,int id,float maxHp) {
            Name = name;
            ID = id;
            MaxHp = maxHp;
            CurrentHp = maxHp;
        }
    }
}
修改角色子类

namespace DesignIntegration{
    public class RoleMonster : IRole{
        public RoleMonster(string name, int id, float maxHp) : base(name, id, maxHp){
        }
    }
}
修改Program类

修改角色基类代码

using System;
namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        //角色名字
        public string Name { get; set; }
        //角色ID
        public int ID { get; }
        //最大血量
        protected float MaxHp { get; set; }
        //当前血量
        protected float CurrentHp { get; set; }
        public IRole(string name,int id,float maxHp) {
            Name = name;
            ID = id;
            MaxHp = maxHp;
            CurrentHp = maxHp;
        }
        //伤害
        public void TakeDamage(float damage) {
            if (damage < CurrentHp){
                CurrentHp -= damage;
                Console.WriteLine($"{Name}掉了{damage}滴血");
            }
            else {
                CurrentHp = 0;
                Console.WriteLine($"{Name}已经死亡");
            }
        }
    }
}

using System;
namespace DesignIntegration{
    public class IWeaponSword : IItemIWeapon{
        public IWeaponSword(string name, int iD, string description,
            float attackValue) : base(name, iD, description, attackValue){
        }
        //装备武器
        public override void Use(){
            Console.WriteLine($"双手紧握");
        }
        public override void Attack(IRole role) {
            if (_action == null)
                Console.WriteLine($"{Name}发动攻击");
            else {
                //播放动作动画
                _action.Behaviour();
                Console.WriteLine($"{Name}发动攻击");
            }
            //受攻击方减血
            role.TakeDamage(AttackValue);
        }
    }
}
运行实现掉血

接下来设置玩家控制武器打怪物后使怪物掉血

namespace DesignIntegration{
    public class RolePlayer : IRole{
        public RolePlayer(string name, int id, float maxHp) : base(name, id, maxHp){
        }
    }
}

using System;
namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        public string Name { get; set; }//角色名字
        public int ID { get; }//角色ID
        protected float MaxHp { get; set; }//最大血量
        protected float CurrentHp { get; set; }//当前血量
        protected float HitValue { get; set; }//无武器攻击值
        protected IItem _item = null;//道具
        protected IAction _action = null;//动作
        public IRole(string name,int id,float maxHp) {
            Name = name;
            ID = id;
            MaxHp = maxHp;
            CurrentHp = maxHp;
        }
        //伤害
        public void TakeDamage(float damage) {
            if (damage < CurrentHp){
                CurrentHp -= damage;
                Console.WriteLine($"{Name}掉了{damage}滴血");
            }
            else {
                CurrentHp = 0;
                Console.WriteLine($"{Name}已经死亡");
            }
        }
    }
}

修改角色子类

namespace DesignIntegration{
    public class RolePlayer : IRole{
        public RolePlayer(string name, int id, float maxHp,
            float hitValue) : base(name, id, maxHp, hitValue){
        }
    }
}

namespace DesignIntegration{
    public class RoleMonster : IRole{
        public RoleMonster(string name, int id, float maxHp,
            float hitValue) : base(name, id, maxHp, hitValue){
        }
    }
}
修改Program类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DesignIntegration{
    public class Program{
        public static void Main(string[] args){
            //TimeManager.Instance.Greet();
            IRole monster = new RoleMonster("Bug兽",20001,60f,20f);
            IItem sword = new IWeaponSword("火焰圣剑", 50001, "中级武器", 15f);
            //((IItemIWeapon)sword).SetWeaponAction(new ActionSweepHorizontally("横扫千钧"));
            //切换新动作
            ((IItemIWeapon)sword).SetWeaponAction(new ActionRaise("下劈"));
            ((IItemIWeapon)sword).Attack(monster);
        }
    }
}

using System;
namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        public string Name { get; set; }//角色名字
        public int ID { get; }//角色ID
        protected float MaxHp { get; set; }//最大血量
        protected float CurrentHp { get; set; }//当前血量
        protected float HitValue { get; set; }//无武器攻击值
        protected IItem _item = null;//道具
        protected IAction _action = null;//动作
        public IRole(string name,int id, float maxHp, float hitValue){
            Name = name;
            ID = id;
            MaxHp = maxHp;
            CurrentHp = maxHp;
            HitValue = hitValue;
        }
        //伤害
        public void TakeDamage(float damage) {
            if (damage < CurrentHp){
                CurrentHp -= damage;
                Console.WriteLine($"{Name}掉了{damage}滴血");
            }
            else {
                CurrentHp = 0;
                Console.WriteLine($"{Name}已经死亡");
            }
        }
        //使用道具
        public virtual void UseItem(IItem item) {
            _item = item;
            Console.WriteLine($"{Name}使用了{_item.Name}");
        }
    }
}

using System;
namespace DesignIntegration{
    public class RolePlayer : IRole{
        public RolePlayer(string name, int id, float maxHp,
            float hitValue) : base(name, id, maxHp, hitValue){
        }
        public override void UseItem(IItem item){
            _item = item;
            Console.WriteLine($"{Name}从背包中拿出{_item.Name}");
            _item.Use();
        }
    }
}

接下来设定道具的使用动作

using System;
namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        public string Name { get; set; }//角色名字
        public int ID { get; }//角色ID
        protected float MaxHp { get; set; }//最大血量
        protected float CurrentHp { get; set; }//当前血量
        protected float HitValue { get; set; }//无武器攻击值
        protected IItem _item = null;//道具
        protected IAction _action = null;//动作
        public IRole(string name,int id, float maxHp, float hitValue){
            Name = name;
            ID = id;
            MaxHp = maxHp;
            CurrentHp = maxHp;
            HitValue = hitValue;
        }
        //伤害
        public void TakeDamage(float damage) {
            if (damage < CurrentHp){
                CurrentHp -= damage;
                Console.WriteLine($"{Name}掉了{damage}滴血");
            }
            else {
                CurrentHp = 0;
                Console.WriteLine($"{Name}已经死亡");
            }
        }
        //使用道具
        public virtual void UseItem(IItem item) {
            _item = item;
            Console.WriteLine($"{Name}使用了{_item.Name}");
            //如果是非武器类道具 则_item使用后设为空
            if(!(_item is IItemIWeapon))
                _item = null;
        }
        //攻击方法
        public virtual void Attack(IRole role) {
            //有武器
            if (_item != null && _item is IItemIWeapon){
                Console.WriteLine($"{Name}使用{_item.Name}发起攻击");
                ((IItemIWeapon)_item).Attack(role);
            }
            else {
                Console.WriteLine($"空手发起攻击");
                role.TakeDamage(HitValue);
            }
        }
        //使用道具的使用动作
        public virtual void SetUseItemAction(IAction action) {
            _action = action;
            //如果_item属于武器 则设置动作
            if(_item is IItemIWeapon)
                ((IItemIWeapon)_item).SetWeaponAction(action);
        }
    }
}

增加动作

目前玩家可以打怪物 但怪物不可以打玩家

现在做怪物攻击玩家,首先在角色子类怪物类进行重写

using System;
namespace DesignIntegration{
    public class RoleMonster : IRole{
        public RoleMonster(string name, int id, float maxHp,
            float hitValue) : base(name, id, maxHp, hitValue){
        }

        public override void Attack(IRole role){
            //有武器
            if (_item != null && _item is IItemIWeapon)
                ((IItemIWeapon)_item).Attack(role);
            else {
                Console.WriteLine($"{Name}用嘴咬向{role.Name}");
                role.TakeDamage(HitValue);
            }
        }
    }
}

运行即实现桥接模式
接下来显示玩家的状态信息

添加抽象药水基类

namespace DesignIntegration{
    //抽象药水基类
    public abstract class IItemIPotion : IItem{
        protected IItemIPotion(string name, int iD,
            string description) : base(name, iD, description){
        }
    }
}

namespace DesignIntegration{
    //生命值药水
    public class IPotionRed : IItemIPotion{
        public IPotionRed(string name, int iD, 
            string description) : base(name, iD, description){
        }
    }
}

using System;
namespace DesignIntegration{
    //工厂模式
    public abstract class IItem{
        public string Name { get; set; }//武器名称
        protected int ID { get; set; }//道具编号
        protected string Description { get; set; }//道具描述
        protected IRole Role { get; set; } //角色
        //虚方法 子类可以按照需要决定是否重写
        public virtual void Use() {
            Console.WriteLine("使用道具的方法");
        }
        public IItem(string name, int iD, string description){
            Name = name;
            ID = iD;
            Description = description;
        }
    }
}

修改角色子类

using System;
namespace DesignIntegration{
    public class RolePlayer : IRole{
        public RolePlayer(string name, int id, float maxHp,
            float hitValue) : base(name, id, maxHp, hitValue){
        }
        public override void UseItem(IItem item){
            _item = item;
            //将角色传给道具
            _item.Role = this;
            Console.Write($"{Name}从背包中拿出{_item.Name}");
            _item.Use();
        }
    }
}

using System;
namespace DesignIntegration{
    //生命值药水
    public class IPotionRed : IItemIPotion{
        public IPotionRed(string name, int iD, 
            string description) : base(name, iD, description){
        }
        public override void Use(){
            if (Role != null) {
                Console.WriteLine($"{Role.Name}仰头喝下{Name}");
                //加血
            }
        }
    }
}

using System;
namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        public string Name { get; set; }//角色名字
        public int ID { get; }//角色ID
        protected float MaxHp { get; set; }//最大血量
        protected float CurrentHp { get; set; }//当前血量
        protected float HitValue { get; set; }//无武器攻击值
        protected IItem _item = null;//道具
        protected IAction _action = null;//动作
        public IRole(string name,int id, float maxHp, float hitValue){
            Name = name;
            ID = id;
            MaxHp = maxHp;
            CurrentHp = maxHp;
            HitValue = hitValue;
        }
        //伤害
        public virtual void TakeDamage(float damage) {
            if (damage < CurrentHp){
                CurrentHp -= damage;
                Console.WriteLine($"{Name}掉了{damage}滴血");
            }
            else {
                CurrentHp = 0;
                Console.WriteLine($"{Name}已经死亡");
            }
        }
        //加血
        public virtual void AddHp(float hp) {
            CurrentHp += hp;
            if(CurrentHp > MaxHp)
                CurrentHp = MaxHp;
        }
        //使用道具
        public virtual void UseItem(IItem item) {
            _item = item;
            Console.WriteLine($"{Name}使用了{_item.Name}");
            //如果是非武器类道具 则_item使用后设为空
            if(!(_item is IItemIWeapon))
                _item = null;
        }
        //攻击方法
        public virtual void Attack(IRole role) {
            //有武器
            if (_item != null && _item is IItemIWeapon){
                Console.WriteLine($"{Name}使用{_item.Name}发起攻击");
                ((IItemIWeapon)_item).Attack(role);
            }
            else {
                Console.WriteLine($"空手发起攻击");
                role.TakeDamage(HitValue);
            }
        }
        //使用道具的使用动作
        public virtual void SetUseItemAction(IAction action) {
            _action = action;
            //如果_item属于武器 则设置动作
            if(_item is IItemIWeapon)
                ((IItemIWeapon)_item).SetWeaponAction(action);
        }
    }
}

namespace DesignIntegration{
    //抽象药水基类
    public abstract class IItemIPotion : IItem{
        //附带效果值
        protected float _addValue;
        protected IItemIPotion(string name, int iD,string description,
            float addValue) : base(name, iD, description){
            _addValue = addValue;
        }
    }
}

using System;
namespace DesignIntegration{
    //生命值药水
    public class IPotionRed : IItemIPotion{
        public IPotionRed(string name, int iD, string description,
            float addValue) : base(name, iD, description, addValue){
        }
        public override void Use(){
            if (Role != null) {
                Console.WriteLine($"{Role.Name}仰头喝下{Name}");
                //加血
                Role.AddHp(_addValue);
            }
        }
    }
}

using System;
namespace DesignIntegration{
    //抽象角色基类
    public abstract class IRole{
        public string Name { get; set; }//角色名字
        public int ID { get; }//角色ID
        protected float MaxHp { get; set; }//最大血量
        protected float CurrentHp { get; set; }//当前血量
        protected float HitValue { get; set; }//无武器攻击值
        protected IItem _item = null;//道具
        protected IAction _action = null;//动作
        public IRole(string name,int id, float maxHp, float hitValue){
            Name = name;
            ID = id;
            MaxHp = maxHp;
            CurrentHp = maxHp;
            HitValue = hitValue;
        }
        //伤害
        public virtual void TakeDamage(float damage) {
            if (damage < CurrentHp){
                CurrentHp -= damage;
                Console.WriteLine($"{Name}掉了{damage}滴血");
            }
            else {
                CurrentHp = 0;
                Console.WriteLine($"{Name}已经死亡");
            }
        }
        //加血
        public virtual void AddHp(float hp) {
            CurrentHp += hp;
            if(CurrentHp > MaxHp)
                CurrentHp = MaxHp;
            //拓展 计算增加了多少血 差值{hp}有bug
            Console.WriteLine($"{Name}当前生命值增加{hp}");
        }
        //使用道具
        public virtual void UseItem(IItem item) {
            _item = item;
            Console.WriteLine($"{Name}使用了{_item.Name}");
            //如果是非武器类道具 则_item使用后设为空
            if(!(_item is IItemIWeapon))
                _item = null;
        }
        //攻击方法
        public virtual void Attack(IRole role) {
            //有武器
            if (_item != null && _item is IItemIWeapon){
                Console.WriteLine($"{Name}使用{_item.Name}发起攻击");
                ((IItemIWeapon)_item).Attack(role);
            }
            else {
                Console.WriteLine($"空手发起攻击");
                role.TakeDamage(HitValue);
            }
        }
        //使用道具的使用动作
        public virtual void SetUseItemAction(IAction action) {
            _action = action;
            //如果_item属于武器 则设置动作
            if(_item is IItemIWeapon)
                ((IItemIWeapon)_item).SetWeaponAction(action);
        }
    }
}

接下来我们再创建一把武器弓

using System;
using System.Collections.Generic;
using System.Linq;
namespace DesignIntegration{
    public class IWeaponBow : IItemIWeapon{
        public IWeaponBow(string name, int iD, string description,
            float attackValue) : base(name, iD, description, attackValue){
        }
        //装备武器
        public override void Use(){
            Console.WriteLine($"拉弓");
        }
        public override void Attack(IRole role){
            if (_action == null)
                Console.WriteLine($"{Name}发动攻击");
            else{
                //播放动作动画
                _action.Behaviour();
                Console.WriteLine($"弯弓搭箭 群体攻击");
            }
            //受攻击方减血
            role.TakeDamage(AttackValue);
        }
    }
}
【||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||工厂模式||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||】

using System;
namespace DesignIntegration{
    //简单道具工厂
    public class ItemSimpleFactory{
        public static IItem CreateItem(string itemType, int id, 
            string name, string description, float attackValue) {
            IItem item = null;
            switch (itemType) {
                case "Sword":
                    item = new IWeaponSword(name,id,description,attackValue);
                    break;
                case "Bow":
                    item = new IWeaponBow(name,id,description,attackValue);
                    break;
                case "PotionRed":
                    item = new IPotionRed(name, id, description, attackValue);
                    break;
                default:
                    throw new ArgumentException("未知物品类型");
            }
            return item;
        }
    }
}
【||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||建造者模式||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||】

namespace DesignIntegration{
    //抽象武器基类
    public abstract class IItemIWeapon : IItem{
        protected float AttackValue { set; get; }//攻击力
        protected IAction _action = null;//动作
        protected float Durability { set; get; } = 10f;//耐久度
        //设置武器动作
        public void SetWeaponAction(IAction action) {
            _action = action;
        }
        protected IItemIWeapon(string name, int iD, string description,
            float attackValue) : base(name, iD, description){
            AttackValue = attackValue;
        }
        //抽象攻击方法 - 单体攻击
        public abstract void Attack(IRole role);
    }
}

namespace DesignIntegration{
    //抽象道具建造者
    public abstract class IItemBuilder{
        //设置待加工道具
        public abstract void SetBaseItem(IItem item);
        //添加特殊材料改进物品
        public virtual void AddMaterial(string material) { }
        //提升锋利度
        public virtual void ImproveSharpness() { }
        //加固物品的结构 增加耐久度
        public virtual void ReinforceStructure() { }
        //镶嵌宝石 提供特殊属性加成
        public virtual void Embedgem(string coatingType) { }
        //添加涂层
        public virtual void AddCoating(string cocatingType) { }
        //升级
        public abstract void Upgrade();
        //获取升级后的物品
        public abstract IItem GetItem();
    }
}

using System;
namespace DesignIntegration{
    //具体建造者 - 武器升级
    public class BuildWeaponUpgrade : IItemBuilder{
        private IItemIWeapon _weapon;
        public override IItem GetItem(){
            return _weapon;
        }
        public override void SetBaseItem(IItem item){
            _weapon = item as IItemIWeapon;
        }
        public override void Upgrade(){
            Console.WriteLine($"{_weapon.Name}铸造完成");
        }
        public override void AddMaterial(string material){
            Console.WriteLine($"铸造过程中 添加{material}材料");
        }
        public override void Embedgem(string embedgem){
            Console.WriteLine($"铸造过程中 嵌入{embedgem}宝石");
        }
    }
}
修改抽象武器基类代码

修改jurisdiction建造者代码

using System;
namespace DesignIntegration{
    //具体建造者 - 武器升级
    public class BuildWeaponUpgrade : IItemBuilder{
        private IItemIWeapon _weapon;
        public override IItem GetItem(){
            return _weapon;
        }
        public override void SetBaseItem(IItem item){
            _weapon = item as IItemIWeapon;
        }
        public override void Upgrade(){
            Console.WriteLine($"{_weapon.Name}铸造完成");
            //要抽象不要实现 待完善
            _weapon.AttackValue *= 1.2f;
            _weapon.Durability *= 1.1f;
        }
        public override void AddMaterial(string material){
            Console.WriteLine($"铸造过程中 添加{material}材料");
        }
        public override void Embedgem(string embedgem){
            Console.WriteLine($"铸造过程中 嵌入{embedgem}宝石");
        }
    }
}
 

namespace DesignIntegration{
    //道具指挥者
    public class BuildDirector{
        public IItem Construct(IItemBuilder builder,
            IItem baseItem, string material, string gemType){
            builder.SetBaseItem(baseItem);
            builder.AddMaterial(material);
            builder.Embedgem(gemType);
            builder.Upgrade();
            return builder.GetItem();
        }
    }
}

namespace DesignIntegration{
    public class Program{
        public static void Main(string[] args){
            //TimeManager.Instance.Greet();
            IRole monster = new RoleMonster("Bug兽",20001,60f,20f);
            //剑培
            IItem sword = new IWeaponSword("火焰圣剑", 50001, "中级武器", 15f);
            //((IItemIWeapon)sword).SetWeaponAction(new ActionSweepHorizontally("横扫千钧"));
            //切换新动作
            //((IItemIWeapon)sword).SetWeaponAction(new ActionRaise("下劈"));
            //((IItemIWeapon)sword).Attack(monster);
            IRole player = new RolePlayer("小虎", 10001, 30f, 5f);
            player.UseItem(sword);
            player.SetUseItemAction(new ActionSweepHorizontally("横扫千钧"));
            player.Attack(monster);
            player.SetUseItemAction(new ActionRaise("下劈"));
            player.Attack(monster);
            monster.Attack(player);
            IItem redpotion = new IPotionRed("生命药水", 50101, "加血药瓶", 50f);
            player.UseItem(redpotion);
            var weaponBuilder = new BuildWeaponUpgrade();
            var director = new BuildDirector();
            var upgradedSword = director.Construct(weaponBuilder, sword, "千年玄晶", "红宝石");
        }
    }
}

using System;

namespace DesignIntegration{
    public class Program{
        public static void Main(string[] args){
            //TimeManager.Instance.Greet();
            IRole monster = new RoleMonster("Bug兽",20001,60f,20f);
            //剑培
            IItem sword = new IWeaponSword("火焰圣剑", 50001, "中级武器", 15f);
            //((IItemIWeapon)sword).SetWeaponAction(new ActionSweepHorizontally("横扫千钧"));
            //切换新动作
            //((IItemIWeapon)sword).SetWeaponAction(new ActionRaise("下劈"));
            //((IItemIWeapon)sword).Attack(monster);
            IRole player = new RolePlayer("小虎", 10001, 30f, 5f);
            player.UseItem(sword);
            player.SetUseItemAction(new ActionSweepHorizontally("横扫千钧"));
            player.Attack(monster);
            player.SetUseItemAction(new ActionRaise("下劈"));
            player.Attack(monster);
            monster.Attack(player);
            IItem redpotion = new IPotionRed("生命药水", 50101, "加血药瓶", 50f);
            player.UseItem(redpotion);
            var weaponBuilder = new BuildWeaponUpgrade();
            var director = new BuildDirector();
            var upgradedSword = director.Construct(weaponBuilder, sword, "千年玄晶", "红宝石") as IItemIWeapon;
            Console.WriteLine($"铸造后的攻击力是{upgradedSword.AttackValue}");
        }
    }
}

【||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||装饰者模式||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||】

namespace DesignIntegration{
    public interface IEnhancer{
        //装饰者模式接口
        void ApplyEffect(IRole role);
    }
}

using System;
namespace DesignIntegration{
    public class EnhancerFrozenEffect : IEnhancer{
        private float _freezeChance;//冰冻几率
        public EnhancerFrozenEffect(float freezeChance){
            _freezeChance = freezeChance;
        }
        public void ApplyEffect(IRole role){
            float randomValue = new Random().Next(0,100)/100f;
            if (randomValue < _freezeChance){
                Console.WriteLine($"{role.Name}被冰冻了");
                //角色内应有被冰冻的状态
                //role.Freeze();
            }
            else {
                Console.WriteLine("冰冻失败");
            }
        }
    }
}

namespace DesignIntegration{
    //抽象装饰类
    public class IWeaponEnhanced : IItemIWeapon{
        //增强功能接口引用
        private IEnhancer _enhancer = null;
        public IWeaponEnhanced(string name, int iD, string description,
            float attackValue) : base(name, iD, description, attackValue){
        }
        //设置增强配件
        public void SetEnhancer(IEnhancer enhancer) {
            _enhancer= enhancer;
        }
        public override void Attack(IRole role){
            //额外增加魔法攻击
            if(_enhancer != null)
                _enhancer.ApplyEffect(role);
            //写法等同
            //_enhancer?.ApplyEffect(role);
        }
    }
}

using System;
namespace DesignIntegration{
    public class EnhancerFrozenMagicSword : IWeaponEnhanced{
        public EnhancerFrozenMagicSword(string name, int iD, string description,
            float attackValue) : base(name, iD, description, attackValue){
        }
        public override void Attack(IRole role){
            if (_action == null)
                Console.WriteLine($"{Name}发动攻击");
            else{
                //播放动作动画
                _action.Behaviour();
                Console.WriteLine($"{Name}发动攻击");
            }
            //受攻击方减血
            role.TakeDamage(AttackValue);
            //增强魔法效果
            base.Attack(role);
        }
    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/178017.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机app 爬虫

近期在做某个项目,涉及到需要对手机app的进行数据爬取。在上一篇博文中,讲述了以模拟机为例的配置操作流程,这里将以苹果手机为例进行描述。 下面将讲述具体配置步骤 1、安装 抓包软件 fiddler (Fiddler | Web Debugging Proxy and Troubleshooting Solutions) ​ 下载后…

【Java】AI+智慧工地云平台源码(SaaS模式)

伴随着科学技术的不断发展&#xff0c;信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升&#xff0c;智慧工地概念应运而生&#xff0c;庞大的建设规模催生着智慧工地的探索和研发。 一、带你认识智慧工地 伴随着技术的不断发展&#xff0c;信息化手段、移动…

GZ035 5G组网与运维赛题第10套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第10套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; 子…

win10-mmgen安装/cyclegan运行问题记录

mmconda环境&#xff1a; conda&#xff1a; CUDA 11.3 conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorch pip install mmcv-full1.5.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.11.0/index.html 成功运行 c…

日常踩坑-[sass]Error: Expected newline

在学习sass的时候&#xff0c;运行时发现报错 经过网上冲浪知道&#xff0c;原来在声明语言的时候 lang 不能声明为 sass &#xff0c;而是 scss ,这就有点坑了 原因&#xff1a; scss是sass3引入进来的&#xff0c;scss语法有"{}“,”;"而sass没有&#xff0c;所以…

OSPF高级特性2(特殊区域,聚合)

目录 一、特殊区域 1、STUB区域&#xff1a; 2、totally stub区域 3、NSSA区域&#xff08;Not-So-stubby Area&#xff09; 4、totally NSSA区域 二、OSPF路由聚合 一、特殊区域 定义&#xff1a;特殊区域是指人为定义的一些区域&#xff0c;它们在逻辑中一般位于ospf区…

kubeadm部署kubernetes1.28

k8s在1.24版本以后删除了内置dockershim插件&#xff0c;原生不再支持docker运行时&#xff0c;需要使用第三方cri接口cri-docker https://github.com/Mirantis/cri-dockerd.git 安装前&#xff0c;需要先升级systemd和主机内核&#xff0c;本操作文档安装的是最新的版本kube…

前端埋点方式

前言&#xff1a; 想要了解用户在系统中所做的操作&#xff0c;从而得出用户在本系统中最常用的模块、在系统中停留的时间。对于了解用户的行为、分析用户的需求有很大的帮助&#xff0c;想实现这种需求可以通过前端埋点的方式。 埋点方式&#xff1a; 1.什么是埋点&#xff1f…

梯度下降|笔记

1.梯度下降法的原理 1.1确定一个小目标&#xff1a;预测函数 机器学习中一个常见的任务是通过学习算法&#xff0c;自动发现数据背后的规律&#xff0c;不断改进模型&#xff0c;做出预测。 上图的坐标系&#xff0c;横轴表示房子面积&#xff0c;纵轴表示房价&#xff0c;图…

对比解析php和go对JSON处理的区别

一、go 转化php数组代码 php程序 $str <<<EOF {"操作源":"任意","数据库":"任意","语句类型":"CREATE DATABASE&#xff1b;DROP DATABASE&#xff1b;ALTER DATABASE","影响行数":"不…

能力惊艳!DingoDB多模向量数据库完成首批向量数据库产品测试

近日&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;正式开展“可信数据库”首批向量数据库产品测试&#xff0c;作为向量数据库领域创新与应用的代表企业&#xff0c;九章云极DataCanvas公司自主研发的DingoDB多模向量数据库参与并顺利完成本次测评…

目标检测与图像识别分类的区别?

目标检测与图像识别分类的区别 目标检测和图像识别分类是计算机视觉领域中两个重要的任务&#xff0c;它们在处理图像数据时有一些区别。 目标检测是指在图像中定位和识别多个目标的过程。其主要目标是确定图像中每个目标的边界框位置以及对应的类别标签。目标检测任务通常涉…

串口通信(6)应用定时器中断+串口中断实现接收一串数据

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

中兴再推爆款,双2.5G网口的巡天AX3000Pro+仅需299元

10月30日消息,中兴新款路由器中兴巡天AX3000Pro将于10月31日20:00正式开售,当前可在天猫、京东及红魔商城进行预约,首发价格299元。 据了解,中兴巡天AX3000Pro是中兴智慧家庭推出的巡天系列新品,也是当前市场上唯一一款300元价位内配备双2.5G网口的路由器。 中兴巡天AX3000Pro…

【了解一下,MySQL中的三大日志binlog redolog undolog】

文章目录 MySQL中的三大日志binlog redolog undolog引言binlog简介使用场景binlog刷盘时机binlog日志格式 redo log简介redo log基本概念redo log记录形式redo log与binlog区别 一条更新语句执行过程&#xff08;含日志写入&#xff09;undo log MySQL中的三大日志binlog redol…

Redis 6.0 新功能

1-支持 ACL 1.1-ACL 简介 官网&#xff1a;https://redis.io/topics/acl Redis ACL 是访问控制列表(Access Control List)的缩写&#xff0c;该功能允许根据可以执行的命令和可以访问的键来限制某些连接。 Redis 5 版本之前&#xff0c;Redis 安全规则只有密码控制&#xf…

Java实现对Html文本的处理

1.引入jsoup <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.8.3</version> </dependency> 2. html示例 示例代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1…

【Linux】第六站:Centos系统如何安装软件?

文章目录 1.Linux安装软件的方式2.Linux的软件生态3. yum4. rzsz软件的安装与卸载5.yum如何知道去哪里下载软件&#xff1f; 1.Linux安装软件的方式 在linux中安装软件常用的有三种方式 源代码安装&#xff08;我们还需要进行编译运行后才可以&#xff0c;很麻烦&#xff09; …

Windows11恢复组策略编辑器功能的方法

原因分析 日常工作学习中,对 Windows 计算机上的问题进行故障排除时,有些高级用户经常使用组策略编辑器轻松修复它。通过其分层结构,您可以快速调整应用于用户或计算机的设置。如果搜索结果中缺少组策略编辑器,则可能必须使用注册表编辑器作为疑难解答工具,这是一种更复杂…