Cocos2d-X开发中国象棋《五》摆棋

Cocos2d-X开发中国象棋《五》摆棋,第1张

概述在上一篇博客中实现了创建游戏场景,和一些按钮,由于按钮中实现具体的响应事件,需要使用到摆棋中的一些函数,为此我特意将按钮的具体实现方式放在了后面将, 在摆棋前先理清一下摆棋的思路: 1、创建一个Stone类处理棋子信息 2、建立一个表保存棋子信息 3、创建棋子 4、初始化棋子 5、摆棋子 摆棋的效果: 玩家持红棋 玩家持黑棋 创建一个Stone类用于处理棋子的信息,设置Stone类由CCSprit

在上一篇博客中实现了创建游戏场景,和一些按钮,由于按钮中实现具体的响应事件,需要使用到摆棋中的一些函数,为此我特意将按钮的具体实现方式放在了后面将,

在摆棋前先理清一下摆棋的思路:

1、创建一个Stone类处理棋子信息

2、建立一个表保存棋子信息

3、创建棋子

4、初始化棋子

5、摆棋子


摆棋的效果:
玩家持红棋


玩家持黑棋


创建一个Stone类用于处理棋子的信息,设置Stone类由CCSprite派生而来

//棋子类class Stone : public CCSprite{public:    Stone();    //棋子的类型:将、士、相、车、马、炮、兵    enum TYPE {JIANG,SHI,XIANG,CHE,MA,PAO,BING};    //创建棋子    //第一个参数:棋子的类型    //第二个参数:棋子的颜色    static Stone* create(int ID,bool red);        //初始化棋子     bool init(int ID,bool red);     //摆棋子    voID reset(bool red);    //保存梅个棋子的初始位置    static struct InitPos    {        int _x;        int _y;       Stone::TYPE _type;    }_initPos[16];        CC_SYNTHESIZE(TYPE,_type,Type)    CC_SYNTHESIZE(int,_x,X)    CC_SYNTHESIZE(int,_y,Y)    CC_SYNTHESIZE(int,_ID,ID)    CC_SYNTHESIZE(bool,_dead,Dead)    CC_SYNTHESIZE(bool,_red,Red)   /*//棋子的位置(坐标)    int x;    int y;    int _ID;//棋子的ID  0~31(一共有32个棋子)    bool dead;//判断棋子是否被吃了    bool _red;//判断棋子的颜色*/};

建立一个表保存棋子的信息

//创建一张表Stone::InitPos Stone::_initPos[16] ={    //车的位置(0,0)    {0,Stone::CHE},//马的位置(1,0)    {1,Stone::MA},//相的位置(2,0)    {2,Stone::XIANG},//士的位置(3,0)    {3,Stone::SHI},//将的位置(4,0)    {4,Stone::JIANG},//士的位置(5,0)    {5,//相的位置(6,0)    {6,//马的位置(7,0)    {7,//车的位置(8,0)    {8,//炮的位置(1,2)    {1,2,Stone::PAO},//炮的位置(7,2)    {7,//兵的位置(0,3)    {0,3,Stone::BING},//兵的位置(2,3)    {2,//兵的位置(4,3)    {4,//兵的位置(6,3)    {6,//兵的位置(8,3)    {8,};


创建棋子

//创建棋子//第一个参数:棋子的类型//第二个参数:棋子的颜色Stone* Stone::create(int ID,bool red){    Stone* s = new Stone();        s->init(ID,red);            s->autorelease();          return s;}


初始化棋子

/初始化棋子//象棋的一次性初始化bool Stone::init(int ID,bool red){     _ID = ID;//获得棋子的ID    //当棋子的ID小于16时,棋子是红色的    _red = _ID < 16;    //初始化红色的棋子     if(_ID < 16)     {         _type = _initPos[_ID]._type;     }     else//初始化黑色的棋子     {         //类型(车、马、炮)相同颜色不同的两个棋子的ID相差16         _type = _initPos[_ID-16]._type;     }    const char* stonePic[14] = {            "rshuai.png",//(红色)帅            "rshi.png",//(红色)士            "rxiang.png",//(红色)相            "rche.png",//(红色)车            "rma.png",//(红色)马            "rpao.png",//(红色)炮            "rbing.png",//(红色)兵            "bjiang.png",//(黑色)将            "bshi.png",//(黑色)士            "bxiang.png",//(黑色)相            "bche.png",//(黑色)车            "bma.png",//(黑色)马            "bpao.png",//(黑色)炮            "bzu.png"     //(黑色)卒        };    //计算图片的下标    //如果棋子是红色的 IDx = _type    //如果棋子是黑色的 IDx = 7 + _type    //两个棋子的颜色的下标相差 7   int IDx = (_red ? 0 : 1) * 7 + _type;    //创建精灵(创建棋子)    CCSprite::initWithfile(stonePic[IDx]);    //压缩棋子    setScale(.8f);    //摆棋子(设置棋子的位置)    reset(red);    return true;}

摆放棋子

//摆放棋子//参数:用于判断游戏玩家选择进入游戏场景时是否//点了红色的棋子voID Stone::reset(bool red){    //刚摆棋子的时候棋子没被吃掉   this->setDead(false);      if(red)//当玩家点红色的棋子进入游戏场景时    {//玩家的棋子的颜色为红色         if(_ID < 16)//摆放红色的棋子        {            //设置棋子的x坐标            this->setX(_initPos[_ID]._x);            //设置棋子的y坐标            this->setY(_initPos[_ID]._y);         }        else//摆放黑色的棋子        {            this->setX(8 - _initPos[_ID-16]._x);            //两个类型相同颜色不同的棋子的y坐标相差9            //如:红色的车和黑色的车的y坐标相差9            this->setY(9 - _initPos[_ID-16]._y);        }    }    else//当玩家点黑色的棋子进入游戏场景时    {//玩家的棋子的颜色是黑色          if(_ID < 16)//摆放黑色的棋子        {            this->setX(8 - _initPos[_ID]._x);            this->setY(9 - _initPos[_ID]._y);        }        else//摆放红色的棋子        {            //两个类型相同颜色不同的棋子的ID相差16            //如:红色的车和黑色的车的ID相差16            this->setX(_initPos[_ID-16]._x);            this->setY(_initPos[_ID-16]._y);        }    }}
总结

以上是内存溢出为你收集整理的Cocos2d-X开发中国象棋《五》摆棋全部内容,希望文章能够帮你解决Cocos2d-X开发中国象棋《五》摆棋所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1010750.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存