「ポポペのプロ~4.動かさないと」が抜けていたことに気がつきました。
別のところにまとめておきましたので、そちらを参照してください。
もっとも、誰も指摘しなかったということは、誰も気にしてなかったと言うことでしょうね・・・(^^;
ポポペのプロ~インデックス
別のところにまとめておきましたので、そちらを参照してください。
もっとも、誰も指摘しなかったということは、誰も気にしてなかったと言うことでしょうね・・・(^^;
ポポペのプロ~インデックス
struct position_t posTamaHou;
// WM_CREATE void DoWmCreate(HWND hWnd) { hwndCB = CommandBar_Create(hInst, hWnd, 1); CommandBar_InsertMenubar(hwndCB, hInst, IDM_MENU, 0); CommandBar_AddAdornments(hwndCB, 0, 0); hdcBmp = CreateCompatibleDC(GetDC(hWnd)); hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1)); SelectObject(hdcBmp, hBmp); hdcScreen = CreateCompatibleDC(GetDC(hWnd)); hScreen = CreateCompatibleBitmap(GetDC(hWnd), 320, 240); SelectObject(hdcScreen, hScreen); PatBlt( hdcScreen, 0, 0, 320, 240, WHITENESS ); posInv.x = 320; posInv.y = 24; SetTimer(hWnd, 1, 200, NULL); iInvTime = 0; wKey = 0; posHou.x = 0; posHou.y = 240 - 48; BitBlt( hdcScreen, // 転送先デバイスコンテキスト posHou.x, // 表示位置 X座標 posHou.y, // 表示位置 Y座標 32, // 表示サイズ 幅 24, // 表示サイズ 高さ hdcBmp, // 転送元デバイスコンテキスト 64, // 転送元 X座標 24, // 転送元 Y座標 SRCCOPY ); // そのまま転送 posTamaHou.x = -1; posTamaHou.y = 0; }
case WM_CREATE: DoWmCreate(hWnd); break;
void GmMoveHou(void) { switch (wKey) { case VK_LEFT: GmMoveHouSub(-1); // 左へ移動 break; case VK_RIGHT: GmMoveHouSub(1); // 右へ移動 break; case VK_RETURN: if (posTamaHou.x == -1) { // 弾が表示中でなければ発射 posTamaHou.x = posHou.x; posTamaHou.y = posHou.y; GmMoveTamaHou(); GmMoveHouSub(0); } break; } }
// 砲台の弾移動処理 void GmMoveTamaHou(void) { if (posTamaHou.x == -1) { // 表示中ではない return; } PatBlt( hdcScreen, // 対象のHDC posTamaHou.x, // 表示位置 X座標 posTamaHou.y, // 表示位置 Y座標 32, // 表示サイズ 幅 24, // 表示サイズ 高さ WHITENESS ); // 白で塗りつぶす posTamaHou.y -= 24; // 上昇する if (posTamaHou.y <= 0) { // 上端を越えた時 posTamaHou.x = -1; // 表示終了 } else { BitBlt( hdcScreen, // 転送先HDC posTamaHou.x, // 表示位置 X座標 posTamaHou.y, // 表示位置 Y座標 32, // 表示サイズ 幅 24, // 表示サイズ 高さ hdcBmp, // 転送元HDC 96, // 転送元 X座標 24, // 転送先 Y座標 SRCCOPY ); // そのまま転送 } }
case WM_TIMER: GmMoveInv(); GmMoveTamaHou(); GmMoveHou(); InvalidateRect(hWnd, NULL, FALSE); break;
WORD wKey;
wKey = 0;
case WM_KEYDOWN: wKey = wParam; break; case WM_KEYUP: if (wKey == wParam) { // 最後に押されたキー wKey = 0; } break;
POINT posHou;
posHou.x = 0; posHou.y = 240 - 48; BitBlt( hdcScreen, // 転送先デバイスコンテキスト posHou.x, // 表示位置 X座標 posHou.y, // 表示位置 Y座標 32, // 表示サイズ 幅 24, // 表示サイズ 高さ hdcBmp, // 転送元デバイスコンテキスト 64, // 転送元 X座標 24, // 転送元 Y座標 SRCCOPY ); // そのまま転送
case WM_TIMER: GmMoveInv(); GmMoveHou(); InvalidateRect(hWnd, NULL, FALSE); break;
void GmMoveHou(void) { switch (wKey) { case VK_LEFT: GmMoveHouSub(-1); // 左へ移動 break; case VK_RIGHT: GmMoveHouSub(1); // 右へ移動 break; } }
void GmMoveHouSub(int d) { PatBlt( hdcScreen, // 対象のHDC posHou.x, // 表示位置 X座標 posHou.y, // 表示位置 Y座標 32, // 表示サイズ 幅 24, // 表示サイズ 高さ WHITENESS ); // 白で塗りつぶす posHou.x += d*32; if (posHou.x < 0) { // 左端を越えた posHou.x = 0; } else if (posHou.x > 320-32) { // 右端を越えた posHou.x = 320-32; } BitBlt( hdcScreen, // 転送先HDC posHou.x, // 表示位置 X座標 posHou.y, // 表示位置 Y座標 32, // 表示サイズ 幅 24, // 表示サイズ 高さ hdcBmp, // 転送元HDC 64, // 転送元 X座標 24, // 転送元 Y座標 SRCCOPY ); // そのまま転送 }