C# 中设计模式-------状态模式 游戏开发中的运用

状态模式的应用:
比如在游戏中,英雄的状态系统就使用了状态模式。每个英雄都有不同的状态,例如正常状态、眩晕状态、沉默状态等等。不同的状态对应不同的行为和效果,例如在眩晕状态下无法移动和施放技能,在沉默状态下无法使用技能。使用狂暴,会增加自身属性等;为了实现这个功能,王者荣耀使用了状态模式,将每个状态封装在不同的状态类中,然后在运行时动态地切换状态对象。在这里插入代码片下面是一个简单的示例代码:

interface IHeroState
    {
        void Move();
        void CastSkill();
        void ChangeInfo();
    }

    class NormalState : IHeroState
    {
        public void CastSkill()
        {
            Console.WriteLine("英雄在正常状态下移动");
        }
        public void Move()
        {
            Console.WriteLine("英雄在正常状态下释放技能");
        }

        public void ChangeInfo()
        {
            Console.WriteLine("属性不变");
        }
    }

    // 晕眩状态
    class StunState : IHeroState
    {
        public void CastSkill()
        {
            Console.WriteLine("英雄在眩晕状态下无法释放技能");
        }
        public void Move()
        {
            Console.WriteLine("英雄在眩晕状态下无法移动");
        }
        public void ChangeInfo()
        {
            Console.WriteLine("属性不变");
        }
    }

    // 狂暴状态
    class RageState : IHeroState
    {

        public void ChangeInfo()
        {
            Console.WriteLine("属性提升");
        }

        public void CastSkill()
        {
            Console.WriteLine("狂暴下使用技能");
        }

        public void Move()
        {
            Console.WriteLine("狂暴下移动");
        }
    }
internal class Program
    {
        static void Main(string[] args)
        {
            Hero hero = new Hero();

            //正常状态
            hero.SetState(new NormalState());
            hero.Move();
            hero.CastSkill();

            //狂暴
            hero.SetState(new RageState());
            hero.ChangeInfo();
            hero.Move();
            hero.CastSkill();
        }
    }

    // 英雄类
    class Hero
    {
        // 英雄的状态
        private IHeroState _state;

        // 英雄的移动
        public void Move()
        {
            _state.Move();
        }
        // 英雄的释放技能
        public void CastSkill()
        {
            _state.CastSkill();
        }
        //属性变化
        public void ChangeInfo()
        {
            _state.ChangeInfo();
        }
        // 设置英雄的状态
        public void SetState(IHeroState state)
        {
            _state = state;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值