Esempio n. 1
0
void Sistema::despegar(const Drone & d)
{
  Posicion pos;
  bool seMueve = false;

  /*Siempre que se hace una consulta sobre parcelas vecinas es importante
  ver que esten en rango.*/
  if (enRangoCultivableLibre(d.posicionActual().x - 1, d.posicionActual().y)){
    pos.x = d.posicionActual().x - 1;
    pos.y = d.posicionActual().y;
    seMueve = true;
  }
  else if (enRangoCultivableLibre(d.posicionActual().x, d.posicionActual().y + 1)){
    pos.x = d.posicionActual().x;
    pos.y = d.posicionActual().y + 1;
    seMueve = true;
  }
  else if (enRangoCultivableLibre(d.posicionActual().x, d.posicionActual().y - 1)){
    pos.x = d.posicionActual().x;
    pos.y = d.posicionActual().y - 1;
    seMueve = true;
  }
  else if (enRangoCultivableLibre(d.posicionActual().x + 1, d.posicionActual().y)){
    pos.x = d.posicionActual().x + 1;
    pos.y = d.posicionActual().y;
    seMueve = true;
  }
  unsigned int i = 0;
  while (i < _enjambre.size()){
    if (seMueve && (_enjambre[i].id() == d.id())){
      _enjambre[i].moverA(pos);
    }
    i++;
  }
}
Esempio n. 2
0
void Sistema::volarYSensar(const Drone & d)
{
  unsigned int i = 0;
  int indiceDrone;

  /*Hay que buscar un dron equivalente al que nos dieron en el enjambre del
  sistema. Por invariante y requiere deberia siempre encontrarlo y ser unico.
  */
  while (i < enjambreDrones().size()){
    if (enjambreDrones()[i].id() == d.id()){
      /*Como queremos modificarlo tenemos que usar _enjambre, no enjambreDeDrones()
      porque enajambreDeDrones() devuelve un const.
      Asignamos por referencia para poder modificar el drone en cuestion*/
      indiceDrone = i;
    }
    i++;
  }

  Drone& drone = _enjambre[indiceDrone];
  int posX = drone.posicionActual().x;
  int posY = drone.posicionActual().y;
  bool seMovio = false;

  Posicion targetPos;
  if (drone.bateria() >0 && enRangoCultivableLibre(posX + 1, posY)){
    targetPos.x = posX + 1;
    targetPos.y = posY;
    drone.moverA(targetPos);
    drone.setBateria(drone.bateria() - 1);
    seMovio = true;
  }
  else if (drone.bateria() >0 && enRangoCultivableLibre(posX - 1, posY)){
    targetPos.x = posX - 1;
    targetPos.y = posY;
    drone.moverA(targetPos);
    drone.setBateria(drone.bateria() - 1);
    seMovio = true;
  }
  else if (drone.bateria() >0 && enRangoCultivableLibre(posX, posY + 1)){
    targetPos.x = posX;
    targetPos.y = posY + 1;
    drone.moverA(targetPos);
    drone.setBateria(drone.bateria() - 1);
    seMovio = true;
  }
  else if (drone.bateria() >0 && enRangoCultivableLibre(posX, posY - 1)){
    targetPos.x = posX;
    targetPos.y = posY - 1;
    drone.moverA(targetPos);
    drone.setBateria(d.bateria() - 1);
    seMovio = true;
  }

  /*Si la parcela esta noSensada se le puede poner cualquier verdura
  (eh, entienden? Cualquier verdura para cultivar!)*/
  if(seMovio == true){
    modificarCultivoYDrone(targetPos, drone);
  }

}
Esempio n. 3
0
bool Drone::operator==(const Drone & otroDrone) const
{
	if (id() != otroDrone.id()) return false;
	if (bateria() != otroDrone.bateria()) return false;
	if (enVuelo() != otroDrone.enVuelo()) return false;
  if (vueloRealizado() != otroDrone.vueloRealizado()) return false;
	if (!mismosProductos(productosDisponibles(), otroDrone.productosDisponibles())) return false;
	if (!(posicionActual() == otroDrone.posicionActual())) return false;
	return true;
}