Esempio n. 1
0
void GameScene::moveBlocks()
{
    map<int, BlockSprite*> moveBlockList;
    for (vector<BlockSprite*>::const_iterator it = removedBlocks.begin(); it != removedBlocks.end(); ++it)
    {
        BlockFiledsPositionIndex to = getBlockFieldsPositionIndex((*it)->getTag());
        int x = to.x;
        for (int y = to.y; y < kMaxBlockTop-1; ++y) {
            blockFields[x][y] = blockFields[x][y+1];
            blockFields[x][y]->retain();
            if (blockFields[x][y]->getStatus() == kStatusNormal) {
                BlockSprite* blockSprite = blockFields[x][y];
                blockSprite->setNexPositionX(x);
                blockSprite->setNexPositionY(y);
                moveBlockList.insert(make_pair(blockSprite->getTag(), blockSprite));
            }
        }
        blockFields[x][kMaxBlockTop-1] = BlockSprite::create(kTagSweptBlock, kBlockRed, kStatusSwept);
    }
    
    for (map<int, BlockSprite*>::const_iterator it = moveBlockList.begin(); it != moveBlockList.end(); ++it)
    {
        CCDelayTime* delay = CCDelayTime::create(0.8f);
        CCFiniteTimeAction* move = CCMoveTo::create(0.4f, getPosition((*it).second->getNexPositionX(), (*it).second->getNexPositionY()));
        CCSequence* action = CCSequence::createWithTwoActions(delay, move);
        (*it).second->runAction(action);
    }
}
Esempio n. 2
0
void GameScene::removeBlocks()
{
    for (int x = 0; x < kMaxBlockLeft; ++x)
    {
        for (int y = 0; y < kMaxBlockTop; ++y)
        {
            if (blockFields[x][y]->getStatus() == kStatusMarked)
            {
                BlockSprite* removedBlock = BlockSprite::create(blockFields[x][y]->getTag(), blockFields[x][y]->getType(), blockFields[x][y]->getStatus());
                removedBlock->setNexPositionX(x);
                removedBlock->setNexPositionY(y);
                removedBlocks.push_back(removedBlock);
                removedBlockTypesCounter[blockFields[x][y]->getType()] += 1;
            }
        }
    }
}