Package src.estrategias

Source Code of src.estrategias.EstrategiaGeneral

package src.estrategias;
import java.util.*;

import com.gameloftProgrammersCup.client.ClientCommand;
import com.gameloftProgrammersCup.clientInterfaces.Command;
import com.gameloftProgrammersCup.clientInterfaces.Point;

import src.*;
import src.estadisticas.Estadisticas;

/*
* clase abstracta de la que van a heredar todas las estrategias a usar por la fortaleza
*/
abstract public class EstrategiaGeneral {
  /**
   * Actualiza las estrategias de cada unidad, verificando condiciones de fin, estad�sticas, etc.
   * @param listaUnidades: todas las unidades de mi equipo o un subgrupo
   * @author Fernando Rivas @version 1.0
   *
   */
 
  protected int ultimoTurnoDetecctionAtaqueMasivo = 0;
 
  protected boolean hayEnemigosEnRangoSeguridad = false;
  /**
   * en el create, nullea todas las estrategias de todas las unidades, despu�s decidir� cu�l asigna a cada una
   *
   */
  public  EstrategiaGeneral(List unidades){
    if (unidades == null) return;//caso inicial, nada que asignar
    Iterator it = unidades.iterator();
    while(it.hasNext())
    {
      UnidadBasica ub = (UnidadBasica)it.next();
      ub.setEstrategiaUnidad(null);
    }
  }
 
 
abstract public void actualizarEstrategias(List listaUnidades, src.estadisticas.Estadisticas estadisticas);

/**
* Decide qu� unidad fabricar a continuacion, lleva a cabo la accion y devuelve el comando
* @param f
* @return comando a llevar a cabo
* @author Fernando Rivas @version 1.0
*/
abstract public ClientCommand fabricarUnidad(Fortaleza f );
 
/**
* en ciertos casos, como cambio de estrategia general, creaci�n de unidad o especiales, se le tiene que setear
* una estrategia a la unidad analizando lo que tenga que analizar
* @param ub: unidad a setear estrategia nueva
*/
//me parece que no va mas, se hace todo en actualizarUnidad abstract public void setearEstrategiaUnidad(UnidadBasica ub);


/**
* funciones b�sicas de actualizaci�n que se llaman en cada ciclo para cada unidad
* la idea es que controle si es necesario un cambio de estrategia
*/
abstract public void actualizarUnidad(Asesino asesino);
abstract public void actualizarUnidad(Guardia guardia);
abstract public void actualizarUnidad(ColectorInicial colector);
abstract public void actualizarUnidad(ColectorNormal colector);
abstract public void actualizarUnidad(Explorador explorador);


/**
* @return the hayEnemigosEnRangoSeguridad
*/
public boolean isHayEnemigosEnRangoSeguridad() {
  return hayEnemigosEnRangoSeguridad;
}


/**
* @param hayEnemigosEnRangoSeguridad the hayEnemigosEnRangoSeguridad to set
*/
public void setHayEnemigosEnRangoSeguridad(boolean hayEnemigosEnRangoSeguridad) {
  this.hayEnemigosEnRangoSeguridad = hayEnemigosEnRangoSeguridad;
}

/**
*
* @return Enemigo: si hay, el que est� m�s cerca de la fortaleza. Sino, null
*/
public Enemigo chequearEnemigosEnRangoSeguridad(){
  Enemigo enemigo=null;
 
 
  for(int y=Fortaleza.instanciaFortaleza.getPosition().getY()-Fortaleza.instanciaFortaleza.getRadioSeguridad();y<=Fortaleza.instanciaFortaleza.getPosition().getY()+Fortaleza.instanciaFortaleza.getRadioSeguridad();y++)
  {
    for(int x= Fortaleza.instanciaFortaleza.getPosition().getX()-Fortaleza.instanciaFortaleza.getRadioSeguridad();x<=Fortaleza.instanciaFortaleza.getPosition().getX()+Fortaleza.instanciaFortaleza.getRadioSeguridad();x++)
    {
      Point pEvaluado = new Point(x,y);
      if(!Fortaleza.isPointAfuera(pEvaluado)&& pEvaluado.distance(Fortaleza.instanciaFortaleza.getPosition())<=Fortaleza.instanciaFortaleza.getRadioSeguridad())
      {
        if(Fortaleza.mapa[x][y]!=null && Fortaleza.mapa[x][y].getClass().equals(Enemigo.class) && ((Enemigo)Fortaleza.mapa[x][y]).getUltimoTurnoVisto()==Fortaleza.instanciaFortaleza.getJugador().turno)
          if(enemigo==null)
            enemigo=(Enemigo)Fortaleza.mapa[x][y];
          else if(((Enemigo)Fortaleza.mapa[x][y]).getPosition().distance(Fortaleza.instanciaFortaleza.getPosition()) < enemigo.getPosition().distance(Fortaleza.instanciaFortaleza.getPosition()))
            enemigo=(Enemigo)Fortaleza.mapa[x][y];

      }
    }
  }
  return enemigo;
}




/**
* devuelve una posici�n cualquiera dentro de rango seguridad. sirve para guardiaPatrullando
* @return
*/

static public Point getPosicionRandomEnRangoSeguridad(){
 
  int maxPuntosEvaluados = 5;
    Point pEvaluado=null;
    //Point pElegido=null;
    int porcentaje= 50;
    int GradoRandomizacion=(int)Math.round(Math.random()*(Fortaleza.instanciaFortaleza.getRadioSeguridad()));
   
    for(int y=Fortaleza.instanciaFortaleza.getPosition().getY()-Fortaleza.instanciaFortaleza.getRadioSeguridad();y<=Fortaleza.instanciaFortaleza.getPosition().getY()+Fortaleza.instanciaFortaleza.getRadioSeguridad();y++)
    {
      for(int x= Fortaleza.instanciaFortaleza.getPosition().getX()-Fortaleza.instanciaFortaleza.getRadioSeguridad();x<=Fortaleza.instanciaFortaleza.getPosition().getX()+Fortaleza.instanciaFortaleza.getRadioSeguridad();x++)
      {
         pEvaluado = new Point(x,y);
        if(!Fortaleza.isPointAfuera(pEvaluado)&& pEvaluado.distance(Fortaleza.instanciaFortaleza.getPosition())<=Fortaleza.instanciaFortaleza.getRadioSeguridad())
        {
          /*MapElement meEvaluado = Fortaleza.getElementoMapaEnPosicion(pEvaluado);
          if (meEvaluado != null && meEvaluado.getClass().getName().equals("src.Enemigo") && ((Enemigo)meEvaluado).getUltimoTurnoVisto()==Fortaleza.instanciaFortaleza.getJugador().turno )
         
            return (Enemigo)meEvaluado;*/
          /*for(int i=0;i<maxPuntosEvaluados;i++)
          {
            if(listaMaxPuntos[i]==null)
              {
              listaMaxPuntos[i] = pEvaluado;
              break;
              }
            else if (Estadisticas.mapaEstadistico[listaMaxPuntos[i].getX()][listaMaxPuntos[i].getY()].getPeligrosidad()< Estadisticas.mapaEstadistico[pEvaluado.getX()][pEvaluado.getY()].getPeligrosidad())
              {
              listaMaxPuntos[i] = pEvaluado;
              break;
              }
             
          }*/
          if(Math.random()*100 < porcentaje)
          {
            GradoRandomizacion--;
            porcentaje = porcentaje/2;
           
            if(GradoRandomizacion < 0)
              return pEvaluado;
          }
          /*if(Math.random()*100 < 100/((Fortaleza.instanciaFortaleza.getRadioSeguridad()*4)+(Fortaleza.instanciaFortaleza.getRadioSeguridad()+(Math.pow(2,2*(Fortaleza.instanciaFortaleza.getRadioSeguridad()-1) ) - 1))))
            return pEvaluado;*/
        }
      }
    }
   
  /* prefiero que randomice entre el top 5  for(int i=0;i<maxPuntosEvaluados;i++)
    {
      if (Fortaleza.getElementoMapaEnPosicion(listaMaxPuntos[i])== null ||
          ((Fortaleza.getElementoMapaEnPosicion(listaMaxPuntos[i]).getClass().equals(Enemigo.class)
          && ((Enemigo)Fortaleza.getElementoMapaEnPosicion(listaMaxPuntos[i])).getUltimoTurnoVisto() != Fortaleza.instanciaFortaleza.getJugador().turno))
        )
        return listaMaxPuntos[i];
    }*/
   
//bue, si no te gusta ninguna, agarr� cualquiera nom�s
  //  Estadisticas.logear("para rango"+Fortaleza.instanciaFortaleza.getRadioSeguridad()+"puntos :"+cantidadCiclos);
    return pEvaluado;
     
  }


public boolean hayAtaqueMasivoNOW(){
  /*if(Fortaleza.instanciaFortaleza.getJugador().turno > 200)//prueba
    return false;
  if(Fortaleza.instanciaFortaleza.getJugador().turno > 100)//prueba
    return true;*/

if (Fortaleza.instanciaFortaleza.fortalezaEnemiga== null)
  return false;//no se puede calcular
List enemigosFueraRango = new ArrayList();
List enemigosTurno = Fortaleza.instanciaFortaleza.enemigosAtacantesDelTurno();
Iterator it = enemigosTurno.iterator();

while(it.hasNext())
{
  Enemigo en = (Enemigo)it.next();
if  (en.getPosition().distance(Fortaleza.instanciaFortaleza.fortalezaEnemiga.getPosition()) > EstrategiaExploradorAcecharColector.perimetro)
  enemigosFueraRango.add(en);

}
System.out.println("enemigosFueraRango.size()"+enemigosFueraRango.size()+1+" < "+Fortaleza.instanciaFortaleza.getJugador().turno/ 60 );
if (enemigosFueraRango.size()<Fortaleza.instanciaFortaleza.getJugador().turno/ 50 && Fortaleza.instanciaFortaleza.getJugador().turno>=50)//todos en su casa
  return false;

int sumaDistanciasMenores = 0;//suma de distancia de c/u al que tenga mas cerca
it = enemigosFueraRango.iterator();
Enemigo [] enArray=new Enemigo[enemigosFueraRango.size()];
int i=0;
while(it.hasNext())
{
  Enemigo en = (Enemigo)it.next();
  enArray[i]= en;
    i++;
 
}

for(int j=0;j<enemigosFueraRango.size();j++)
{
  Point pActual = enArray[j].getPosition();
  int minDistancia =9999;
  for(int k=1;k<enemigosFueraRango.size();k++)
  {
    if(k==j)
      continue;
    if(pActual.distance(enArray[k].getPosition()) < minDistancia)
      minDistancia = pActual.distance(enArray[k].getPosition());
  }
  sumaDistanciasMenores += minDistancia;
}

if(enemigosFueraRango.size()==0)
  return false;

System.out.println("if"+sumaDistanciasMenores/enemigosFueraRango.size()+" < 10");
if(enemigosFueraRango.size()>0 && sumaDistanciasMenores/enemigosFueraRango.size() < 10)
  return true;

return false;
}

}
TOP

Related Classes of src.estrategias.EstrategiaGeneral

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.