check_put は再帰関数使うと楽かも

int check_dir(int my, int en, int x, int y, int dx, int dy, int doflip, int depth)
{
 x += dx;
 y += dy;
 if (board[x][y] == en) {
  int ret = check_dir(my, en, x, y, dx, dy, doflip, depth+1);
  if (doflip && ret) board[x][y] = my;
  return ret;
 } else if (board[x][y] == my && depth > 0) {
  return 1;
 } else {
  return 0;
 }
}

int check_put(int my, int en, int x, int y, int doflip) {
 static int eightdir[8][2] = { // 8方向を表す配列
  {-1, 0}, {-1, -1}, {0, -1}, {+1, -1},
  {+1, 0}, {+1, +1}, {0, +1}, {-1, +1}
 };
 int ret = 0;
 if (board[x][y] == 0) {
  int n;
  for (n = 0; n < 8; n++) {
   ret |= check_dir(my, en, x, y, eightdir[n][0], eightdir[n][1], doflip, 0);
  }
 }
 return !ret; // 0: 置ける / 1: 置けない
}