void LCCrossMatchGame::shuffleNodes(CCArray* nodeArray) { CCArray *tempArray = CCArray::arrayWithArray(nodeArray); CCPoint *tempPosition = (CCPoint *)malloc(sizeof(CCPoint) * nodeArray->count()); for (int i=0; i<nodeArray->count(); i++) { CCNode* node = (CCNode*)tempArray->randomObject(); tempArray->removeObject(node); tempPosition[i] = node->getPosition(); } for (int i=0; i<nodeArray->count(); i++) { CCNode* node = (CCNode*)nodeArray->objectAtIndex(i); node->setPosition(tempPosition[i]); } free(tempPosition); }
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); }
// manage nodes void LCWordCloudLayer::resetNodesPosition() { m_pPositionArray->removeAllObjects(); int numberOfSeperation = findNumberOfSeperation(m_pNodeArray->count()); CCArray *initPositionArray = makeInitialPositionArray(numberOfSeperation); if (initPositionArray->count() < m_pNodeArray->count()) { initPositionArray = makeInitialPositionArray(numberOfSeperation + 1); } for (int i=0; i<m_pNodeArray->count(); i++) { LCVector3Container* container = (LCVector3Container*) initPositionArray->randomObject(); if (container != NULL) { initPositionArray->removeObject(container); m_pPositionArray->addObject(container); } CCNode* node = (CCNode*) m_pNodeArray->objectAtIndex(i); if (!node->getParent()) { this->addChild(node); } } this->syncronizeNodesPosition(); }
bool Troop::init() { do { CC_BREAK_IF(!CCLayer::init()); this->autorelease(); removeQueue = CCArray::create(); removeQueue->retain(); petTypes = Utils::getPetTypes(); //init pets array pets = CCArray::createWithCapacity(2 * cap); vlinks = CCArray::createWithCapacity(cap); hlinks = CCArray::createWithCapacity(cap); pets->retain(); vlinks->retain(); hlinks->retain(); //todo: 可能出现某一个节点没有可用类型的情况,这种情况重新初始化 for (int i = 0; i < cap; i++) { vlinks->addObject(CCArray::create()); hlinks->addObject(CCArray::create()); CCArray* availTypes = CCArray::createWithArray(petTypes); int v = i; int h = i; for (int j = i - col; j >= 0 && j >= i - 2*col; j -= col) { CCArray* vlink = (CCArray*)vlinks->objectAtIndex(j); int size = vlink->count(); if (size == 0) { continue; } else if (size >= 2) { Utils::removeStringFromArray(availTypes, ((Pet*)vlink->objectAtIndex(0))->getType()); break; } } if (i%col != 0) { for (int j = i - 1; j >= 0 && j >= i - 2; j--) { CCArray* hlink = (CCArray*)hlinks->objectAtIndex(j); int size = hlink->count(); if (size == 0) { continue; } else if (size >= 2) { Utils::removeStringFromArray(availTypes, ((Pet*)hlink->objectAtIndex(0))->getType()); break; } } } CCString* petType = (CCString*)availTypes->randomObject(); if (i >= col && petType->isEqual(getPetAtIndex(i - col)->getType())) { v -= col; } if (i > 0 && i % 7 != 0 && petType->isEqual(getPetAtIndex(i - 1)->getType())) { h--; } Pet* pet = new Pet(petType, i); pet->setVLink(v); pet->setHLink(h); ((CCArray*)vlinks->objectAtIndex(v))->addObject(pet); ((CCArray*)hlinks->objectAtIndex(h))->addObject(pet); pets->addObject(pet); int c = i % 7; int r = 3 - i / 7; pet->setPosition(ccp(Unit::GRID_SIZE * c + Unit::GRID_SIZE/2, Unit::GRID_SIZE * r + Unit::GRID_SIZE/2)); addChild(pet); } for (int i = cap; i < 2 * cap; i++) { pets->addObject(Pet::createFakePet()); } selectedPet = NULL; return true; } while (0); return false; }