Exemple #1
0
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);
}
Exemple #2
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 #3
0
// 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();
}
Exemple #4
0
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;
}