山の石をクリック操作で取り除く

三つの山に積まれた石を、マウスの左クリックで取り除きます。

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

プロジェクトの作成

  1. このプログラムは Miyama Object Class を使っています。
    プロジェクトのフォルダーに miyama.cpp または miyama.lib と miyama.h を格納して下さい。
  2. メインプログラムを表示して、プログラム先頭の適当な位置に次のコードを追加して下さい。
    *App は Miyama Object Class の定義です。
    BmpFile は三つの山に表示する石のイメージファイルです。
    pt はマウスがクリックされた座標を格納する領域です。
        Miyama     *App= NULL;          // Miyama Object Class
        LPSTR       BmpFile= { "jewel.bmp" };
        POINT       pt;                 // CLICK の位置を記録
        
  3. CALLBACK WndProc( ) を表示して WM_CREATE: を追加して下さい。
    new Miyama(hWnd,BmpFile) で Miyama Class の Object を生成します。
            case WM_CREATE:
                App= new Miyama(hWnd,BmpFile);
                break;
        
  4. WM_LBUTTONDOWN: を追加して、マウスがクリックされたときのコードを記述します。
    pt にマウスがクリックされた座標を格納します。
    ManPlay(&pt) で石を取り除きます。
    ゼロがリターンされたときはエラーです。MessageBox() を表示して確認します。
    pt に格納した座標の値は、石の範囲を正しくクリックすると山と石の番号に変換されます。
    エラーのときはクリックした座標がそのまま格納されています。
            case WM_LBUTTONDOWN:
                pt.x= LOWORD(lParam);
                pt.y= HIWORD(lParam);
                if (App->ManPlay(&pt)==0)
                {   MessageBox(hWnd,"エラーです","確認", MB_OKCANCEL | MB_OK);
                }
                return TRUE;
        
  5. WM_PAINT: に山の石を描画するコードを記述します。
    WM_DESTROY: に Miyama Object を開放するコードを記述します。
            case WM_PAINT:
                hdc = BeginPaint (hWnd, &ps);
                // TODO: この位置に描画用のコードを追加してください...
                App->Disp(hdc);
                EndPaint( hWnd, &ps );
                break;
            case WM_DESTROY:
                if (App) { delete(App);  App= NULL; }
                PostQuitMessage( 0 );
        
  6. ビルド(コンパイル)に続いて実行を行います。
    山の石をクリックして、クリックした石から後が取り除かれたら完成です。
    石が表示されていない所をクリックして MessageBox() が表示されることを確認して下さい。

【演習】

クリックした石が取り除けるようになれば「人間同士のプレイ」ができるようになります。
先手と後手を設定して勝敗の判定を行い、人間同士でプレイしてみて下さい。

[Next Chapter ↓] コンピュータがプレイする
[Previous Chapter ↑] 三つの山に石を表示

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