Main Program の説明

「じゃんけんバトルゲーム」の Main Program の説明です。

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

プロプログラムの説明

  1. #include と #pragma と #define と Global Area の宣言です。
    Jyan Object Class を使うので "Jyan.h" をインクルードして "jyan.lib" を組み込みます。
    (または jyan.cpp をプロジェクトに加えて下さい。)
    *App は JYAN Object Class の定義です。
    W_play, R_play は紅白の手を格納する領域で、W_cnt, R_cnt は勝敗を格納する領域です。
    TBL[3][3] は勝敗の得点テーブルです。
                :
        #include    "Jyan.h"
        #pragma     comment(lib,"jyan.lib")
                :
        HINSTANCE   g_hInst;
        JYAN        *App= NULL;         // Jyanken Object Class
        int         SPEED= 50;          // Timer Speed
        int         GAME= 1000;         // Game Count
        int         W_play;             // white のプレイ
        int         R_play;             // red のプレイ
        int         W_cnt=0;            // white の勝数
        int         R_cnt=0;            // red の勝数
        int         Count=0;            // ゲーム回数
        char        work[80];
        int         TBL[3][3] =     // 得点テーブル
        {  { 3, -5, 5 }, { 1, 0, 2 }, { 0, 0, 15 }  };
        char        *w_str, *r_str;
        
  2. CALLBACK WndProc() です。
    WM_CREATE: でアプリケーソンの初期化を行う Init() 関数を呼び出します。
        switch(msg)
        {   case WM_CREATE:
                Init(hWnd);
                break;
        
  3. ウインドウの Button をクリックすると WM_COMMAND: がポストされます。
    IDM_START: ではタイマ割り込みの間隔とゲーム数を取得してゲームを開始します。
    IDM_STOP: でタイマを停止します。
    IDM_END: でプログラムを終了します。
            case WM_COMMAND:
                switch(LOWORD(wParam))
                {   case IDM_START:
                        GetWindowText(g_hEdit1,work,20);
                        SPEED= atoi(work);
                        GetWindowText(g_hEdit2,work,20);
                        GAME= atoi(work);
                        Count= 0;
                        R_cnt= 0;
                        W_cnt= 0;
                        SetTimer(hWnd,ID_TIMER,SPEED,NULL);
                        break;
                    case IDM_STOP:
                        KillTimer(hWnd,ID_TIMER);
                        break;
                    case IDM_END:
                        SendMessage(hWnd,WM_CLOSE,0,0L);
                        break;
                }
                break;
        
  4. WM_TIMER: の処理です。
    W_think() と R_think() で紅白の手を取得して「じゃんけん」を行います。
    syohai() 関数で勝敗の判定を行い得点を計算します。
    W_info() と R_info() で W_proc.cpp と R_proc.cpp に情報を伝えます。
            case WM_TIMER:
                if (Count>=GAME)
                {   KillTimer(hWnd, ID_TIMER);
                    break;
                }
                Count++;
                W_play= W_think();          //白のプレイ
                if (W_play<0 || W_play>2)
                {   KillTimer(hWnd, ID_TIMER);
                    MessageBox(NULL,"白が 0,1,2 以外を返しました","Jyanken Error",MB_OK);
                    break;
                }
                R_play= R_think();          //紅の手を取得
                if (R_play<0 || R_play>2)
                {   KillTimer(hWnd, ID_TIMER);
                    MessageBox(NULL,"紅が 0,1,2 以外を返しました","Jyanken Error",MB_OK);
                    break;
                }
                syohai();
                W_info(W_play,R_play);      //W_proc に情報を伝える
                R_info(R_play,W_play);      //R_proc に情報を伝える
                InvalidateRect(hWnd,NULL,TRUE);
                UpdateWindow(hWnd);
                break;
        
  5. WM_PAINT: では View() 関数で描画します。
            case WM_PAINT:
                hdc= BeginPaint(hWnd, &ps);
                View(hdc);
                EndPaint(hWnd, &ps);
                break;
        
  6. 勝敗を判定して得点を計算する syohai() 関数です。
    ans には「0:あいこ, 1:負け, 2:勝ち」がリターンされます。
        void  syohai()
        {   int     ans;
            ans= App->check(W_play,R_play);
            W_cnt+= TBL[W_play][ans];
            ans= App->check(R_play,W_play);
            R_cnt+= TBL[R_play][ans];
        }
        

DLL を組み込む

「じゃんけんバトルゲーム」に DLL を組み込む方法は簡単で、普通の関数を使う場合と同じです。
  1. プロジェクトのフォルダーに次のファイルを格納して下さい。
    W_proc と R_proc のファイルはダウンロードした中に格納されています。
    ファイル 説明
    Jyan.h Jyan Object Class のヘッダ
    jyan.lib Jyan Object Class の Library(または jyan.cpp)
    W_proc.h 白組の思考関数の Header
    W_proc.dll 白組の思考関数の DLL
    W_proc.lib 白組の思考関数の Library
    R_proc.h 紅組の思考関数の Header
    R_proc.dll 紅組の思考関数の DLL
    R_proc.lib 紅組の思考関数の Library
  2. Jyan Object Class と白組と紅組のヘッダーファイルを組み込みます。
    Jyan Object Class と白組と紅組の Library をリンクします。
    .dll はコンパイルするときには必要ありません。
        #include    "Jyan.h"
        #include    "R_proc.h"
        #include    "W_proc.h"
    
        #pragma     comment(lib,"jyan.lib")
        #pragma     comment(lib,"R_proc.lib")
        #pragma     comment(lib,"W_proc.lib")
        
  3. DLL で定義された関数の宣言です。
        // プロトタイプ宣言
        char     *W_init();
        char     *R_init();
        int      W_think();
        int      R_think();
        void     W_info(int play1, int play2);
        void     R_info(int play1, int play2);
        
  4. 初期化関数の呼び出しです。
        // アプリケーションの初期化
        void  Init(HWND hwnd)
        {   App= new JYAN(hwnd);
                :
            w_str= W_init();        //W_proc の初期化
            r_str= R_init();        //R_proc の初期化
        }
        
  5. 紅白の Play と情報を伝える関数の呼び出しです。
        case WM_TIMER:
            if (Count>=GAME)
            {   KillTimer(hWnd, ID_TIMER);
                break;
            }
            Count++;
            W_play= W_think();      //白のプレイ
            R_play= R_think();      //紅のプレイ
            syohai();
            W_info(W_play,R_play);  //W_proc に情報を伝える
            R_info(R_play,W_play);  //R_proc に情報を伝える
            InvalidateRect(hWnd,NULL,TRUE);
            UpdateWindow(hWnd);
            break;
        

[Next Chapter ↓] JYAN Object Class の説明
[Previous Chapter ↑] 「じゃんけんバトルゲーム」を実行する

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