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;
}