ページ 11

オセロ

Posted: 2009年2月04日(水) 17:07
by ざこ
結構前にオセロに関してご質問させていただきました。疑問に思った事があるのでご質問させていただきます
BOOL COseroView::CanDropDown( int x, int y, int vect_x, int vect_y )
{
    int put_stone;

    if( m_FlagForWhite )put_stone = WHITE_STONE;
    else put_stone = BLACK_STONE;

    x += vect_x;
    y += vect_y;
    if( x < 0 || x >= MASU_NUM || y < 0 || y >= MASU_NUM )return( FALSE );
    if( m_Board[x][y] == put_stone )return( FALSE );
    if( m_Board[x][y] == BLANK )return( FALSE );

    x += vect_x;
    y += vect_y;
    while( x >= 0 && x < MASU_NUM  &&  y >= 0 && y < MASU_NUM  )
    {
        if( m_Board[x][y] == BLANK )return( FALSE );
        if( m_Board[x][y] == put_stone )return( TRUE );
        x += vect_x;
        y += vect_y;
    }
    return( FALSE );
}

BOOL COseroView::CanDropDown( int x, int y )
{
    if( x >= MASU_NUM || y >= MASU_NUM )return( FALSE );
    if( m_Board[x][y] != BLANK )return( FALSE );

    if( CanDropDown( x, y,  1,  0 ) )return( TRUE );    //右
    if( CanDropDown( x, y,  0,  1 ) )return( TRUE );    //下
    if( CanDropDown( x, y, -1,  0 ) )return( TRUE );    //左
    if( CanDropDown( x, y,  0, -1 ) )return( TRUE );    //上
    if( CanDropDown( x, y,  1,  1 ) )return( TRUE );    //右下
    if( CanDropDown( x, y, -1, -1 ) )return( TRUE );    //左上
    if( CanDropDown( x, y,  1, -1 ) )return( TRUE );    //右上
    if( CanDropDown( x, y, -1,  1 ) )return( TRUE );    //左下

        return( FALSE );
}
なんですが戻り値にはTRUEかFALSEか2通りありますよね。何故両方ともFALSEになるのかがわかりません。
以前バグさんにはTRUEのときだけ実行されると教えていただきましたが、TRUEのときだけ実行されるなら
返す値はTRUEでは?と思いました。実際TRUEにすると正常に動かないんですが戻り値に関してまだちゃんと
理解していないのでそこの所を教えてください。

Re:オセロ

Posted: 2009年2月04日(水) 17:32
by たいちう
2つの関数共に、TRUEを返すときもFALSEを返すときもありますよね。
そのように書かれています。

憶測ですが、2つ目の関数で、return TRUE が8箇所書かれているのを見落としていません?
違うならば、もっと詳しい説明をお願いします。

Re:オセロ

Posted: 2009年2月04日(水) 17:49
by ざこ
無茶苦茶見落としてました・・以前作ったときにそれで納得したんですがもう忘れちゃってるようです。
ありがとうございました。