put() 関数は今回のゲームで最も複雑な処理をする関数です。

では、改めて put() 関数のなかで処理すべき内容を箇条書きで挙げてみましょう。


 ・駒を置きたい位置を入力させる。

 ・入力された内容を評価し、画面外や既に駒の置かれている場所、

  置いても駒をひっくり返せない場所であれば、返値として『1』を返します。

 ・ひっくり返せる場合は、ひっくり返す処理を行い、『0』を返します。


ひっくり返す処理の為の関数として新たに turnItem() 関数を定義します。

turnItem() 関数は2つの引数 x 座標と y 座標を受け取り、

その座標に駒を置いたときに駒をひっくり返せた場合は 『0』 を、

ひっくり返せなかった場合は『1』を返します。


この関数が定義されているのを前提に put() 関数を書いてみましょう。


int put(){

int x, y;


// 駒を置くX座標の入力を受け付けます

printf( "駒を置くX座標(0~7) ... " );

scanf( "%d", &x );


// X座標が 0 未満の場合は画面外なので、 『1』 を返す

if( x < 0 ){

return 1;

}

// X座標が 8 以上の場合は画面外なので、 『1』 を返す

if( x >= 8 ){

return 1;

}


// 駒を置くY座標の入力を受け付けます

printf( "駒を置くY座標(0~7) ... " );

scanf( "%d", &y );


// Y座標が 0 未満の場合は画面外なので、 『1』 を返す

if( y < 0 ){

return 1;

}

// Y座標が 8 以上の場合は画面外なので、 『1』 を返す

if( y >= 8 ){

return 1;

}


// table 変数を見て置こうとしている場所が 0 でなければ、『1』を返す

if( table[x][y] != 0 ){

return 1;

}


// turnItem() 関数に入力された位置を渡して、相手の駒をひっくり返す処理を行います。

if( turnItem( x, y ) == 1 ){

// 1枚もひっくり返せなかった場合は、『1』を返す

return 1;

}

return 0;

}