Package src.estrategias

Source Code of src.estrategias.EstrategiaExplorador

package src.estrategias;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import src.Cliente;
import src.Enemigo;
import src.Explorador;
import src.Fortaleza;
import src.Mina;
import src.UnidadBasica;
import src.estadisticas.Estadisticas;
import src.estadisticas.NodoMapaEstadisticas;
import src.pathFinding.Astar;

import com.gameloftProgrammersCup.client.ClientCommand;
import com.gameloftProgrammersCup.client.Vision;
import com.gameloftProgrammersCup.clientInterfaces.MapElement;
import com.gameloftProgrammersCup.clientInterfaces.Point;

public class EstrategiaExplorador extends EstrategiaUnidad{

  @Override
  public ClientCommand accionDeTurno(UnidadBasica unidad) {
   
    ClientCommand nuevoComando=new ClientCommand();
    nuevoComando.setId(unidad.getJugador().getFortaleza().getIdComando());
    nuevoComando.setIdUnit(unidad.getId());
   
   
   
    int centroX=unidad.getPosition().getX();
    int centroY=unidad.getPosition().getY();
    int rango=unidad.getVision();
    int limiteIzquierdo=(centroX-rango)>=0 ? centroX-rango : 0;
    int limiteDerecho=(centroX+rango)<unidad.getJugador().getFortaleza().anchoMapa ? centroX+rango : unidad.getJugador().getFortaleza().anchoMapa-1;
    int limiteSuperior=(centroY-rango)>=0 ? centroY-rango : 0;
    int limiteInferior=(centroY+rango)<unidad.getJugador().getFortaleza().altoMapa ? centroY+rango : unidad.getJugador().getFortaleza().altoMapa-1;
    //primero marco todo en el rango de vision como descubierto
    boolean noSirve=true;
    for (int i = limiteIzquierdo; i<=limiteDerecho;i++  ){
      for (int j=limiteSuperior;j<=limiteInferior;j++){
        if (unidad.getPosition().distance(new Point(i,j))<=rango){
          if(!unidad.getJugador().getFortaleza().isPointAfuera(new Point(i,j))){
            MapElement meCandidato= unidad.getJugador().getFortaleza().mapa[i][j];
            if(meCandidato!= null && meCandidato.getClass().getName().equals("src.Enemigo") && ((Enemigo)meCandidato).getUltimoTurnoVisto()==unidad.getJugador().turno){
              if (((Enemigo)meCandidato).getType()==Vision.TYPE_ENEMY_COLLECTOR && ((Explorador)unidad).turnosSiguiendoColector<=Explorador.MAXIMO_TURNOS_SIGUIENDO_EXPLORADOR){
                noSirve=false;
                Point destino=new Point(i,j);
                if (unidad.destino==null || !destino.equals(unidad.destino)){
                  ((Explorador)unidad).turnosSiguiendoColector++; 
               
                }
                else{
                  Iterator itRecursos=unidad.getJugador().getFortaleza().resources.iterator();
                  noSirve=true;
                  while (itRecursos.hasNext()){
                    Mina mina=(Mina)itRecursos.next();
                    if (mina.getPosition().distance(destino)<=1){
                      noSirve=false;
                      break;
                    }
                  }
                }
                if (noSirve)
                  continue;
                unidad.setPeligrosidad(false);
                unidad.setDescubir(true);
                unidad.setARangoDeAccion(false);
                unidad.setWayPoints(Astar.intentoDePathFinding(destino, unidad, unidad.getJugador().getFortaleza()));
                unidad.destino=destino;
               
                nuevoComando.setType("move");
                nuevoComando.setDestination((Point)unidad.getWayPoints().get(0));
              }
            }
          }

        }
      }
    }
   

   
   
   
   
   
    if (noSirve && (unidad.getWayPoints()==null || unidad.getWayPoints().size()==0 ||((Point)unidad.getWayPoints().get(0)).distance(unidad.getPosition())<unidad.getMovementSpeed() || !Astar.verificarCamino(unidad))){
     
      ((Explorador)unidad).turnosSiguiendoColector=0;
      //genero lista de puntos no descubiertos, prioriza el lado enemigo si no conozco la fortaleza.
      NodoMapaEstadisticas[][] mapaDescubierto = unidad.getJugador().getFortaleza().estadisticas.mapaEstadistico;
      List nodosNoDescubiertos=new ArrayList();

      limiteIzquierdo=unidad.getJugador().getFortaleza().getId()==1 ? unidad.getJugador().getFortaleza().anchoMapa/2 : 0;
      limiteDerecho=unidad.getJugador().getFortaleza().getId()==1 ? unidad.getJugador().getFortaleza().anchoMapa : unidad.getJugador().getFortaleza().anchoMapa/2;
      limiteSuperior=0;
      limiteInferior=unidad.getJugador().getFortaleza().altoMapa;
     
      for (int i = limiteIzquierdo; i<limiteDerecho;i++  ){
        for (int j=limiteSuperior;j<limiteInferior;j++){
          if (!Fortaleza.isPointAfuera(new Point(i,j)) && !mapaDescubierto[i][j].isDescubierto())
            nodosNoDescubiertos.add(new Point(i,j));
        }
      }
      /*Point destino=unidad.getJugador().getFortaleza().getPosition();
      if (nodosNoDescubiertos.size()>0){
        int rnd;
        rnd = (int)(Math.random()*(nodosNoDescubiertos.size()-1));
        destino=(Point) nodosNoDescubiertos.get(rnd);
        System.out.println("Puntos no descubiertos : "+nodosNoDescubiertos.size());
      }// no va con random se pierde mucho*/
      int distancia=0;
      Point destino=null;
      Iterator it=nodosNoDescubiertos.iterator();
      while (it.hasNext()){
        Point punto=(Point)it.next();
     
        if ((distancia==0 || (unidad.getPosition().distance(punto)<=distancia))){             
          //(distancia==0 || (ub.getPosition().distance(new Point(i,j))+ub.getJugador().getFortaleza().getPosition().distance(new Point(i,j))<=distancia))){
          if (unidad.getPosition().distance(punto)==distancia){
            if (unidad.getJugador().getFortaleza().getPosition().distance(punto)<destino.distance(unidad.getJugador().getFortaleza().getPosition())){
              destino=punto;
              distancia=destino.distance(unidad.getPosition());
            }
          }
          else
          {
            destino=punto;
            distancia=destino.distance(unidad.getPosition());
          }
        }
      }
     
        unidad.setPeligrosidad(false);
        unidad.setDescubir(true);
        unidad.setARangoDeAccion(false);
        unidad.setWayPoints(Astar.intentoDePathFinding(destino, unidad, unidad.getJugador().getFortaleza()));
        unidad.destino=destino;
      }
   
    nuevoComando.setType("move");
    nuevoComando.setDestination((Point)unidad.getWayPoints().get(0));

    nuevoComando.setUnitType(unidad.getType());
    unidad.setCommand(nuevoComando);
    return nuevoComando;
  }

}
TOP

Related Classes of src.estrategias.EstrategiaExplorador

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.