示例#1
0
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;
		}

	}
}
示例#2
0
    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();
                    }
                }
            }
        }
    }