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