无聊之作,RPGdemo制作(一)角色state模式
来源:互联网 发布:淘宝图片护盾 编辑:程序博客网 时间:2024/04/28 02:33
今天周末,在家无事可做,不知道为什么,突发奇想,想写一个RPG游戏的demo玩玩。所以就记录一下。
第一步要做的是,为以后的角色类写一个state模式的类,考虑到可能以后会用到,所以用模版来实现,
//状态枚举enum _EN_STATE_TYPE{EN_STATE_STANBY,EN_STATE_MOVE,EN_STATE_ATK,EN_STATE_DEAD};//状态父类template < class T >class state_object{protected:_EN_STATE_TYPE _Type;public:state_object(){};~state_object(){};//在本类内创建非本类型的新状态state_object<T>*createState(_EN_STATE_TYPE Type_){state_object<T>* state_ = nullptr;if (_Type != Type_){switch (Type_){case EN_STATE_STANBY:state_ = new state_stanby<T>;break;case EN_STATE_MOVE:state_ = new state_move<T>;break;case EN_STATE_ATK:state_ = new state_atk<T>;break;case EN_STATE_DEAD:state_ = new state_dead<T>;break;default:break;}}return state_;}//状态检测virtual voidupdate(T* host){//如果宿主血条为空if (host->isDead()){//切换到死亡状态host->changeState(createState(EN_STATE_DEAD));}};//是否状态相同virtual boolisState(state_object<T>* state_){if (state_){return _Type == state_->getType();}return false;}virtual voidonExit(){};virtual voidonEnter(){};//获取状态类型virtual _EN_STATE_TYPEgetType(){ return _Type; }private:};
这样就用模版创建了一个状态父类,以后的状态都继承于它。再上其他类的代码。
各个状态的update函数负责随时检测更新状态
template < class T >class state_stanby : public state_object<T>{public:state_stanby(){ _Type = EN_STATE_STANBY; };~state_stanby(){};virtual voidupdate(T* host){state_object::update(host);if (host->isRival())//如果宿主有攻击对象{//切换到攻击状态host->changeState(createState(EN_STATE_ATK));}};virtual voidonExit(){cout << "退出《state_stanby》状态" << endl;};virtual voidonEnter(){cout << "进入《state_stanby》状态" << endl;};};template < class T >class state_move : public state_object<T>{public:state_move() { _Type = EN_STATE_MOVE; };~state_move(){};virtual voidupdate(T* host){state_object::update(host);//暂时没写到画面,所以暂时没写移动状态};virtual voidonExit(){cout << "退出《state_move》状态" << endl;};virtual voidonEnter(){cout << "进入《state_move》状态" << endl;};};template < class T >class state_atk : public state_object<T>{public:state_atk(){ _Type = EN_STATE_ATK; };~state_atk(){};virtual voidupdate(T* host){state_object::update(host);//如果有攻击对象if (host->isRival()){//攻击它host->hit_Rival();}else{//没有对象就回到待机状态host->changeState(createState(EN_STATE_STANBY));}};virtual voidonExit(){cout << "退出《state_atk》状态" << endl;};virtual voidonEnter(){cout << "进入《state_atk》状态" << endl;};};template < class T >class state_dead : public state_object<T>{public:state_dead(){ _Type = EN_STATE_DEAD; };~state_dead(){};virtual voidupdate(T* host){state_object::update(host);if (host->isRival()){//死亡了,清除宿主的对手信息,以及对手的对手信息host->getRival()->Configure_Role(nullptr);host->Configure_Role(nullptr);}};virtual voidonExit(){cout << "退出《state_dead》状态" << endl;};virtual voidonEnter(){cout << "进入《state_dead》状态" << endl;};};
到现在为止,目前所用到的状态就写完了,本章先到处介绍,未完待续··········
0 0
- 无聊之作,RPGdemo制作(一)角色state模式
- 设计模式之state模式(一)
- 无聊之作
- 无聊之作
- 无聊之作
- 一张小烂图,无聊之作。
- 对象设计:角色、责任和协作(一)
- 无聊之作,语音点名程序
- 无聊之作。。随机组句。。
- 无聊之作:幻方问题 ( 全 )
- 设计模式之State(状态模式)
- 状态模式(state) -- (模式之十三)
- 【设计模式】之状态模式(State)
- 设计模式之状态模式(State)
- 设计模式之状态模式(STATE)
- 设计模式之(State)状态模式
- 设计模式之State模式(笔记)
- 设计模式之状态模式(State)
- HDOJ 1001 递归方法
- 线性方程组求解
- 不同排序的关系
- 黑马程序员_抽象类和接口
- Centos yum 安装软件 No package XXX available
- 无聊之作,RPGdemo制作(一)角色state模式
- Codeforces 442B Kolya and Tandem Repeat(暴力)
- 开发者协会暑假招新方案
- 【C语言学习】指针再学习(二)之数组的指针
- GNU hsearch (I)
- 实现Peer to Peer与DDNS动态域名解析实现远端控制与数据采集
- .NET源码中的栈
- 数字图像处理之数字图像基础
- ZJU-PAT 1010. Radix (25)