码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-21 21:55:44      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   on   

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

首先看一下悔棋的效果:

bubuko.com,布布扣

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


实现方式:

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





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

标签:style   blog   http   io   ar   color   os   sp   on   

原文地址:http://blog.csdn.net/u010105970/article/details/41357655

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!