消去类练手游戏代码

练手的小代码,类似连连看的小游戏,开发环境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

你可能感兴趣的:(消去类练手游戏代码)