//盤面の大きさ #define BOARDSIZE 8 //状態を定義 #define NONE 0 #define BLACK 1 #define WHITE 2 //盤面 char board[BOARDSIZE][BOARDSIZE]; //向きごとの移動量 vec_y[] = {-1,-1,0,1,1,1,0,-1}; vec_x[] = {0,1,1,1,0,-1,-1,-1}; //vecで指定された向きについてひっくり返るコマがあるか確認する int checkFlip(int y,int x,int turn,int vec) { int flag = 0; while(1){ y += vec_y[vec]; x += vec_x[vec]; //盤面の外に出ていたら終了 if( x < 0 || y < 0 || x > BOARDSIZE-1 || y > BOARDSIZE-1) return 0; //空きマスだったら終了 if(board[y][x] == NONE) return 0; //相手のコマがあったらフラグを立てる if(board[y][x] == (turn ? BLACK : WHITE)){ flag = 1; continue; } //もしフラグがたっていればループ脱出。いなければ終了 if(flag == 1) break; return 0; } return 1; } //その場所に置くことができるかを確認する関数 int check(int y,int x,int turn) { int vec; //どれか一方向でもひっくり返るか確認 for(vec = 0 ; vec < 8 ; ++vec){ if(checkFlip(y,x,turn,vec) == 1) return 1; } return 0; }