オセロ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ざこ

オセロ

#1

投稿記事 by ざこ » 16年前

結構前にオセロに関してご質問させていただきました。疑問に思った事があるのでご質問させていただきます
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:オセロ

#2

投稿記事 by たいちう » 16年前

2つの関数共に、TRUEを返すときもFALSEを返すときもありますよね。
そのように書かれています。

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

ざこ

Re:オセロ

#3

投稿記事 by ざこ » 16年前

無茶苦茶見落としてました・・以前作ったときにそれで納得したんですがもう忘れちゃってるようです。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る