bool tryValidMove()

in misc/osquery_game/challenge.cpp [331:362]


bool tryValidMove(size_t src, size_t dst) {
  static bool kPigOrSheepMoved = false;

  bool srcOK = false;
  if (getX(dst) > 16 || getY(dst) > 16) {
    return false;
  }

  size_t i = 0, index = 0;
  for (const auto c : kCells) {
    if (c.p == invertPos(dst)) {
      return false;
      break;
    } else if (c.p == invertPos(src)) {
      if (c.i == PIG || c.i == SHEEP || c.i == TRACTOR || c.i == SUNFLOWER) {
        index = i;
        srcOK = true;
      }
    }
    i++;
  }

  if (srcOK) {
    if ((kCells[index].i == PIG || kCells[index].i == SHEEP) && !kPigOrSheepMoved) {
      kCells.push_back({BUCKET, kCells[index].p});
      kPigOrSheepMoved = true;
    }
    kCells[index].p = invertPos(dst);
  }

  return srcOK;
}