勝敗判定とゲームの繰り返し

ゲームの終了を判定して「勝ち・負け」の Message Box を表示します。

前田稔(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->Stone() で山の石を数えて、石が無ければ(最後の石を人間側が取った)コンピュータの勝ちです。
    MessageBox() で"私の勝ちです"を表示して、次のゲームを始めます。
    App->Play() でコンピュータがプレイします。
    App->down がコンピュータが取り除く石の数で、取り除く様子をタイマ割り込みでアニメーションします。
            case WM_LBUTTONDOWN:
                pt.x= LOWORD(lParam);
                pt.y= HIWORD(lParam);
                if (App->ManPlay(&pt)==0)
                {   MessageBox(hWnd,"エラーです","確認", MB_OK);
                    return TRUE;
                }
                if (App->Stone()==0)
                {   MessageBox(hWnd,"私の勝ちです","勝ち", MB_OK);
                    App->Start();
                    return TRUE;
                }
                // コンピュータがプレイする
                App->Play();
                if (App->down<=0)  return TRUE;
                SetTimer(hWnd,ID_TIMER,500,NULL);
                return TRUE;
        
  4. WM_TIMER: でタイマ割り込みが発生したときのソースコードを記述します。
    App->CntDown() でカウントダウンしながら一個ずつ取り除きます。
    戻り値がゼロになるとアニメーションの終了です。
    このとき App->Stone() で山の石を数えて、石が無ければ(最後の石を取らされた)コンピュータの負けです。
    MessageBox() で"私の負けです"を表示して、次のゲームを始めます。
            case WM_TIMER:
                if (App->CntDown())
                {   KillTimer(hWnd,ID_TIMER);
                    if (App->Stone()==0)
                    {   MessageBox(hWnd,"私の負けです","負け", MB_OK);
                        App->Start();
                    }
                }
                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 ↓] Dialog Box を表示する
[Previous Chapter ↑] コンピュータがプレイする

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