Package src.estrategias

Source Code of src.estrategias.EstrategiaAsesinoColector

package src.estrategias;

import java.util.Iterator;
import java.util.Set;

import src.Atacante;
import src.Enemigo;
import src.Fortaleza;
import src.Mina;
import src.UnidadBasica;
import src.pathFinding.Astar;

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

public class EstrategiaAsesinoColector extends EstrategiaUnidad{
 
  /**
   * pseudo-casteo, llamo a la otra que usa un Atacante
   */
  public ClientCommand accionDeTurno(UnidadBasica ub)  {
    return accionDeTurno((Atacante )ub);
  }
 
 
 
  public ClientCommand accionDeTurno(Atacante asesino){

   
    if (asesino.enemigoEnRango()!=null){
      //ATTACK!
      Enemigo enemigo = asesino.enemigoEnRango();
      if (enemigo.getPosition().distance(asesino.getPosition())>asesino.getActionRange()){//tengo que acercarme
        Point destino=enemigo.getPosition();
        ClientCommand nuevoComando=new ClientCommand()
        nuevoComando.setId(asesino.getJugador().getIdComando());
        nuevoComando.setIdUnit(asesino.getId());
        asesino.setPeligrosidad(false);
        asesino.setDescubir(false);
        asesino.setARangoDeAccion(true);
        asesino.setWayPoints(Astar.intentoDePathFinding(destino, asesino, asesino.getJugador().getFortaleza()));
        asesino.destino=destino;
        nuevoComando.setType("move");
        nuevoComando.setDestination((Point)asesino.getWayPoints().get(0));
        asesino.destino=(Point)asesino.getWayPoints().get(0);
        nuevoComando.setUnitType(asesino.getType());
        asesino.setCommand(nuevoComando);
        return nuevoComando;
      }//sino ataco
      ClientCommand cAtaque =asesino.atacar(enemigo.getPosition());
      asesino.setCommand(cAtaque);
      return cAtaque;
    }
    else
    {//move
      Point destino=null;
      ClientCommand nuevoComando=new ClientCommand()
      nuevoComando.setId(asesino.getJugador().getIdComando());
      nuevoComando.setIdUnit(asesino.getId());
     
      if (asesino.destino==null || asesino.getWayPoints()==null || asesino.getWayPoints().size()==0 || !Astar.verificarCamino(asesino)){
 
       
        //if (asesino.resourcesStored()<asesino.getMaxLoad()){//recolecto
          //calculo mina
          Set recursos=asesino.getJugador().getFortaleza().getKnownResources();
          Iterator it2= recursos.iterator();
          int distancia=99999;
          Mina minaCercana=new Mina();
          while (it2.hasNext()){
            Mina recurso=(Mina)it2.next();
            if (!recurso.isMaxedOut()
                && asesino.getJugador().getFortaleza().fortalezaEnemiga!=null
                && recurso.getPosition().distance(asesino.getJugador().getFortaleza().fortalezaEnemiga.getPosition())<distancia){
             
              int centroX=recurso.getPosition().getX();
              int centroY=recurso.getPosition().getY();
              int rango=1;
              int limiteIzquierdo=(centroX-rango)>=0 ? centroX-rango : 0;
              int limiteDerecho=(centroX+rango)<asesino.getJugador().getFortaleza().anchoMapa ? centroX+rango : asesino.getJugador().getFortaleza().anchoMapa-1;
              int limiteSuperior=(centroY-rango)>=0 ? centroY-rango : 0;
              int limiteInferior=(centroY+rango)<asesino.getJugador().getFortaleza().altoMapa ? centroY+rango : asesino.getJugador().getFortaleza().altoMapa-1;
              for (int i = limiteIzquierdo; i<=limiteDerecho;i++  ){
                for (int j=limiteSuperior;j<=limiteInferior;j++){
                   if (!Fortaleza.isPointAfuera(new Point(i,j)) && asesino.getJugador().getFortaleza().mapa[i][j]!=null
                       && asesino.getJugador().getFortaleza().mapa[i][j].getClass().getName().equals("src.Enemigo")//la unica forma de comparacion con el el getClass src.Enemigo
                       && asesino.getJugador().getFortaleza().mapa[i][j].getType()==Vision.TYPE_ENEMY_COLLECTOR //siendo enemigo si me sirve el tipo
                       && (((Enemigo)(asesino.getJugador().getFortaleza().mapa[i][j])).getUltimoTurnoVisto())>asesino.getJugador().turno-20){
                       destino = new Point (i,j);
                       minaCercana.setPosition(recurso.getPosition());
                      distancia=minaCercana.getPosition().distance(asesino.getJugador().getFortaleza().fortalezaEnemiga.getPosition());
                   }
                }
              }
            }
          }
         
         
          if (minaCercana.getPosition()!=null){
 
            asesino.setPeligrosidad(false);
            asesino.setDescubir(false);
            asesino.setARangoDeAccion(false);
            for (int i=Fortaleza.fortalezaEnemiga.getPosition().getX()-EstrategiaExploradorAcecharColector.perimetro;i<=Fortaleza.fortalezaEnemiga.getPosition().getX()+EstrategiaExploradorAcecharColector.perimetro;i++){
              for (int j=Fortaleza.fortalezaEnemiga.getPosition().getY()-EstrategiaExploradorAcecharColector.perimetro;j<=Fortaleza.fortalezaEnemiga.getPosition().getY()+EstrategiaExploradorAcecharColector.perimetro;j++){
                if (!Fortaleza.isPointAfuera(new Point(i,j))){
                  Mina obstaculo=new Mina();
                  obstaculo.setPosition(new Point(i,j));
                  asesino.obstaculos.add(obstaculo);
                }
              }
            }
         
            asesino.setWayPoints(Astar.intentoDePathFinding(destino, asesino, asesino.getJugador().getFortaleza()));
 
            asesino.destino=destino;
 
          }
          else
            return null;
      }
             
      nuevoComando.setType("move");
      nuevoComando.setDestination((Point)asesino.getWayPoints().get(0));
  //    destino=asesino.destino;
      nuevoComando.setUnitType(asesino.getType());
  /*    if (destino==null)
        return null;*/
      asesino.setCommand(nuevoComando);
      return nuevoComando;
    }
  }
}
TOP

Related Classes of src.estrategias.EstrategiaAsesinoColector

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.