Ejemplo n.º 1
0
Field::Field(QWidget *parent) :
    QWidget(parent)
{
    QTime time = QTime::currentTime();
    qsrand((uint) time.msec());

    for (int i = 0; i < 16; ++i)
        cells_[i] = new Cell(false);
    generateCell();
    generateCell();
}
Ejemplo n.º 2
0
void GameMap::initMap()
{
	// init map data first
	initMapData();

	// generate some default cell on map
	int len = 4;
	for (int i = 0; i < len; i++) {
		generateCell();
	}

	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	_debugLabel = Label::createWithTTF("", "fonts/arial.ttf", 12);
	_debugLabel->setPosition(origin.x + visibleSize.width - 50, origin.y + visibleSize.height - 50);
	this->addChild(_debugLabel);

	// init event listener
	auto listener = EventListenerTouchOneByOne::create();
	//listener->setSwallowTouches(true);
	listener->onTouchBegan = CC_CALLBACK_2(GameMap::onTouchBegan, this);
	listener->onTouchMoved = CC_CALLBACK_2(GameMap::onTouchMoved, this);
	listener->onTouchEnded = CC_CALLBACK_2(GameMap::onTouchEnded, this);
	this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
	//Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
}
Ejemplo n.º 3
0
void Field::onRightButtonPressed()
{
    for(int j = 2; j >= 0; --j)
    {
        for(int i = 0; i < 4; ++i)
        {
            Cell *cell = cells_[4 * i + j];
            if (cell->getValue() == 0)
                continue;

            int notEmptyCol = 4;
            for (int k = j + 1; k < 4; ++k)
            {
                if (cells_[4 * i + k]->getValue() != 0)
                {
                    notEmptyCol = k;
                    break;
                }
            }
            if (notEmptyCol == 4)
            {
                int value = cell->getValue();
                cells_[4 * i + 3]->setValue(value);
                cell->setValue(0);
                continue;
            }

            Cell *cell2 = cells_[4 * i + notEmptyCol];
            if (isCellsConnectable(cell, cell2))
            {
                int value = cell->getValue() +
                            cell2->getValue();
                cell2->setValue(value);
                cell2->setUpdated(true);
                cell->setValue(0);
            }
            else if (notEmptyCol == j + 1)
            {
                 continue;
            }
            else
            {
                cell2 = cells_[4 * i + notEmptyCol - 1];
                int value = cell->getValue();
                cell2->setValue(value);
                cell->setValue(0);
            }
        }
    }

    for (int i =0; i < 16; ++i)
        cells_[i]->setUpdated(false);
    generateCell();
    update();
}