質問: C言語について、先ほど質問させていただいた者です。
回答: スマホから何で色々書き間違いあったらごめんなさい。 one_left()関数の判定式 i-1<=0 は i-1<0 になります。 (0は左端盤面ないなのでぎりOK) one_xxx()関数の中の i+1,i-1,j+1,j-1辺りが混ざってますね。 右:i+1、左:i-1、上:j-1、下:j+1で統一した方がいいでしょう (printfで表示したときの向きを考えるとわかりやすいです) main関数内の for(i==0;i<8;i++){ for(j==0;j<8;j++){ ここの==は=ですね。 if(i<8-1 && board[i+1][j]==2) one_right(i+1,j); if(i<1-1 && board[i-1][j]==2) one_left(i-1,j); if(i<8-1 && board[i][j+1]==2) one_up(i,j+1); if(i<1-1 && board[i][j-1]==2) one_down(i,j-1); これらのifの条件が間違っています。 ここの判定はごちゃごちゃしますので サブ関数の判定も含めてスッキリさせるのがいいでしょう。 例: void one_right(int i, int j){ //盤外だったら終わり if(i<0 || i>=8 || j<0 || j>=8) return; //相手コマだったら次のマスをみる if(board[i][j]==2){ one_right(i+1,j); } //空白マスなら3を設定して終わり if(board[i][j]==0){ board[i][j]=3; } //それ以外(自分のコマがある場合)は終わり return; } ... for(i=0;i<8;i++){ for(j=0;j<8;j++){ if(board[i][j]==1){ //サブ関数に丸投げ one_right(i+1,j); one_left(i-1,j); one_up(i,j-1); one_down(i,j+1); } } } こうすると計算が少なくなりますよ。 後は ・枠内判定は関数にすればさらにスッキリします ・one_xxwx(i,j)の4関数をone(i,j,dx,dy)のようにひとつにまとめる方法があります。 こうすると斜め方向も... この辺はいろいろ考えてみてください