第10章2練習問題3解答例

解答例を紹介する。実力でできた人のみ、自分のプログラムと比較し、参考にしてください。
努力無き者は見るべからず!!

//-----------------------------------------------------------------------------
// 関数名 : BackDraw()
// 機能概要: 背景描画処理
//-----------------------------------------------------------------------------
static void BackDraw(void)
{
    HRESULT hRet;
    RECT rcBack;

    /* 1枚で描画できるかどうか? */
    if (Back_Y < 480) // 2枚必要
    {
        // 下側に表示する画像の矩形をセットし、描画
        SetRect(&rcBack, 0, 0, 640, Back_Y);
        hRet = g_pDDSBack->BltFast(0, 480 - Back_Y, g_pDDSGame, &rcBack, DDBLTFAST_NOCOLORKEY);
        if (hRet != DD_OK)
            return;
        // 上側に表示する画像の矩形をセット
        SetRect(&rcBack, 0, (640 - 480) + Back_Y, 640, 640);
    }
    else // 1枚でOK
    {
        SetRect(&rcBack, 0, Back_Y - 480, 640, Back_Y); // 表示する背景の矩形をセット
    }
    /* 一枚絵、または上側の背景を描画 */
    hRet = g_pDDSBack->BltFast(0, 0, g_pDDSGame, &rcBack, DDBLTFAST_NOCOLORKEY);
    if (hRet != DD_OK)
        return;

    /* 背景の移動 */
    Back_Y -= Back_Speed;
    if (Back_Y <= 0)
        Back_Y = 640;

}