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

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

首先看一下悔棋的效果:

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


实现方式:

首先在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();
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值