练手的小代码,类似连连看的小游戏,开发环境vs2010,cocos2d-x 2.04
主要实现代码
GameTwoScene.h
#ifndef __GAMETWO_SCENE_H__ #define __GAMETWO_SCENE_H__ #include "cocos2d.h" #include "SimpleAudioEngine.h" #include <vector> #include <list> class GameTwoScene : public cocos2d::CCLayer { public: GameTwoScene(void); virtual ~GameTwoScene(void); // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone virtual bool init(); // there's no 'id' in cpp, so we recommand to return the exactly class pointer static cocos2d::CCScene* scene(); // a selector callback void menuCloseCallback(CCObject* pSender); virtual void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent); // void initPic(); void initPic2(); void randData(); // implement the "static node()" method manually CREATE_FUNC(GameTwoScene); private: int picNum; int picSize; int row; int column; cocos2d::CCSize m_WinSize; cocos2d::CCArray* allSprites; std::vector<cocos2d::CCSprite*>* m_pAllPic; cocos2d::CCLabelTTF *label1; cocos2d::CCLabelTTF *label3; cocos2d::CCLabelTTF *label5; cocos2d::CCSprite* firstSprite; int sum; }; #endif __GAMETWO_SCENE_H__
GameTwoScene.cpp
#include "GameTwoScene.h" using namespace std; USING_NS_CC; GameTwoScene::GameTwoScene(void) { } GameTwoScene::~GameTwoScene(void) { } bool GameTwoScene::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::init()); m_WinSize = CCDirector::sharedDirector()->getWinSize(); allSprites = CCArray::create(); allSprites->retain(); firstSprite = NULL; picNum = 9; picSize = 32; row = 7; column = 8; this->setTouchEnabled(true); initPic2(); label1 = CCLabelTTF::create("the string", "Marker Felt", 21); this->addChild(label1); label1->setPosition(ccp((m_WinSize.width/2 - 40), (m_WinSize.height - 20))); label1->setString("?"); CCLabelTTF *label2 = CCLabelTTF::create("the string", "Marker Felt", 21); this->addChild(label2); label2->setPosition(ccp((m_WinSize.width/2 - 20), (m_WinSize.height - 20))); label2->setString("+"); label3 = CCLabelTTF::create("the string", "Marker Felt", 21); this->addChild(label3); label3->setPosition(ccp((m_WinSize.width/2 - 0), (m_WinSize.height - 20))); label3->setString("?"); CCLabelTTF *label4 = CCLabelTTF::create("the string", "Marker Felt", 21); this->addChild(label4); label4->setPosition(ccp((m_WinSize.width/2 + 20), (m_WinSize.height - 20))); label4->setString("="); label5 = CCLabelTTF::create("the string", "Marker Felt", 21); this->addChild(label5); label5->setPosition(ccp((m_WinSize.width/2 + 40), (m_WinSize.height - 20))); label5->setString("10"); randData(); CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect("connect_effect.mp3"); CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("back1.mp3"); bRet = true; } while (0); return bRet; } CCScene* GameTwoScene::scene() { CCScene * scene = NULL; do { scene = CCScene::create(); CC_BREAK_IF(! scene); GameTwoScene *layer = GameTwoScene::create(); CC_BREAK_IF(! layer); scene->addChild(layer); } while (0); return scene; } // a selector callback void GameTwoScene::menuCloseCallback(CCObject* pSender) { } void GameTwoScene::initPic() { CCTexture2D *playerRunTexture0 = CCTextureCache::sharedTextureCache()->addImage("number.png"); for(int r = 0;r < row; r++) { for(int c = 0; c < column; c++) { CCSprite* testIcon = CCSprite::createWithTexture(playerRunTexture0,CCRectMake(0, c * picSize + 2, picSize, picSize)); testIcon->setPosition(ccp(100 + c * picSize, 100 + r * picSize + 3)); addChild(testIcon,1); } } } void GameTwoScene::initPic2() { CCArray *sprites = CCArray::create(); char *pTrName = new char[40]; srand( time(NULL) ); for (int i=0;i<row;i++) { for (int j=0;j<column;j++) { int randNum = rand(); randNum = randNum % (picNum + 1); sprintf(pTrName,"0%d.png", randNum); CCSprite* pPic = CCSprite::create(pTrName); pPic->setTag(randNum); sprites->addObject(pPic); } } for(int i=0;i<row;i++) { for(int j=0;j<column;j++) { int count = sprites->count(); int randNum = rand(); randNum = randNum % (count); CCSprite* sprite = (CCSprite*)sprites->objectAtIndex(randNum); sprite->setScale(picSize/sprite->getContentSize().width); sprite->setPosition(ccp(100 + j * picSize, 50 + i * picSize + 3)); sprites->removeObjectAtIndex(randNum); addChild(sprite); allSprites->addObject(sprite); } } } void GameTwoScene::ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent) { CCTouch *touch = (CCTouch*)pTouches->anyObject(); CCPoint location = touch->getLocation(); int count = allSprites->count(); for(int i = 0; i < count; i++) { CCSprite* sprite = (CCSprite*)allSprites->objectAtIndex(i); CCRect rect= sprite->boundingBox(); if(rect.containsPoint(location)) { if(firstSprite == NULL) { firstSprite = sprite; CCActionInterval* action; action = CCFadeOut::create(0.5); CCActionInterval* action_back = action->reverse(); CCActionInterval* seq = (CCActionInterval*)(CCSequence::create( action, action_back, NULL )); sprite->runAction( CCRepeatForever::create(seq) ); label1->setString(CCString::createWithFormat("%d", sprite->getTag())->getCString()); } else { CCRect firstRect = firstSprite->boundingBox(); if(!firstRect.containsPoint(location)) { CCActionInterval* action; action = CCFadeOut::create(0.5); CCActionInterval* action_back = action->reverse(); CCActionInterval* seq = (CCActionInterval*)(CCSequence::create( action, action_back, NULL )); sprite->runAction( CCRepeatForever::create(seq) ); label3->setString(CCString::createWithFormat("%d", sprite->getTag())->getCString()); if(sprite->getTag() + firstSprite->getTag() == sum) { this->removeChild(sprite, true); this->removeChild(firstSprite, true); CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("connect_effect.mp3"); allSprites->removeObject(sprite); allSprites->removeObject(firstSprite); randData(); firstSprite = NULL; break; } else { firstSprite->stopAllActions(); firstSprite->setOpacity(255); label1->setString(CCString::createWithFormat("%d", sprite->getTag())->getCString()); label3->setString("?"); firstSprite = sprite; } } } } } } void GameTwoScene::randData() { int co = allSprites->count(); if(co > 0){ label1->setString("?"); label3->setString("?"); int randNum = -1; int num = -1; do { int randNum1 = rand(); randNum1 = randNum1 % (co); CCSprite* sprite = (CCSprite*)allSprites->objectAtIndex(randNum1); int num1 = sprite->getTag(); if(randNum != -1 && randNum != randNum1) { sum = num + num1; label5->setString(CCString::createWithFormat("%d", sum)->getCString()); break; } else { randNum = randNum1; num = num1; } }while(true); } }
源码地址:http://www.oschina.net/code/snippet_117179_22239