コンピュータがプレイする

人間とコンピュータが交互にプレイします。
またコンピュータが石を取り除くアニメーションを行います。

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

プロジェクトの作成

  1. Miyama.cpp の先頭に次のコードを追加して下さい。
    ID_TIMER はタイマのIDです。
    *App は Miyama Object Class の定義です。
    BmpFile は三つの山に表示する石のイメージファイルです。
    pt はマウスがクリックされた座標を格納する領域です。
        #define     ID_TIMER (WM_APP + 0)
    
        Miyama     *App= NULL;          // Miyama Object Class
        LPSTR       BmpFile= { "jewel.bmp" };
        POINT       pt;                 // CLICK の位置を記録
        
  2. CALLBACK WndProc( ) を表示して WM_CREATE: を追加して下さい。
    new Miyama(hWnd,BmpFile) で Miyama Class の Object を生成します。
            case WM_CREATE:
                App= new Miyama(hWnd,BmpFile);
                break;
        
  3. WM_LBUTTONDOWN: を追加して、マウスがクリックされたときのコードを記述します。
    pt にマウスがクリックされた座標を格納して ManPlay(&pt) で石を取り除きます。
    App->Play() でコンピュータがプレイします。
    App->down がコンピュータが取り除く石の数で、取り除く様子をタイマ割り込みでアニメーションします。
            case WM_LBUTTONDOWN:
                pt.x= LOWORD(lParam);
                pt.y= HIWORD(lParam);
                if (App->ManPlay(&pt)==0)
                {   MessageBox(hWnd,"エラーです","確認", MB_OKCANCEL | MB_OK);
                    return TRUE;
                }
                // コンピュータがプレイする
                App->Play();
                if (App->down<=0)  return TRUE;
                SetTimer(hWnd,ID_TIMER,500,NULL);
                return TRUE;    
        
  4. WM_TIMER: でタイマ割り込みが発生したときのソースコードを記述します。
    App->CntDown() で App->down をカウントダウンしながら一個ずつ取り除きます。
    App->down がゼロになる(戻り値が 1 になる)とアニメーションの終了です。
            case WM_TIMER:
                 if (App->CntDown())
                 {   KillTimer(hWnd,ID_TIMER);
                     break;
                 }
                 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. ビルド(コンパイル)に続いて実行を行います。
    山の石をクリックして人間がプレイします。
    プレイが終わると自動的にコンピュータが石を取り除き、その様子がアニメーションされます。
    人間とコンピュータが交互にプレイできたら完成です。

[Next Chapter ↓] 勝敗判定とゲームの繰り返し
[Previous Chapter ↑] 山の石をクリック操作で取り除く

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