オセロゲームの盤と駒を表示



オセロゲームの盤と駒を表示します。

Java Applet でもホームページから起動できるオセロゲームを作成しています。
前田稔(Maeda Minoru)の超初心者のプログラム入門から「Java Game Program/オセロゲーム」を参照して下さい。

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

プロジェクトの設定

  1. 新規プロジェクト Osero を作成して下さい。
    WSIZE は駒を置く升目のサイズで、KSIZE は駒を描画するときのサイズです。
    T[8][8] がオセロ盤の定義で「空:0,黒:1,白:-1」で駒を表現します。
    rcBox はウインドウのサイズが変わった時に対応しやすいように盤のサイズを定義しています。
    HPEN と HBRUSH は盤と駒を描画するためのペンとブラシの領域です。
        #define WSIZE 50                //枠のサイズ
        #define KSIZE (WSIZE*8/20)      //駒の直径
    
        char    T[8][8];                //OSEROの盤を定義
        RECT    rcBox= { 20, 20, WSIZE*8+20, WSIZE*8+20  }; //盤のサイズ
        HPEN    bPen,wPen,grPen;        //黒、白、灰色のペン
        HBRUSH  bBrush,wBrush,gBrush;   //黒、白、緑のブラシ
        
  2. WndProc() に WM_CREATE: を追加してアプリケーションを初期化します。
        switch( message ) 
        {
            case WM_CREATE:
                AppInit();
                break;
        
  3. WM_PAINT で盤と駒を表示します。
    ここでは Disp() 関数を呼ぶだけです。
        case WM_PAINT:
            hdc = BeginPaint (hWnd, &ps);
            // TODO: この位置に描画用のコードを追加してください...
            Disp(hdc);
            EndPaint( hWnd, &ps );
            break;
        
  4. WM_DESTROY: で生成したペンとブラシを開放して下さい。
        case WM_DESTROY:
            DeleteObject(grPen);
            DeleteObject(gBrush);
            PostQuitMessage( 0 );
            break;
        
  5. アプリケーションを初期化する関数です。
    先頭の画像を参考にして、描画に必要なペンとブラシを生成して下さい。
    黒と白のペンとブラシは StockObject から取得します。
    T[8][8] に初期状態の駒を配置します。
        void  AppInit()
        {
                :
            T[4][3]=T[3][4]= 1;
            T[3][3]=T[4][4]= -1;
        }
        
  6. オセロ盤と駒を描画する関数です。
    矩形と線を使って「・・・」を埋めて盤を描画して下さい。
    駒は Koma() 関数で描画しています。
        void  Disp(HDC hdc)
        {   int     i,j,y,x;
            //ペンとブラシの設定
            SelectObject(hdc,bPen);
            SelectObject(hdc,gBrush);
            //オセロ盤の色と外枠の線
            Rectangle(...);
            MoveToEx(hdc,rcBox.left,rcBox.top,NULL);
            LineTo(...);
                :
            //罫線の表示
            SelectObject(hdc,bPen);
            for(i=1; i<8; i++)
            {   :
                :
            }
            //駒の描画
            SelectObject(hdc,grPen);
            for(i=0,y=rcBox.top+WSIZE/2; i<8; i++,y+=WSIZE )
            {   for(j=0,x=rcBox.left+WSIZE/2; j<8; j++,x+=WSIZE)
                {   if (T[i][j]==1)  Koma(...);
                    if (T[i][j]==-1) Koma(...);
                }
            }
        }
        
  7. 駒を描画する関数です。
    画像を使う方法もあるのですが、今回は関数を使って描いています。
    このままでは「緑と白」の円だけですが、ページ先頭の画像を参考にして立体感を持たせて下さい。
        void  Koma(HDC hdc, int x, int y, HBRUSH hb1, HBRUSH hb2)
        {
            SelectObject(hdc,hb2);
            Ellipse(hdc,x-KSIZE,y-KSIZE-3,x+KSIZE,y+KSIZE-3);
        }
        
  8. [デバッグ][デバッグなしで開始]を選択してビルドに続いて実行を行います。
    オセロの盤と駒が表示されます。

【演習】

  1. オセロ盤と駒を描画する関数を完成させて下さい。
  2. オセロの駒をページ先頭の画像を参考にして立体感を持たせて下さい。

[Next Chapter ↓] クリックされた場所に駒を置く

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