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
void Sistema::modificarCultivoYDrone(Posicion pos, Drone &d){
  EstadoCultivo estado = estadoDelCultivo(pos);

  if (estado == NoSensado){
    _estado.parcelas[pos.x][pos.y] = RecienSembrado;
  }
  else if ((estado == RecienSembrado || estado == EnCrecimiento) &&
        tieneUnProducto(d.productosDisponibles(), Fertilizante)) {

    _estado.parcelas[pos.x][pos.y] = ListoParaCosechar;
    d.sacarProducto(Fertilizante);
    //Verificar si fertilizar gasta bateria.
    //Verificar si queda listo para cosechar cuando esta EnCrecimiento y RecienSembrado
  }
  else if (estado == ConPlaga){
    if (d.bateria() >=10 && tieneUnProducto(d.productosDisponibles(), Plaguicida)){
      _estado.parcelas[pos.x][pos.y] = RecienSembrado;
      d.sacarProducto(Plaguicida);
      d.setBateria(d.bateria() - 10);
    }
    else if (d.bateria() >=5 && tieneUnProducto(d.productosDisponibles(), PlaguicidaBajoConsumo)){
      _estado.parcelas[pos.x][pos.y] = RecienSembrado;
      d.sacarProducto(PlaguicidaBajoConsumo);
      d.setBateria(d.bateria() - 5);
    }
  }
  else if (estado == ConMaleza){
    if (d.bateria() >=5 && tieneUnProducto(d.productosDisponibles(), Herbicida)){
      _estado.parcelas[pos.x][pos.y] = RecienSembrado;
      d.sacarProducto(Herbicida);
      d.setBateria(d.bateria() - 5);
    }
    else if (d.bateria() >=5 && tieneUnProducto(d.productosDisponibles(), HerbicidaLargoAlcance)){
      _estado.parcelas[pos.x][pos.y] = RecienSembrado;
      d.sacarProducto(HerbicidaLargoAlcance);
      d.setBateria(d.bateria() - 5);
    }
  }
}
Esempio n. 3
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)));


}