void ArkanoidRemakeSdl::Frame()
{
  if (mSdlApp.ExistsSurface(mSnowfallSurf))
  {
    // Scroll the background
    mBkgndScroll += 20.0*(mCurrTime-mPrevTime);
    if (mBkgndScroll>0) mBkgndScroll=-mSdlApp.GetSurfHeight(mSnowfallSurf);
  }
  DrawBackground();
  DrawPlayArea();
  DrawBlocks();
  DrawBall();
  DrawShip();
  DrawBonus();
  DrawText();
  mSdlApp.UpdateWindow();
}
Ejemplo n.º 2
0
VOID DrawBarriers(int i)
{
	DOUBLE trackTop = i * 0.25 + (i % 2) * 0.01;
	DOUBLE trackBottom = (i + 1) * 0.25 + ((i + 1) % 2) * 0.01;

	HGDIOBJ backBrush;

	SelectObject(hdcBuffer, GetStockObject(GRAY_BRUSH));

	for (UINT j = 0; j < global.barriers[i].size(); j++)
	{
		double lastBarrierX = -1.;
		double lastBarrierHeight = 0.;

		barrierX = stickmanX +  //  Position of Stickman
			(global.barriers[i][j].msecs - gameTimePass) / global.currSong().msPerBeat / beatPerScreen;
		if (barrierX < -0.2 && j < global.barriers[i].size() - 1)
			continue;
		if (j >= 1)
		{
			lastBarrierX = stickmanX +  //  Position of Stickman
				(global.barriers[i][j - 1].msecs - gameTimePass) / global.currSong().msPerBeat / beatPerScreen;
			lastBarrierHeight = global.barriers[i][j - 1].height;
		}

		if (lastBarrierX >= 1.)
			break;

		if (i & 1)
			backBrush = GetStockObject(BLACK_BRUSH);
		else
			backBrush = GetStockObject(WHITE_BRUSH);

		//  Draw the Floor before this Barrier
		SelectObject(hdcBuffer, GetStockObject(GRAY_BRUSH));
		Rectangle(hdcBuffer,
			ToWindowX(lastBarrierX + 0.4 / beatPerScreen), ToWindowY(trackBottom - 0.05 * (lastBarrierHeight + 1.)) - 1,
			ToWindowX(barrierX), ToWindowY(trackBottom) + 1);

		//  Draw Judge Line
		if (!settings.hideJudgeLine)
		{
			SelectObject(hdcBuffer, GetStockObject(GRAY_BRUSH));
			Rectangle(hdcBuffer, ToWindowX(barrierX) - 2, ToWindowY(trackTop) - 1,
				ToWindowX(barrierX) + 2, ToWindowY(trackBottom) + 1);
		}

		//  Clear Barrier Area
		SelectObject(hdcBuffer, backBrush);
		Rectangle(hdcBuffer, ToWindowX(barrierX) + global.heroWidth / 2, ToWindowY(trackTop),
			ToWindowX(barrierX + 0.4 / beatPerScreen) - global.heroWidth / 2, ToWindowY(trackBottom) + 1);

		//  Draw Barrier
		SelectObject(hdcBuffer, GetStockObject(GRAY_BRUSH));
		switch (global.barriers[i][j].type)
		{
		case 0:
			DrawSpikes(i, j);
			break;
		case 1:
			DrawCliff(i, j);
			break;
		case 2:
			DrawBonus(i, j);
			break;
		case 3:
			DrawStar(i, j);
			break;
		case 4:
			DrawNoise(i, j);
			break;
		case INT_MAX:
			DrawNoBarrier(i, j);
			break;
		default:
			DrawSpikes(i, j);
			break;
		}

		SelectObject(hdcBuffer, GetStockObject(GRAY_BRUSH));
		if (j == global.barriers[i].size() - 1)
		{
			Rectangle(hdcBuffer,
				ToWindowX(barrierX + 0.4 / beatPerScreen), ToWindowY(trackBottom - 0.05 * (global.barriers[i][j].height + 1.)) - 1,
				ToWindowX(1) + 1, ToWindowY(trackBottom) + 1);
		}
	}
}