void Game::tick() { ballMove(); forceRacketIntoField(); while (true) { bool hit = false; Brick* pBrickRef = nullptr; HitRecord hr; HitRecord lhr; if (hitTopField(lhr) == true && lhr.getRollback() > hr.getRollback()) { hit = true; hr = lhr; } if (hitRightField(lhr) == true && lhr.getRollback() > hr.getRollback()) { hit = true; hr = lhr; } //Bottom border if (hitBottomField(lhr) == true && lhr.getRollback() > hr.getRollback()) { setBallOwner(); ballExit(); hr = lhr; break; } if (hitLeftField(lhr) && lhr.getRollback() > hr.getRollback()) { hit = true; hr = lhr; } hitRacket(lhr, hr, hit); pBrickRef = hitBrick(lhr, hr, hit); if (hit) { setBallPosition(hr); if (pBrickRef != nullptr) { pBrickRef->strength()--; incrementScore(); if (pBrickRef->strength() == 0) { removeBrick(pBrickRef); } } } else { break; } } }
void updateScene(float elapsed) { if (!block) { lane = rand()%cols; num = rand()%10+1; block = new PHImageView(PHRect(width * lane, height * lines, width, height)); block->setImage(gm->imageNamed("brick")); PHColor clr(rand()%(255-50)+50, rand()%(255-50)+50, rand()%(255-50)+50, 255); clr *= 1/255.0f; block->setTintColor(clr); //block->setShader(gm->shaderProgramNamed("rares_shader")); PHTextView * tv = new PHTextView(block->bounds()); tv->setFont(gm->defaultFont()); tv->setFontColor(PHWhiteColor); tv->setAlignment(PHTextView::justifyCenter | PHTextView::alignCenter); tv->setFontSize(40); ostringstream oss; int dif; int sgn = rand()%5; if (sgn<3) { oss<<num; } else { if (sgn<4) { dif = rand()%10; oss<<num+dif<<'-'<<dif; } else { dif = rand()%num; oss<<num-dif<<'+'<<dif; } } tv->setText(oss.str()); block->addChild(tv); tv->release(); pv->addChild(block); } PHRect r = block->frame(); r.y -= elapsed * (dn?(speed*3):speed); float l = vec[lane].size() * height; bool b = false; if (r.y<=l) { r.y = l; vec[lane].push_back(num); img[lane].push_back(block); b = true; } block->setFrame(r); if (b) { block->release(); block = NULL; int curp = vec[lane].size()-1; bool dd, dl, dr; dd = ((vec[lane].size()>=2) && (num == vec[lane][curp-1])); dl = ((lane>0) && (vec[lane-1].size()>curp) && (vec[lane-1][curp] == num)); dr = ((lane<cols-1) && (vec[lane+1].size()>curp) && (vec[lane+1][curp] == num)); if (dd || dl || dr) removeBrick(lane, curp); if (dd) removeBrick(lane, curp-1); if (dl) removeBrick(lane-1, curp); if (dr) removeBrick(lane+1, curp); if (vec[lane].size() >= lines) { for (int i = 0; i<cols; i++) { while (vec[i].size()) { PHView * v = img[i].back(); v->removeFromParent(); vec[i].pop_back(); img[i].pop_back(); } } } } }