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



时间: 2024-08-05 18:28:25

Cocos2d-X开发中国象棋《十》悔棋的相关文章

Cocos2d-X开发中国象棋《一》

在介绍开发过程前先展示一下游戏 打开游戏后会进入一个欢迎界面 欢迎界面上有两颗棋子红色的帅和黑色的将,可以通过触摸两颗棋子进入游戏场景 当单击红棋子时,玩家持红旗 当单击黑棋时,玩家持黑棋 单击开始显示棋子 通过鼠标点击走棋 单击悔棋可以实现悔棋 单击新局后再单击开始可以实现重新下棋 单击下面的小喇叭可以实现声音的开关 吃掉对方的将后会显示游戏结果 单击游戏结果后重新开始游戏 移植到Android上的效果 开始界面 游戏界面1 游戏界面2 游戏结果界面 代码和资源下载:http://downlo

Cocos2d-X开发中国象棋《六》游戏开始功能的实现

我在前面的博客Cocos2d-X开发中国象棋<四>设计游戏场景中介绍了在游戏场景上场景了一个开始按钮,并没有实现开始的功能 游戏开始功能的实现效果: 实现思路: 1.显示随机位置的棋子 2.将棋子移动到棋盘上的指定位置 具体实现方式: 首先在SceneGame类中定义一个initStone()函数用于初始化棋子 initStone()函数实现了3个功能 1.创建棋子 2.将棋子设置到随机位置 3.隐藏棋子 initStone()中的代码: //初始化32个棋子 void SceneGame::

Cocos2d-X开发中国象棋《十二》游戏结果的显示与隐藏

在上一节中实现了游戏中实现播放背景音乐,这节将实现游戏结果的显示与隐藏 先看一下效果图 当玩家赢了后会显示玩家赢了的对话框 当点击对话框后会隐藏对话框和棋子 单击开始后会改变玩家棋子的颜色 当玩家输了后会显示玩家输了的对话框 游戏结果的实现思路: 1.当玩家赢了后,显示一个对话框,对话框中的内容为"恭喜你,你赢了" 2.当玩家输了后,显示一个对话框,对话框中的内容为"对不起,你输了" 3.当点击对话框后,会隐藏对话框,隐藏棋子 4.单击开始后,会发现改变了玩家棋子的

Cocos2d-x开发中国象棋《十一》在游戏中添加背景音乐

在上一节中实现了悔棋,在这节将介绍如何在游戏中添加背景音乐 看一下效果: 实现思路: 当单击后游戏中播放背景音乐,并且背景音乐切换按钮由变成 当单击后停止播放背景音乐,并且背景音乐切换按钮由变成 当游戏进入后台后停止播放背景音乐 当游戏恢复后继续播放背景音乐 实现代码: 在SceneGame类中定义一个成员函数Voice(CCObject*)用于实现背景音乐的切换,Voice(CCObject*)中的代码 //播放背景音乐 void SceneGame::Voice(CCObject*) { s

Cocos2d-X开发中国象棋《四》设计游戏场景

设计完开始界面后就要设计游戏界面了 为了理清设计思路先看一张游戏界面效果图 游戏界面设计思路: 1.在窗口上放一张桌子 2.在桌子上放一个棋盘 3.在棋盘右边添加新局按钮,暂不实现具体的功能 4.在棋盘右边添加开始按钮,暂不实现具体的功能 5.在棋盘右边添加悔棋按钮,暂不实现具体的功能 6.在棋盘右边添加难度按钮,暂不实现具体的功能 7.在棋盘右边添加声音按钮,暂不实现具体的功能 8.在棋盘右边添加返回按钮,暂不实现具体的功能 9.在桌子右边添加一个Voice标签 10.在桌子右边添加一个Ret

Cocos2d-X开发中国象棋《七》新局功能的实现

我在上一节中介绍了开始功能的实现,在这篇博客中将介绍新局功能的实现 首先看一下效果图 通过观察上图的实现效果可知新局的实现思路 1.隐藏选择框 2.隐藏32个棋子 3.初始化32个棋子 首先在SceneGame的init()中添加下面的代码用于创建选择框 //创建一个选择框 //当选中某个棋子的时候,选择框会套在选好的棋子上 _selectSprite = CCSprite::create("selected.png"); addChild(_selectSprite); //隐藏选择

Qt版本中国象棋开发(四)

内容:走法产生 中国象棋基础搜索AI, 极大值,极小值剪枝搜索, 静态估值函数 理论基础: (一)人机博弈走法产生: 先遍历某一方的所有棋子,再遍历整个棋盘,得到每个棋子的所有走棋情况(效率不高,可以改进) 1 void SingleGame::getAllPossibleMove(QVector<Step *> &steps) 2 { 3 int min, max; 4 if(this->_bRedTurn) 5 { 6 min = 0, max = 16; 7 } 8 els

中国象棋棋子及棋盘的绘制

一.题目简介 本课程设计主要是使用Swing这个Java自带的图形开发工具实现中国象棋棋子及棋盘的绘制,并根据相应的象棋规则,可以设计棋谱,完成棋谱的保存和对已保存的棋谱的演示,方便现在爱棋人士对残局的收藏于研究,而且达到了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练的应用面向对象的思想和设计方法解决实际问题的能力的目的. 1.当两方有一方将(帅)被吃掉后,程序不能自动结束或提示游戏结束,但想到该程序并不是要进行两方对弈,而是要设计棋谱所以在能力实现范围内

中国象棋-1.0开源啦

代码下载地址:https://code.csdn.net/FansUnion/chinesechess-v1 /** * 项目名称: FansChineseChess * 版本号:1.0 * 名字:雷文 * 博客: http://FansUnion.cn * CSDN:http://blog.csdn.net/FansUnion * 邮箱: [email protected] * QQ:240-370-818 * 版权所有: 2011-2013,leiwen */ 上次更新:2010-11-12