Esempio n. 1
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;
}
Esempio n. 2
0
int Sistema::pasosIzquierdaPosibles(int y){
  Drone d;

  //Buscamos el drone
  int i = 0;
  while (i < enjambreDrones().size()){
    if (enjambreDrones()[i].posicionActual().y == y){
      d = enjambreDrones()[i];
    }
    i++;
  }

  /*La cantidad de pasos posibles pueden depender de la cantidad de
  fertilizante, de bateria, a que distancia se encuentra del limite
  del campo o de una casa o granero. Evaluamos cada caso por separado
  y luego los comparamos.*/

  int posX = d.posicionActual().x;

  //Empezamos a buscar en posX y nos movemos hacia la izquierda (restamos)
  i = posX;
  /*Los inicializamos en -1 para que en caso que no haya ni G ni C en la fila
  se pueda usar como limite*/
  int xGranero = -1;
  int xCasa = -1;
  while (i >= 0){
    Posicion pos;
    pos.x = i;
    pos.y = y;
    if(campo().contenido(pos) == Casa){
      xCasa = i;
    }
    if(campo().contenido(pos) == Granero){
      xGranero = i;
    }
    i--;
  }

  //Vemos cuanto fertilizante tenemos disponible
  int fertilizante = 0;
  i = 0;
  while(i < d.productosDisponibles().size()){
    if(d.productosDisponibles()[i] == Fertilizante){
      fertilizante++;
    }
    i++;
  }

  //Vemos cuantos pasos se pueden dar con la cantidad disponible de fertilizante
  i = posX;
  int pasosFert = 0;
  while(i > mayor(xCasa, xGranero)){
    Posicion pos;
    pos.x = i;
    pos.y = y;
    if((estadoDelCultivo(pos) != EnCrecimiento && estadoDelCultivo(pos) != RecienSembrado) &&
      fertilizante > 0){
      pasosFert++;
    }
    if((estadoDelCultivo(pos) == EnCrecimiento || estadoDelCultivo(pos) == RecienSembrado) &&
      fertilizante > 0){
      pasosFert++;
      fertilizante--;
    }
    i--;
  }

  return menor(pasosFert, menor(d.bateria(), menor(posX - xGranero, posX - xCasa)));


}
Esempio n. 3
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++;
  }
}