マウスのクリックで石を取り除く

説明の画像

30個の石を並べた画像を表示して、マウスのクリックで取り除きます。

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

プロジェクトの設定

  1. テンプレートまたは、空のプロジェクトを作成して下さい。
    作成されたフォルダーに石の画像ファイル(Jewel.bmp)を格納して下さい。
    グローバル変数として、山に積まれた石の数を記憶する領域とマウスがクリックされた座標を格納する領域を定義します。
        // グローバル変数:
                :
        int         Count= 30;                  // 山に積まれた石の数 	
        POINT       pt;                         // クリックされた座標
        
  2. WndProc() にマウスがクリックされたときの処理を追加します。
    POINT 構造体にマウスの座標を格納して、座標から石の数を計算します。
    今回は石を取り除くだけで無く、クリックする座標によっては石が追加されます。
    Count に個数を設定して InvalidateRect() で描画します。
        switch( message ) 
        {   case WM_LBUTTONDOWN:
                pt.x= LOWORD(lParam);
                pt.y= HIWORD(lParam);
                Count= マウスの座標から石の数を計算して下さい
                InvalidateRect(hWnd,NULL,TRUE);
                UpdateWindow(hWnd);
                break;
        
  3. WM_PAINT に石の画像を並べて表示するコードを追加します。
    ここでは Stone() 関数を呼ぶだけです。
        case WM_PAINT:
            hdc = BeginPaint (hWnd, &ps);
            // TODO: この位置に描画用のコードを追加してください...
            Stone(hdc,"jewel.bmp",Count);
            EndPaint( hWnd, &ps );
            break;
        
  4. n 個の石の画像を一行に十個ずつ並べて表示する関数です。
    File にファイル名が設定されていないときは直ちに終了します。
    xp と yp に座標を設定して BitBlt() で描画します。
    画像の表示は BMP ファイルを表示する を参照して下さい。
        HRESULT Stone(HDC hdc, char File[], int n)
        {   HBITMAP         hbm;
            HDC             hmdc;
            BITMAP          bm;
            int             i,xp,yp;
            char            str[80];
    
            if (File[0]=='\0')  return FALSE;
            // File[] から画像をロードして下さい
                    :
            for(i=0; i<n; i++)
            {   xp= i%10;
                yp= i/10;
                //座標(xp*幅,yp*高さ) に石を表示します
            }
            //取得したオブジェクトを開放します
            return TRUE;
        }
        
  5. [デバッグ][デバッグなしで開始]を選択してビルドに続いて実行を行います。

【演習】

  1. プログラムを完成させて下さい。
  2. 石をクリックすると、クリックした座標以降の石が取り除かれることを確認して下さい。
  3. XY座標から石の数を計算するので、クリックする座標によっては石が増えることもあります。

[Next Chapter ↓] 人間とコンピュータが交互に石を取り除く
[Previous Chapter ↑] 「石取りゲーム」の説明

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