加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-X开发中国象棋《十》悔棋

发布时间:2020-12-14 19:32:55 所属栏目:百科 来源:网络整理
导读:在上一节中实现了走棋规则,这节中将实现悔棋 首先看一下悔棋的效果: 通过观察上图中的演示可知,当单击悔棋按钮后,移动了的棋子会回到原来的位置上, 实现方式: 首先在SceneGame类中定义一个成员变量CCArray* _steps,用于保存每步棋的棋子信息 //保存每

在上一节中实现了走棋规则,这节中将实现悔棋

首先看一下悔棋的效果:

通过观察上图中的演示可知,当单击悔棋按钮后,移动了的棋子会回到原来的位置上,


实现方式:

首先在SceneGame类中定义一个成员变量CCArray* _steps,用于保存每步棋的棋子信息

 //保存每步走的棋子
    CCArray* _steps;


在SceneGame类中的成员函数init()中插入下面的代码用于创建一个数组用于保存每步棋的信息

//创建数组
    _steps = CCArray::create();
    _steps->retain();


在moveStone()中添加下面的代码实现,每走一步棋的时候,将棋子的信息保存到_steps数组中

 //走棋之前记录棋子的信息
   //第一个参数:需要移动的棋子的id
   //第二个参数:通过触摸点的位置判断触摸点上是否有棋子
   //第三个参数:棋子当前的位置的x坐标
   //第四个参数:棋子当前的位置的y坐标
   //第五个参数:棋子移动后的位置的x坐标
   //第六个参数:棋子移动后的位置的y坐标
    Step* step = Step::create(moveId,killId,_s[moveId]->getX(),_s[moveId]->getY(),x,y);
    
    //将棋子的信息添加到数组中
    _steps->addObject(step);


在SceneGame中定义一个成员函数Back(CCObject*)实现悔棋,Back(CCObject*)中的代码:

//实现悔棋
void SceneGame::Back(CCObject*)
{
    //当数组中的元素个数为0时
    //没走棋
    if(0 == _steps->count())
    {
        return;
    }

    //获取数组中的最后一个元素
    //获取走棋时的最后一步棋子的信息
    Step* step = (Step*)_steps->lastObject();

   // 恢复棋子的信息
    //设置棋子走棋前的位置x坐标
    _s[step->_moveid]->setX(step->_xFrom);

    //设置棋子走起前的位置y坐标
    _s[step->_moveid]->setY(step->_yFrom);
    _s[step->_moveid]->setPosition(getStonePos(step->_xFrom,step->_yFrom));

    //恢复吃掉的棋子
    if(step->_killid != -1)
    {
        //显示吃掉的棋子
        _s[step->_killid]->setVisible(true);

        //复活吃掉的棋子
         _s[step->_killid]->setDead(false);
    }

    //移动了一步棋后
    //切换移动的棋子的颜色
    _redTrun = ! _redTrun;

    //删除数组中的最后一个元素
    //删除走棋时最后一步棋子的信息
    _steps->removeLastObject();
}



??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读