zoukankan      html  css  js  c++  java
  • 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
    ");
        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();
    
    }
    

    结果展示

    结果

  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223764.html
Copyright © 2011-2022 走看看