在博客上,以实现创建的游戏场景。而一些button,因为button落实到事件作出详细答复,需要使用一些功能摆棋。为此我特意button上的背面的具体实施,

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

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, 0, Stone::CHE},//马的位置(1,0){1, 0, Stone::MA},//相的位置(2,0){2, 0, Stone::XIANG},//士的位置(3,0){3, 0, Stone::SHI},//将的位置(4,0){4, 0, Stone::JIANG},//士的位置(5,0){5, 0, Stone::SHI},//相的位置(6,0){6, 0, Stone::XIANG},//马的位置(7,0){7, 0, Stone::MA},//车的位置(8,0){8, 0, Stone::CHE},//炮的位置(1,2){1, 2, Stone::PAO},//炮的位置(7,2){7, 2, Stone::PAO},//兵的位置(0,3){0, 3, Stone::BING},//兵的位置(2,3){2, 3, Stone::BING},//兵的位置(4,3){4, 3, Stone::BING},//兵的位置(6,3){6, 3, Stone::BING},//兵的位置(8,3){8, 3, Stone::BING},
};

创建棋子

//创建棋子
//第一个參数:棋子的类型
//第二个參数:棋子的颜色
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//两个棋子的颜色的下标相差 7int 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坐标相差9this->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相差16this->setX(_initPos[_id-16]._x);this->setY(_initPos[_id-16]._y);}}
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

Cocos2d-X中国象棋的发展《五岁以下儿童》摆棋相关推荐

  1. PE文件结构(五岁以下儿童)基地搬迁

    PE文件结构(五岁以下儿童) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 基址重定位 链接器生成一个PE文件时,它会如果程序被装入时使用的默认ImageBase基地址(VC默认 ...

  2. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  3. 5岁自学python编程-python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹...

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  4. 斗争程序猿(四十一)——历史朝代大学(五岁以下儿童)——我的娱乐

    文/温国兵 忙碌的大学生活总要有属于自己的娱乐方式.琴棋书画也好,游戏运动也罢. 上大学开通了人人网.新浪微博.腾讯微博.再到后来的微信.陌陌.来往.易信.米聊.Line.WhatsAPP,加上最開始 ...

  5. 阐述linux IPC(五岁以下儿童):system V共享内存

    [版权声明:尊重原创.转载请保留源:blog.csdn.net/shallnet 要么 .../gentleliu,文章学习交流,不用于商业用途]         system V共享内存和posix ...

  6. 开玩笑html5(五岁以下儿童)---绕地球月球,地球绕太阳运动(canvas实现,同样可以移动哦)...

    请珍惜劳动小编成果,这篇文章是原来小编,转载请注明出处. 速度的參数与真实速度有点差距.大家能够自行调整 <!DOCTYPE html> <html> <head> ...

  7. NGUI 3.5课程(五岁以下儿童)button-图片切换

    然后,我们去了一个样本,做一个button画面切换. 特征,像球员"开始"和"暂停". 写TestButton.cs脚本: using UnityEngine; ...

  8. 计算4000000000内的最大f(n)=n值---字符串的问题python实现(五岁以下儿童)

    问题: 写一个函数,计算4 000 000 000 以内的最大的那个f(n)=n的值,函数f的功能是统计全部0到n之间全部含有数字1的数字和.比方:f(13)= 6,由于"1"在& ...

  9. 用html5画地球椭圆绕太阳,开玩笑html5(五岁以下儿童)---绕地球月球,地球绕太阳运动(canvas实现,同样可以移动哦)...

    请珍惜劳动小编成果,这篇文章是原来小编,转载请注明出处. 速度的參数与真实速度有点差距.大家能够自行调整 地球绕着太阳转,月球绕着地球转 您的浏览器不支持canvas //获取画布 var canva ...

最新文章

  1. NVIDIA Turing Architecture架构设计(上)
  2. Unity OBB分包(基础APK+OBB) 与apk签名
  3. 新人与三年经验的交互设计师有多大的差距?
  4. python做请求转发_RequestDispatcher实现请求转发
  5. oracle怎么以时间排序,oracle指定数据排序在前面怎么处理
  6. xms和xmx为什么要相同_为什么开料机价格相差这么多?秘密在这里,你知道吗?...
  7. 对比鸿蒙,Google 的 Fuchsia 当前进度如何?
  8. 二位数组的示例 go语言
  9. codeforces 486 E. LIS of Sequence(dp)
  10. python 培训 邹博
  11. 测试工程师常见的算法面试题
  12. tif数据84坐标经纬度转Unity3D坐标
  13. Python如何使用Any和All?代码示例和解析
  14. 以下哪些是微型计算机,2017版计算机试题及答案
  15. eval()与train()(结合源码理解)
  16. 微信 进入公众号获取地理位置
  17. NBU OJ1211:一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。
  18. 美白宫高级顾问遭CWA黑客组织网络攻击
  19. 360P2建html网站,360 P2路由器密码用手机怎么设置?
  20. 基于java的校园二手网站的设计与实现

热门文章

  1. rhel 6.4 增加光盘为yum repo
  2. nyoj 56 阶乘中素数的个数
  3. 可用的免费公开的DNS
  4. 【Java】Java8新特性Lambda表达式和Stream API
  5. Ubuntu禁用网卡步骤(重启依然生效)
  6. 开发了一款chrome扩展程序
  7. oracle快速创建可用用户
  8. Swift3.0P1 语法指南——枚举
  9. 让ubuntu使用root帐号并让winscp以root身份登录
  10. yslow各个指标含义