Dialog Box に対戦成績を表示する

Dialog Box に対戦成績を表示します。
また Dialog Box の「開始」ボタンと「説明」ボタンを設定します。

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

プロジェクトの作成

  1. Miyama.cpp の先頭に次のコードを追加して下さい。
    Rule[] は「説明」ボタンがクリックされたときに表示するメッセージです。
        #define     ID_TIMER (WM_APP + 0)
    
        Miyama     *App= NULL;          // Miyama Object Class
        LPSTR       BmpFile= { "jewel.bmp" };
        POINT       pt;                 // CLICK の位置を記録
        char        Rule[]=
        { "三個の山に石が積まれています。\n"
          "この石を私とあなたが交互に取り除きます。\n"
          "一度に一つの山からであれば、幾つでも取り除くことができます。\n"
          "最後の石を取らされた方が負けです。"
        };
        
  2. WM_LBUTTONDOWN: に勝ったゲーム数をカウントするコードを追加します。
            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->Win_c++;
                     App->Start();
                     return TRUE;
                 }
                 // コンピュータがプレイする
                 App->Play();
                 if (App->down<=0)  return TRUE;
                 SetTimer(hWnd,ID_TIMER,500,NULL);
                 return TRUE;
        
  3. WM_TIMER: に負けたゲーム数をカウントするコードを追加します。
            case WM_TIMER:
                 if (App->CntDown())
                 {   KillTimer(hWnd,ID_TIMER);
                     if (App->Stone()==0)
                     {   MessageBox(hWnd,"私の負けです","負け", MB_OK);
                         App->Lose_c++;
                         App->Start();
                     }
                 }
        
  4. WM_PAINT: に対戦成績と山の石を描画するコードを記述します。
        char    buf[16];
    
        case WM_PAINT:
            hdc = BeginPaint (hWnd, &ps);
            // TODO: この位置に描画用のコードを追加してください...
            wsprintf(buf,"%d",App->Win_c);
            SetDlgItemText(App->hDlg,IDC_WIN,buf);
            wsprintf(buf,"%d",App->Lose_c);
            SetDlgItemText(App->hDlg,IDC_LOSE,buf);
            App->Disp(hdc);
            EndPaint( hWnd, &ps );
            break;
        
  5. MyDlgProc() に「開始」ボタンと「説明」ボタンがクリックされたときのソースコードを記述します。
    「開始」ボタンをクリックするとゲームが最初から始まります。
    「説明」ボタンをクリックすると MessageBox でゲームのルールを表示します。
        //★ DialogBox の CALLBACK 関数
        LRESULT CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
        {
            switch(msg)
            {   case WM_COMMAND:
                    switch(LOWORD(wp))
                    {   case IDC_END:       //終了  
                            PostMessage(hDlg,WM_CLOSE,0,0L);
                            return TRUE;
                        case IDC_RULE:      //説明
                            MessageBox(NULL,Rule,"Miyama",MB_OK);
                            break;
                        case IDC_START:     //開始
                            App->Start();
                            break;
                    }
                    break;
        
  6. プロジェクトの設定は 勝敗判定とゲームの繰り返し を参照して下さい。
    Dialog Box の設定は Dialog Box を表示する を参照して下さい。
    「開始」ボタンで新しくゲームが開始されることを確認して下さい。
    「説明」ボタンでゲームのルールが表示されることを確認して下さい。
    ゲームを続けると対戦成績が表示されることを確認して下さい。

[Next Chapter ↓] 「棋譜」と「待った」をサポートする
[Previous Chapter ↑] Dialog Box を表示する

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