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