Cocos2dx实现象棋之布局
开始界面
#ifndef SCENESTART_H
#define SCENESTART_H
#include "cocos2d.h"
#include "SceneGame.h"
USING_NS_CC;
class SceneStart : public CCLayer
{
public:
    //SceneStart();
   static CCScene * scene();
   CREATE_FUNC(SceneStart)
   bool init();
    bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
    void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
    void update(float delta);
    CCSprite *_red;
    CCSprite *_black;
    bool _selected;
};
#endif // SCENESTART_H
开始界面实现了滚动布局与点击选择执黑还是执白的功能。 
放置棋盘与桌面
//desk
    CCSprite *desk=CCSprite::create("floor.jpg");
    addChild(desk);
    desk->setPosition(ccp(winSize.width/2,winSize.height/2));
    desk->setScaleX(winSize.width/desk->getContentSize().width);
    desk->setScaleY(winSize.height/desk->getContentSize().height);
    //add plate and  stone
    CCSprite *plate=CCSprite::create("background.png");
    plate->setAnchorPoint(ccp(0,0));
    plate->setPosition(_plateoffset);
    plate->setScale((winSize.height-_plateoffset.y*2)/plate->getContentSize().height);
    addChild(plate);
创建棋子类
#ifndef STONE_H
#define STONE_H
#include "cocos2d.h"
USING_NS_CC;
class Stone : public CCSprite
{
public:
    Stone();
    enum TYPE {JIANG,SHI,XIANG,CHE,MA,PAO,BING};
    static Stone *create(int id,bool red)
    {
        Stone *s=new Stone();
        s->init(id,red);
        s->autorelease();
        return s;
    }
   void reset(bool red);
   bool init(int id,bool red)
   {
       _id=id;
       _red=_id<16;
       //once init
       if(_id < 16)
         _type = _initPos[_id]._type;
         else
        _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"
               };
       int idx=(_red?0:1)*7+_type;
       CCSprite::initWithFile(stonePic[idx]);
       setScale(.8f);
       reset(red);
       return true;
   }
    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)
    static struct InitPos
    {
        int _x;
        int _y;
        Stone::TYPE _type;
    }_initPos[16];
};
#endif // STONE_H
加载棋子类,世界坐标与棋盘坐标的转换
  //addstone
    for(int i=0;i<32;i++)
    {
        _s[i]=Stone::create(i,red);
        addChild(_s[i]);
        //_s[i]->setPosition(ccp(_s[i]->getX()*_d,_s[i]->getY()*_d)+_stoneoffset);
        //setRealPos(_s[i]);
        _s[i]->setPosition(ccp(CCRANDOM_0_1()*winSize.width,CCRANDOM_0_1()*winSize.height));
        CCMoveTo* move=CCMoveTo::create(1,this->getStonePos(_s[i]->getX(), _s[i]->getY()));
        _s[i]->runAction(move);
    }
加载悔棋按钮
 CCMenu *menu=CCMenu::create();
    CCMenuItemImage *item=CCMenuItemImage::create("regret.jpg","regret.jpg",this,menu_selector(SceneGame::back));
    menu->addChild(item);
    addChild(menu);
    menu->setPositionX(menu->getPositionX()+200);
    _steps=CCArray::create();
    _steps->retain();
悔棋功能的实现
void SceneGame::back(CCObject *)
{
    //CCLog("HELLO WORLD\n");
    if(_steps->count()==0)
        return;
    Step *step=(Step*)_steps->lastObject();
    _s[step->_moveid]->setX(step->_xFrom);
    _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();
}
结果展示
Cocos2dx实现象棋之布局的更多相关文章
- cocos2dx实现象棋之运动
		1.头文件 void moveStone(int moveid, int killid, int x, int y); void moveComplete(CCNode*, void*); bool ... 
- Cocos2d-X中国象棋的发展《五岁以下儿童》摆棋
		在博客上,以实现创建的游戏场景.而一些button,因为button落实到事件作出详细答复,需要使用一些功能摆棋.为此我特意button上的背面的具体实施, 在摆棋前先理清一下摆棋的思路: 1.创建一 ... 
- js+canvas实现象棋的布局、走棋位置提示、走棋代码
		<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ... 
- 将cocos2dx项目从Visual Studio 迁移到 xcode
		因为Visual Studio和XCode的巨大差异性,一开始选择任何一个IDE,都会有一个迁移的过程,XCode的迁移到Visual Studio相对非常简单,不用再介绍.将项目从Visual St ... 
- cocos2d-x游戏开发系列教程-中国象棋02-main函数和欢迎页面
		之前两个博客讲述了象棋的规格和工程文件之后,我们继续深入的从代码开始学习cocos2dx 首先从程序入口main函数开始 main函数 int APIENTRY _tWinMain(HINSTANCE ... 
- cocos2d-x游戏开发系列教程-中国象棋01-工程文件概述
		上一篇博文我们看到了象棋的效果图,这一张我们来看象棋代码的整体概述 让我们先对整个代码框架有个了解. 主目录: 主目录包含内容如上图: classes目录:业务代码 proj.win32:包括main ... 
- cocos2d-x游戏开发系列教程-中国象棋00-前言
		象棋描述 在说代码之前,我们先让象棋效果登场,以方便大家对代码的理解 欢迎界面 中国象棋程序,运行起来的第一个界面是一个欢迎界面,该欢迎界面在停留一秒后进入游戏界面 游戏主界面 新局:所有棋子归位,状 ... 
- Cocos2d-X开发中国象棋《二》project文件概述
		我在上一篇博客中介绍了象棋的功能.在接下来的博客中将向大家介绍使用Cocos2d-X怎样一步一步开发中国象棋 开发工具: Cocos2d-X2.2.3 VS2012 项目的文件夹: Classes:存 ... 
- cocos2d-x游戏开发系列教程-中国象棋06-游戏规则
		前情回顾 上一个博文我们提到象棋运动的函数dealWithChess,但是只是说该函数完成了棋子的选择和移动功能 其实在这个函数里,在移动棋子之前,是要对棋子的移动是否合法进行判断的,我们一起来看看如 ... 
随机推荐
- 浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject
			http://www.cnblogs.com/LoveJenny/archive/2011/07/05/2098578.html ExpandoObject:表示一个对象,该对象包含可在运行时动态添加 ... 
- Redis 下载
			https://github.com/MSOpenTech/redis/releases下载 Redis伴侣Redis Desktop Manager:http://redisdesktop.com/ ... 
- spark对于elasticsearch里的复杂类型支持
			IP,直接在case class里用string, 可以考虑先用其它程序生成相关的mapping,然后再去用spark填充数据 
- eclipse错误:Unable to read workbench state. Workbench UI layout will be reset.XML document structures
			Unable to read workbench state. Workbench UI layout will be reset.XML document structures must start ... 
- ajax局部更新
			js //点击启用 $(".status").on("click",function(){ var id = $(this).attr("status ... 
- Quartz.net开源作业调度框架使用详解(转)
			前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ... 
- POJ2823 Sliding Window (单调队列)
			POJ2823 Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 38342 Accepte ... 
- js中的getAttribute方法使用示例
			getAttribute()方法是一个函数.它只有一个参数——你打算查询的属性的名字,下面为大家介绍下其具体的使用 getAttribute()方法 至此,我们已经向大家介绍了两种检索特定元素节点 ... 
- [Effective JavaScript 笔记]第18条:理解函数调用、方法调用及构造函数调用之间的不同
			面向对象编程中,函数.方法.类的构造函数是三种不同的概念. JS中,它们只是单个构造对象的三种不同的使用模式. 三种不同的使用模式 函数调用 function hello(username){ ret ... 
- Unity游戏开发之“屏幕截图”
			原地址:http://sygame.lofter.com/post/117105_791680 在unity游戏开发中,可能会遇到在游戏中截屏的效果.这儿提供两种截屏方法.(方法二提供显示截图缩略图代 ... 
