一枚のカードを表示する

格子状に並んだカードイメージを切り出して描画する CARD Object Class を作成します。
BSprite Class を継承した CARD Object Class で、イメージ画像から一枚のカードを切り出して表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの説明

  1. カードを切り出して表示するプログラムは BSprite Object Class を使うと簡単に作成できます。
    今回のプログラムでは、わざわざ CARD Class に継承しなくても BSprite Class をそのまま使う方が普通なのですが、 Object Class を継承する場合のサンプルとして参照して下さい。
  2. プロジェクトを作成して、次のファイルを格納して下さい。
    ファイル 説明
    Main.cpp メインプログラムです
    BSprite.h BSprite Class のヘッダファイルです
    BSprite.cpp BSprite Class のプログラムファイルです
    Card.h CARD Class のヘッダファイルです
    Card.cpp CARD Class のプログラムファイルです

Object Class の説明

  1. Card Object Class では BSprite Object Class を継承します。
    BSprite Class の説明は Bsprite で BMP 画像を表示する, Basic Sprite Object Class が完成 を参照して下さい。
  2. BSprite Object Class を継承して CARD Object Class を作成します。
    CARD Object Class のヘッダファイル(Card.h) です。
    このプログラムは BSprite Class を使うと簡単に作成出来るので、CARD Object Class は継承の指定だけです。
    「class CARD : public BSprite」で BSprite を継承することを宣言します。
        /*★ CARD Object Header File  2006-12-01  前田 稔 ★*/
        //   BSprite Object Class を継承する
        #include "BSprite.h"
    
        class CARD : public BSprite
        { protected:
    
          public:
            CARD(HWND hWnd);                //Constructor
            ~CARD();                        //Destructor
    
        };
        
  3. CARD Object Class のプログラムファイル(Card.cpp) です。
    CARD Class のコンストラクタから BSprite Class のコンストラクタを呼び出します。
    実質的に CARD Class では「何も行う必要が無い」ので、形式的にデストラクタを記述するだけです。
        /*★ CARD Object Class  2006-12-01  前田 稔 ★*/
        #include    <windows.h>
        #include    "Card.h"
    
        // CARD Object Class 関数
        // コンストラクタ(オブジェクトの初期化)
        CARD::CARD(HWND hwnd) : BSprite(hwnd)
        {
        }
    
        // デストラクタ(オブジェクトの終了)
        CARD::~CARD()
        {
        }
        

メインプログラムの説明

  1. Main.cpp の説明です。
    Card.h を include します。
    *Card が CARD Object Class の定義です。
    File[] が切り分ける画像ファイルの名前です。
        /********************************************************/
        /*★ CARD Object Class Load()     2006-12-01  前田 稔 ★*/
        /********************************************************/
        #define     NAME    "CARD Object Class"
        #include    <windows.h>
        #include    "Card.h"
        #define     SAFE_DELETE(p)  { if (p) { delete (p);     (p)=NULL; } }
    
        CARD        *Card= NULL;
        char        File[MAX_PATH]= "花札.bmp";
        
  2. WinMain() では何時ものようにウインドウを生成して表示します。
  3. WM_CREATE: で CARD Class をインスタンス化して、画像を入力します。
    10,5 は格子状に並べたカードの枚数です。
        switch(msg)
        {   case WM_CREATE:
                Card= new CARD(hWnd);
                if (Card->Load(File,10,5)==FALSE)
                {   PostMessage(hWnd,WM_CLOSE,0,0);
                    break;
                }
                break;
        
  4. WM_PAINT: では Card->Show() でカードを指定して描画するだけです。
    一番目の引数がカードの番号で、二番目と三番目が描画する座標です。
            case WM_PAINT:
                hdc= BeginPaint(hWnd,&ps);
                Card->Show(30,200,100);
                EndPaint(hWnd, &ps);
                break;
        
  5. WM_CLOSE: で CARD Object を開放して下さい。
            case WM_CLOSE:
                SAFE_DELETE(Card);
                DestroyWindow(hWnd);
                break;
             case WM_DESTROY:
                PostQuitMessage(0);
                return 0L;
        

【演習】

  1. プログラムを完成させて下さい。
  2. 他のカードも描画して見てください。

超初心者のプログラム入門(Win32API C++)