开始界面
- #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();
- }