Exemple #1
0
void WordPuzzleLayer::arrangeComponents(const char* word, CCArray* boxArray, CCArray* alphabetArray)
{
	float widthOfBlock = this->getBoxImage()->getContentSize().width;

	//modified by YoungJae Kwon
#if (defined PD_IPHONE)
	float paddingOfCharacter = (585.00/2.0f - 56.00/2.0f) / 6.0f - widthOfBlock;
#elif (defined ANDROID_PHONE)
	float paddingOfCharacter = 111 - 48 - widthOfBlock;
#else
	float paddingOfCharacter = (105) - widthOfBlock;
#endif
	
	int numberOfCharacter = strlen(word);
	float firstX = this->getContentSize().width/2 - (paddingOfCharacter + widthOfBlock) / 2 * (numberOfCharacter - 1);
	

	
	for (int i=0; i<boxArray->count(); i++) {
		CCSprite* blockSprite = (CCSprite*) boxArray->objectAtIndex(i);
		blockSprite->setPosition(ccp(firstX + (widthOfBlock + paddingOfCharacter) * i, blockY));
	}
	
	for (int i=0; i<alphabetArray->count(); i++) {
		LCWordPuzzleAlphabet* alphabetSprite = (LCWordPuzzleAlphabet*) alphabetArray->objectAtIndex(i);
		alphabetSprite->setPosition(ccp(firstX + (widthOfBlock + paddingOfCharacter) * i, alphaY+(rand() % maxShift)) );
		alphabetSprite->setOriginalPosition(alphabetSprite->getPosition());
	}
	
	// suffle alphabets
	this->shuffleSprites(alphabetArray);
}
Exemple #2
0
// loadSprites의경우 인덱스 0부터 로딩 시작 불가능하므로 초기에는 이 함수를 호출할것
void LCWordPuzzleGame::loadInitialSprites()
{	
	// added by YoungJae Kwon
	if (m_pIndexArray->count() == 0) 
	{
		// loadIndex 델리게이션을 구현안했을경우 스프라이트 로딩 안함
		return;
	}
	m_pCurrentWordImage = NULL;
		
	// initialize
	m_iNumberOfFinishedCharacter = 0;
	m_iIndexOfTargetCharacter = 0;
	m_bIsFinished = false;
	
	// load data with index
	m_iIndex = 0;
	strcpy(m_pCurrentWord, this->getWordWithIndex(m_pIndexArray, m_iIndex));		
	CCSprite* imageSprite = this->getImageWithIndex(m_pIndexArray, m_iIndex);

	// added by YOungJae Kwon
	m_pCurrentWordImage = imageSprite;
	this->addChild(imageSprite, zIMAGE_SPRITE);
	m_pLoadedSprites->addObject(imageSprite);
	
	for (int i=0; i < strlen(m_pCurrentWord); i++) 
	{
		CCSprite *blockSprite = this->getBoxImage();
		this->addChild(blockSprite, zBLOCK_SPRITE);
		m_pBlockSprites->addObject(blockSprite);
		m_pLoadedSprites->addObject(blockSprite);
		
		LCWordPuzzleAlphabet* alphabetSprite = this->getAlphabetImage(m_pCurrentWord[i]);
		alphabetSprite->setAlphabet(m_pCurrentWord[i]);
		this->addChild(alphabetSprite, zCHARACTER_SPRITE);
		m_pCharacterSprites->addObject(alphabetSprite);
		m_pLoadedSprites->addObject(alphabetSprite);
	}
	
	this->arrangeComponents(m_pCurrentWord, m_pBlockSprites, m_pCharacterSprites);
	
	// suffle alphabets
	//this->shuffleSprites(m_pCharacterSprites);
	
	// fade in animation
	for (int i=0; i < m_pLoadedSprites->count(); i++) 
	{
		CCSprite *loadedSprite = (CCSprite *)m_pLoadedSprites->objectAtIndex(i);
		loadedSprite->runAction(CCFadeIn::actionWithDuration(0.5f));
	}
}
Exemple #3
0
void LCWordPuzzleGame::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
{
	if (m_iIndexOfTargetCharacter + 1 > strlen(m_pCurrentWord)) {
		// ignore if game finished
		return;
	}
	for (int i=0; i<m_pCharacterSprites->count(); i++) {
		LCWordPuzzleAlphabet* alphabetSprite = (LCWordPuzzleAlphabet*)m_pCharacterSprites->objectAtIndex(i);
		if (LCUtil::isTouchInside(alphabetSprite, pTouches)) {
			char touchedCharacter = alphabetSprite->getAlphabet();
			char targetCharacter = *(m_pCurrentWord + m_iIndexOfTargetCharacter);
			if (targetCharacter == touchedCharacter) {
				// if touched correct character
				this->didCorrectCharacterSelected(); // deprecated
				this->didCorrectCharacterSelected(m_pIndexArray, m_iIndex);
				
				m_pFinishedCharacterSprites->addObject(alphabetSprite);
				m_pCharacterSprites->removeObject(alphabetSprite);
				CCMoveTo *moveToBlock = CCMoveTo::actionWithDuration(0.5, ((CCLabelAtlas *)m_pBlockSprites->objectAtIndex(m_iIndexOfTargetCharacter))->getPosition());
				alphabetSprite->runAction(CCSequence::actions(moveToBlock, CCCallFunc::actionWithTarget(this, callfunc_selector(LCWordPuzzleGame::didCorrectCharacterAnimationFinished)), NULL));
				m_iIndexOfTargetCharacter++;
				break;
			} else {
				// if touched incorrect character
				this->didIncorrectCharacterSelected(); // deprecated
				this->didIncorrectCharacterSelected(m_pIndexArray, m_iIndex);
				CCMoveTo *moveToBlock = CCMoveTo::actionWithDuration(0.5, ((CCSprite *)m_pBlockSprites->objectAtIndex(m_iIndexOfTargetCharacter))->getPosition());
				CCMoveTo *moveToOrigin = CCMoveTo::actionWithDuration(0.5, alphabetSprite->getOriginalPosition());
				alphabetSprite->runAction(CCSequence::actions(moveToBlock, 
															  CCCallFunc::actionWithTarget(this, callfunc_selector(LCWordPuzzleGame::didIncorrectCharacterMetBlockAnimationFinished)),
															  moveToOrigin, 
															  CCCallFunc::actionWithTarget(this, callfunc_selector(LCWordPuzzleGame::didIncorrectCharacterAnimationFinished)), 
															  NULL));
			}
		}
	}
	
	//added by YOungJae Kwon
	// 워드이미지가 터치된걸 체크
	if (m_pCurrentWordImage == NULL)
		return;
	
	CCTouch* touch = (CCTouch*)pTouches->anyObject();	
	if ( CCRect::CCRectContainsPoint(m_pCurrentWordImage->getRect(),m_pCurrentWordImage->getParent()->convertTouchToNodeSpace(touch)) ) 
	{
		this->didWordImageTouched(m_pCurrentWordImage);
	}
	
}
Exemple #4
0
LCWordPuzzleAlphabet* WordPuzzleLayer::getAlphabetImage(char alphabet)
{
	LCWordPuzzleAlphabet* alphabetSprite = new LCWordPuzzleAlphabet();
	char buf[100];

	//modified by YoungJae Kwon
#if (defined PD_IPHONE) || (defined ANDROID_PHONE)
	sprintf(buf, __CONFIG_IMAGE_PATH_GAME__("alphabet/%c.png"), alphabet);
#else
	sprintf(buf, "game/alphabet/%c.png", alphabet);
#endif
	alphabetSprite->initWithFile(buf);
	alphabetSprite->autorelease();
	return alphabetSprite;
}
Exemple #5
0
void LCWordPuzzleGame::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
{
	for (int i=0; i<m_pCharacterSprites->count(); i++) {
		LCWordPuzzleAlphabet* alphabetSprite = (LCWordPuzzleAlphabet*)m_pCharacterSprites->objectAtIndex(i);
		if (LCUtil::isTouchInside(alphabetSprite, pTouches)) {
			CCScaleTo *scaleUp = CCScaleTo::actionWithDuration(0.1f, 1.2f);
			CCScaleTo *scaleDown = CCScaleTo::actionWithDuration(0.1f, 1.0f);
			alphabetSprite->runAction(CCSequence::actions(scaleUp,scaleDown,NULL));
		}
	}
	for (int i=0; i<m_pFinishedCharacterSprites->count(); i++) {
		LCWordPuzzleAlphabet* alphabetSprite = (LCWordPuzzleAlphabet*)m_pFinishedCharacterSprites->objectAtIndex(i);
		if (LCUtil::isTouchInside(alphabetSprite, pTouches)) {
			CCScaleTo *scaleUp = CCScaleTo::actionWithDuration(0.1f, 1.2f);
			CCScaleTo *scaleDown = CCScaleTo::actionWithDuration(0.1f, 1.0f);
			alphabetSprite->runAction(CCSequence::actions(scaleUp,scaleDown,NULL));
		}
	}
}
Exemple #6
0
void LCWordPuzzleGame::shuffleSprites(CCArray* alphabetSpriteArray)
{
	CCArray *tempArray = CCArray::arrayWithArray(alphabetSpriteArray);
	CCPoint *tempPosition = (CCPoint *)malloc(sizeof(CCPoint) * alphabetSpriteArray->count());
	
	for (int i=0; i<alphabetSpriteArray->count(); i++) {
		LCWordPuzzleAlphabet* alphabetSprite = (LCWordPuzzleAlphabet*)tempArray->randomObject();
		tempArray->removeObject(alphabetSprite);
		
		tempPosition[i] = alphabetSprite->getPosition();
	}
	
	for (int i=0; i<alphabetSpriteArray->count(); i++) {
		LCWordPuzzleAlphabet* alphabetSprite = (LCWordPuzzleAlphabet*)m_pCharacterSprites->objectAtIndex(i);
		alphabetSprite->setPosition(tempPosition[i]);
		alphabetSprite->setOriginalPosition(tempPosition[i]);
	}
	
	free(tempPosition);
}
Exemple #7
0
void LCWordPuzzleGame::loadSprites()
{	
	// added by YoungJae Kwon
	if (m_pIndexArray->count() == 0) 
	{
		// loadIndex 델리게이션을 구현안했을경우 스프라이트 로딩 안함
		return;
	}
	m_pCurrentWordImage = NULL;
	
	//remove all sprites to init
	for (int i=0; i < m_pLoadedSprites->count(); i++) 
	{
		CCSprite *loadedSprite = (CCSprite *)m_pLoadedSprites->objectAtIndex(i);
		CCSequence* seq = CCSequence::actions(CCFadeOut::actionWithDuration(0.5f), 
											  CCCallFuncN::actionWithTarget(this, callfuncN_selector(LCWordPuzzleGame::didSpriteAnimated)), 
											  NULL);
		loadedSprite->runAction(seq);
		//loadedSprite->removeFromParentAndCleanup(true);
	}
	m_pLoadedSprites->removeAllObjects();
	m_pBlockSprites->removeAllObjects();
	m_pCharacterSprites->removeAllObjects();
	m_pFinishedCharacterSprites->removeAllObjects();
	
	// initialize
	m_iNumberOfFinishedCharacter = 0;
	m_iIndexOfTargetCharacter = 0;
	m_bIsFinished = false;
	
	// load data with index
	// 그림있는 단어만 갖고오기 체크부분
	while (1) 
	{
		m_iIndex = (m_iIndex + 1 + m_pIndexArray->count()) % m_pIndexArray->count();
		strcpy(m_pCurrentWord, this->getWordWithIndex(m_pIndexArray, m_iIndex));

		CCSprite* imageSprite = this->getImageWithIndex(m_pIndexArray, m_iIndex);
		if (!imageSprite)
		{
			m_iIndex++;
			continue;
		}
		// added by YOungJae Kwon
		m_pCurrentWordImage = imageSprite;
		this->addChild(imageSprite, zIMAGE_SPRITE);
		m_pLoadedSprites->addObject(imageSprite);
		break;
	}
	
	for (int i=0; i < strlen(m_pCurrentWord); i++) 
	{
		CCSprite *blockSprite = this->getBoxImage();
		this->addChild(blockSprite, zBLOCK_SPRITE);
		m_pBlockSprites->addObject(blockSprite);
		m_pLoadedSprites->addObject(blockSprite);
		
		LCWordPuzzleAlphabet* alphabetSprite = this->getAlphabetImage(m_pCurrentWord[i]);
		alphabetSprite->setAlphabet(m_pCurrentWord[i]);
		this->addChild(alphabetSprite, zCHARACTER_SPRITE);
		m_pCharacterSprites->addObject(alphabetSprite);
		m_pLoadedSprites->addObject(alphabetSprite);
	}
	
	this->arrangeComponents(m_pCurrentWord, m_pBlockSprites, m_pCharacterSprites);
	
	// suffle alphabets
	//this->shuffleSprites(m_pCharacterSprites);
	
	// fade in animation
	for (int i=0; i < m_pLoadedSprites->count(); i++) 
	{
		CCSprite *loadedSprite = (CCSprite *)m_pLoadedSprites->objectAtIndex(i);
		loadedSprite->runAction(CCFadeIn::actionWithDuration(0.5f));
	}
}