设计融合_ c#

news2024/11/28 16:32:33

单例模式

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.coloradmin.cn/o/1160151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像特征Vol.1:计算机视觉特征度量|第二弹:【统计区域度量】

目录 一、前言二、统计区域度量2.1&#xff1a;图像矩特征2.1.1&#xff1a;原始矩/几何矩2.1.2&#xff1a;中心距2.1.3&#xff1a;归一化的中心矩2.1.4&#xff1a;不变矩——Hu矩2.1.5&#xff1a;OpenCv实现矩特征及其应用 2.2&#xff1a;点度量特征2.3&#xff1a;全局直…

Simulink HDL--如何生成Verliog代码

Simulink生成HDL的方法可以快速设计出工程&#xff0c;并结合FPGA验证&#xff0c;相比于手写HDL代码虽然存在代码优化不足的问题。但是方法适合做工程的快速验证和基本框架搭建。本文将介绍Simulink HDL生成Verliog代码的基本操作 1、逻辑分析仪功能 Simulink生成HDL前需要通…

Android NDK开发详解之调试和性能分析的系统跟踪概览

Android NDK开发详解之调试和性能分析的系统跟踪概览 系统跟踪指南 “系统跟踪”就是记录短时间内的设备活动。系统跟踪会生成跟踪文件&#xff0c;该文件可用于生成系统报告。此报告有助于您了解如何最有效地提升应用或游戏的性能。 有关进行跟踪和性能分析的全面介绍&#x…

在Blender中使用python脚本

目录 使用&#xff1a; 快速创建10个圆球&#xff1a; python代码&#xff1a; 形态键快速创建和重命名&#xff1a; 可能存在的问题 python代码&#xff1a; Blender 强大的特点是其对 Python 脚本的完美支持。 这意味着可以编写 Python 脚本来自动化各种任务和操作&am…

密码学 - SHA-2

实验八 SHA-2 1.实验目的 熟悉SHA – 2算法的运行过程&#xff0c;能够使用C语言编写实现SHA-2算法程序&#xff0c;增加对摘要函数的理解。 2、实验任务 &#xff08;1&#xff09;理解SHA-2轮函数的定义和常量的定义。 &#xff08;2&#xff09;利用VC语言实现SHA-2算…

[ACTF2023]复现

MDH 源题&#xff1a; from hashlib import sha256 from secret import flagr 128 c 96 p 308955606868885551120230861462612873078105583047156930179459717798715109629 Fp GF(p)def gen():a1 random_matrix(Fp, r, c)a2 random_matrix(Fp, r, c)A a1 * a2.Treturn…

【湘粤鄂车牌】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

虹科示波器 | 汽车免拆检修 | 2013款大众途观车发动机加速无力

一、故障现象 一辆2013款大众途观车&#xff0c;搭载CGM发动机&#xff0c;累计行驶里程约为12.6万km。车主进厂反映&#xff0c;发动机加速无力。 二、故障诊断 接车后试车&#xff0c;发动机怠速运转正常&#xff1b;原地将加速踏板踩到底&#xff0c;发动机转速最高只能达到…

做Web自动化前,你必须掌握的几个技能!

学习web自动化的前提条件&#xff1a;手工测试&#xff08;了解各种测试的知识&#xff09;、学习编程语言、学习Web基础、学习自动化测试工具 、学习自动化测试框架 、需要掌握前端的一些知识&#xff0c;无论学习语言还是前端知识&#xff0c;都是为了接下来的脚本和框架做铺…

antd5上传图片显示405解决

antd5上传图片&#xff0c;默认使用上传方式会调用本地的接口。 405 Method Not Allowed 状态码 405 Method Not Allowed 表明服务器禁止了使用当前 HTTP 方法的请求。 Upload {...props}beforeUpload{(file) > {//自定义上传图片的逻辑//最后返回falsereturn false }} &…

Python JSON 使用指南:解析和转换数据

JSON 是一种用于存储和交换数据的语法。JSON 是文本&#xff0c;使用 JavaScript 对象表示法编写。 Python 中的 JSON Python 有一个内置的 json 包&#xff0c;可用于处理 JSON 数据。 示例&#xff1a;导入 json 模块&#xff1a; import json解析 JSON - 从 JSON 转换为…

【UE】从UI中拖拽生成物体

目录 效果 步骤 一、准备工作 二、创建UI 三、创建Actor 四、拖拽生成Actor的逻辑 效果 步骤 一、准备工作 1. 首先新建一个第三人称模板工程 2. 新建一个游戏模式基础&#xff0c;这里命名为“BP_UIGameMode” 在世界场景设置中设置游戏模式覆盖为“BP_UIGameMode”…

代码随想录算法训练营第6天|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

JAVA代码编写 242. 有效的字母异位词 给定两个字符串 *s* 和 *t* &#xff0c;编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 **注意&#xff1a;**若 *s* 和 *t* 中每个字符出现的次数都相同&#xff0c;则称 *s* 和 *t* 互为字母异位词。 示例 1: 输入: s "a…

pytorch复现4_Resnet

ResNet在《Deep Residual Learning for Image Recognition》论文中提出&#xff0c;是在CVPR 2016发表的一种影响深远的网络模型&#xff0c;由何凯明大神团队提出来&#xff0c;在ImageNet的分类比赛上将网络深度直接提高到了152层&#xff0c;前一年夺冠的VGG只有19层。Image…

为什么需要企业云性能监控?

云计算已经成为企业信息技术的核心组成部分&#xff0c;提供了灵活性、可扩展性和成本效益。然而&#xff0c;随着企业的应用程序和数据迁移到云中&#xff0c;监控和管理云性能变得至关重要。在这篇文章中&#xff0c;我们将探讨企业云性能监控的重要性是什么! 为什么需要企业…

瞄准一款好用到爆的在线数据库设计工具Itbuilder,被惊艳了!

在线数据库设计工具都不陌生&#xff0c;这与日常开发工作息息相关&#xff0c;每天都会用到。一款好用的在线数据库设计工具可以帮我们省去很多事情&#xff0c;Itbuilder在线数据库设计工具简单工作台&#xff0c;有利于新手操作&#xff0c;丰富的功能&#xff0c;可以满足开…

RHCSA -- VMware虚拟机配置及破解密码

一、配置虚拟机 1、开启VMware&#xff08;自定义&#xff09; 2、设置虚拟机硬件兼容性&#xff08;默认&#xff09; 3、稍后安装虚拟机操作系统 4、选择为Linux的虚拟机 5、虚拟机机名 6、设置虚拟机处理器 7、设置虚拟机所连接的网络类型 8、选择磁盘类型 9、设置所选磁…

【Liunx应用市场】yum

【Liunx应用市场】yum 1. Linux 软件包管理器 yum2. yum源3. yum的使用3.1 yum查找3.2 yum安装3.3 yum删除 所属专栏&#xff1a;Linux学习❤️ &#x1f680; >博主首页&#xff1a;初阳785❤️ &#x1f680; >代码托管&#xff1a;chuyang785❤️ &#x1f680; >感…

【Qt控件之QInputDialog】详解

Qt控件之QInputDialog 概述常用函数枚举成员方法信号 示例使用场景问题&#xff1a;使用QInputDialog是否可以使用正则表达式验证示例 概述 QInputDialog类提供了一个简单方便的对话框&#xff0c;用于从用户获取单个值。 输入值可以是字符串、数字或列表中的项。必须设置一个…

X64指令基本格式

X64指令基本格式 1 REX Prefix结构2 REX prefix扩展位2.1 第一种&#xff0c;无SIB字节的内存寻址&#xff08;mod !11 &#xff09;2.2 第二种&#xff0c;寄存器到寄存器的寻址&#xff08;无内存操作数&#xff0c;mod11&#xff09;2.3 第三种&#xff0c;带SIB字节的内存寻…