state模式在游戏中的运用

     好久没有写blog了!

    最近决定多写写,把自己的经验多给大家分享!

  

   State模式的定义:

            不同的状态,不同的行为;或者说,每个状态有着相应的行为.

   我举个游戏应用的例子吧!mmo中,游戏世界可以分为(登陆时前,进入游戏中,进入游戏后)3个状态(我打的比喻)

   首先 抽象状态的基类

  class Game; 

  class State

  {

    public:

         /// 状态执行

        virtual void Handle(Game* game) = 0;

    

         /// 状态切换

       virtual void  nextState(Game* game) = 0;

  }

 

  然后处理具体的状态

 class LoginState : public State

{

    public:

        void Handle(Game* game) {

            game->LoginHandle();

        }

    

       void  nextState(Game* game) {  

            // 根据不同的情况

           //  更改mState

        }

}

class LoginingState: public State

{

    public:

        void Handle(Game* game) {

                game->LoadingHandle();

        }

    

       void  nextState(Game* game) {

            // 根据不同的情况

           //  更改mState

        }

}

class GameState: public State

{

    public:

        void Handle(Game* game) {

                game->GameHandle();

        }

    

       void  nextState(Game* game) {

            // 根据不同的情况

           //  更改mState

       }

}

 

我们定义游戏的管理类

class Game

{

private:

    State* mState;

public:

    virtual void  LoginHandle(){

   }

    virtual void  LoadingHandle(){

   }

    virtual void  GameHandle(){

   }

 

public:

   // 状态改变

    void nextState(){

                mState->nextState(this);

    }

   // 调度

   void Handle(){

              mState->Handle(this);

  }

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值