cocos2dx c++实现小游戏--华容道

原创 2016年08月30日 14:39:15

华容道是一款中国民间的小游戏,童年的回忆(百度百科链接)。玩法很多,具体规则这不再赘述。

这里使用的是c++进行编写, 编译器为xcode,内容并不复杂。主要功能包括,计步,重置,退回,保存。资源文件

游戏截图:这个ui就不在交流的范围内啦。

1.场景初始化,包括几个按钮和几个精灵的初始化。

2.设置精灵位置及相关属性。

3.数据保存。

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
#include <vector>
#include "SpriteNode.h"
class SpriteNode;


class OperaRecord : public cocos2d::Ref
{
public:

    int _index;
    int _operation;
    SpriteNode *_sn;
};

class HelloWorld : public cocos2d::Scene
{
public:
    /*static cocos2d::Scene* createScene();*/

    virtual bool init();
    
    // a selector callback
    void menuCloseCallback(cocos2d::Ref* pSender);
    
    // implement the "static create()" method manually
    /*CREATE_FUNC(HelloWorld);*/
    static HelloWorld* create();
    
    void didTeminate();
private:
    HelloWorld();

    int _size[5][4]; //size,存储位置是否被占用;
    int spaceTimes; //次数
    cocos2d::Label *_showTimes;     //显示label
    cocos2d::Layer *m_layer;        //
    
    /**
     *  移动精灵,回调函数,
     *
     *  @param dir 方向
             enum Direction{
             DIRECTIONUP = 1,        //up
             DIRECTIONLEFT,          //left
             DIRECTIONRIGHT,         //right
             DIRECTIONDOWN,          //down
             DIRECTIONCLICKED        //only clicked
             };
     *  @param sn  移动的精灵
     */
    void MoveSpriteNode(int dir, SpriteNode *sn);
    
    /**初始化精灵
     */
    void initsprite();
    
    /**
     *  设置精灵位置, 这里吧士兵的大小看做1,地图大小为4*5;
     *  起点为屏幕的左上角,向右为y,向下为y(和正常的略有不同,在设计考虑不够周全),起始的坐标为(0,0),
<span style="white-space:pre">	</span>例如,caocao,其实坐标就为 (0, 1)
     *  @param sp 精灵
     *  @param x  x
     *  @param y  y
     *  @param w  width
     *  @param h  height
     */
    void setNodePos(SpriteNode *sp, int x, int y, int w, int h);
    
    void resetMenuItem(Ref *ref);       //重置
    void backMenuItem(Ref *ref);        //返回
    void readMenuItem(Ref *ref);        //读取
    void saveMenuItem(Ref *ref);        //保存
    
    typedef enum
    {
        STATUEPERSON = 1,
        STATUEBOX,
        STATUENOMOVE
    }Statue;
    
    
   
    
    cocos2d::Vector<SpriteNode*> m_snVec;   //记录场景精灵类
    cocos2d::Vector<OperaRecord*> m_opsn;   //operator record
    bool isback;   //default false
    
};

#endif // __HELLOWORLD_SCENE_H__

#ifndef SpriteNode_hpp
#define SpriteNode_hpp

#include <stdio.h>
#include "HelloWorldScene.h"
using namespace cocos2d;
class SpriteNode;
class HelloWorld;
typedef void(HelloWorld::*DirectionFunc)(int, SpriteNode *);

class SpriteNode : public cocos2d::Sprite 
{
public:
    
    //方向
    enum Direction{
        DIRECTIONUP = 1,        //up
        DIRECTIONLEFT,          //left
        DIRECTIONRIGHT,         //right
        DIRECTIONDOWN,          //down
        DIRECTIONCLICKED        //only clicked
    };
    static SpriteNode* create(const std::string &filename);
    
    CREATE_FUNC(SpriteNode);
    
    
    bool init();    //初始化
    void setDirectFuncCallBack(DirectionFunc func, Ref *obj);   //设置回调函数
    void setEnable(bool); //default ture
    
    void setSizeWidth(int w){_sizewidth = w;}
    int getSizeWidth(){return _sizewidth;}
    
    void setSizeHeight(int h){_sizeheight = h;}
    int getSizeHeight(){return  _sizeheight;}
    
    
    void setNodePositionX(int x){ _nodePositionX = x;};
    int getNodePositionX(){return  _nodePositionX;}
    
    
    void setNodePositionY(int y){_nodePositionY = y;}
    int getNdoePositionY(){return _nodePositionY;}
    
    void setNodePosition(int x, int y){_nodePositionY = y, _nodePositionX = x;}
    
    void setImageName(std::string s){_filename = s;}
    const std::string getImageName(){ return  _filename;}
private:
    //点击结束
    void OnTouchesEnded(const std::vector<cocos2d::Touch*> &touches, cocos2d::Event* evenet);
    //点击开始
    void OnTouchesBegan(const std::vector<cocos2d::Touch*> &touches, cocos2d::Event* evenet);
    //点击移动,可忽略
    void OnTouchesMoved(const std::vector<cocos2d::Touch*> &touches, cocos2d::Event* evenet);
    
    //回调函数
    DirectionFunc m_callBack;
    Ref *m_callObj;
    
    //可用
    bool m_enable;
    //点击位置是否包含
    bool m_isContains;
    
    int _sizewidth;
    int _sizeheight;
    int _nodePositionX;
    int _nodePositionY;
    std::string _filename;      //文件名称,用于保存记录
    
    cocos2d::Point m_BeginPoint;        //点击开始点
    cocos2d::Point m_EndedPoint;        //点击结束点
    cocos2d::EventListenerTouchAllAtOnce *m_listener;
    cocos2d::Sprite *m_sprite;
};

#endif /* SpriteNode_hpp */

3.这里把头文件加上详细注释,整体功能实现思路比较清晰了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Cocos2dx------华容道

华容道游戏的难点就2个 1.如何把棋子显示到指定的位置 2.如何移动 17 18 19 20 13 14 15 16 9 10 11 12 5 6 7 8 1 2 ...

使用quick-cocos2dx-lua 实现的小游戏(包含碰撞检测,触屏发子弹)

使用quick-cocos2dx-lua 实现的小游戏(包含碰撞检测,触屏发子弹)

基于cocos2dx的小游戏

  • 2016年09月12日 10:14
  • 3.55MB
  • 下载

Cocos2dx之第一个小游戏编译至android运行成功

这是本人第一个游戏,基本是照着别人的入门视频(传送门http://blog.csdn.net/s_xing,这个博主录制的)来敲的,不过看着个视频的过程中了解了很多控件的使用,同时看了一下《iOS游戏...

cocos2dx 3.x宝石消除小游戏demo

  • 2015年11月12日 12:08
  • 603KB
  • 下载

cocos2dx-3.2做的射击小游戏

  • 2015年11月05日 10:20
  • 17.69MB
  • 下载

Cocos2dx 入门小游戏实例

cocos2dx 入门小游戏实例

cocos2dx入门小游戏

  • 2014年03月13日 17:17
  • 21.65MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2dx c++实现小游戏--华容道
举报原因:
原因补充:

(最多只允许输入30个字)