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); }
// 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)); } }
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); } }
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; }
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)); } } }
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); }
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)); } }