http://www.geocities.co.jp/SiliconValle ... ero-5.html
こちらを参考にしてます。
BOOL COseroView::CanDropDown( int x, int y, int vect_x, int vect_y )
{
int put_stone;
if( m_FlagForWhite )put_stone = WHITE_STONE;//m_FlagForWhiteはbool変数
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 )//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 );
}
これは八方向にひっくり返せる石があるか調べるプログラムなんですが①1進める
8方向に1だけ進み
空白があればFALSE
同じ色の石があればFALSE
②さらに1進める
同方向に1だけ進み
空白があればFALSE(終了)
同じ色の石があればTRUE(続ける)
③これをマス目超えるまで繰り返す
④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 );
}
として使ってます。オセロのルールですね。画面外と石が置いてある場所には置けない
ひっくり返せないとこには置けないの2つ組み込んでます。
内容は書いてあるんでわかるのですが
プログラムがよくわかりません。
(a)上のプログラムではFALSEを返してますよね。でも②のときに空白があれば 例えば→方向(打ち手黒)とすると
○●[ ] 現在この状態ですよね。ここに置く事ができるからそこで終了ってなってるんだとは思いますが
置けない場合のFALSEとゴチャゴチャになってしまって結局何を返してるのかわからなくなってます・・
(b)下のプログラムがどうなってるのかがさっぱりです。TRUEとFALSEがどうなってるのかなど
(a),(b)について教えてください。