Package src

Source Code of src.Atacante

package src;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.gameloftProgrammersCup.client.UnitStats;
import com.gameloftProgrammersCup.clientInterfaces.MapElement;

import com.gameloftProgrammersCup.clientInterfaces.BasicPJ;
import com.gameloftProgrammersCup.clientInterfaces.Command;
import com.gameloftProgrammersCup.clientInterfaces.Point;

import src.estadisticas.NodoMapaEstadisticas;
import src.estrategias.*;
import src.*;
import com.gameloftProgrammersCup.client.ClientCommand;
import src.estadisticas.*;
import src.pathFinding.Astar;

public abstract class Atacante extends UnidadBasica {
 
 
  public EstrategiaUnidad estrategia;
  //public Point objetivo;//puede tomar diferentes significados, para el guardian es el destino
 
  public Atacante(int actionRange, int actionSpeed, int life,int movementSpeed, int id, Cliente jugador, int vision,EstrategiaUnidad estrategia) {
    super(actionRange, actionSpeed, life, movementSpeed, id, jugador, vision);
    this.estrategia=estrategia;
    // TODO Auto-generated constructor stub
  }

  public Command getCurrentCommand() {
    // TODO Auto-generated method stub
    return null;
  }

  public int getMaxLoad() {
    // TODO Auto-generated method stub
    return 0;
  }

  public void resourceXML(Document arg0, Element arg1) {
    // TODO Auto-generated method stub

  }

  public void setResources(int arg0) {
    // TODO Auto-generated method stub

  }

  public void unitXML(Document arg0, Element arg1) {
    // TODO Auto-generated method stub

  }

  public void visionXML(Document arg0, Element arg1) {
    // TODO Auto-generated method stub

  }

  public int resourcesStored() {
    // TODO Auto-generated method stub
    return 0;
  }

  public int getType(){
    return MapElement.TYPE_ATTACKER;
  }

 
  @Override
  public void actualizarStat(UnitStats stat, Fortaleza fortaleza) {
    super.actualizarStat(stat,fortaleza);
    fortaleza.addResources(stat.getResources());
    this.setLife(stat.getLife());
    this.setPosition(stat.getPosition());

    if (stat.getErrorCode()!=0)
      System.out.println(" Error "+ (new Integer(stat.getErrorCode())).toString());
   
    if (this.getCommand()!=null && this.getPosition().equals(this.getCommand().getDestination())){
      //por algun motivo no devuelve el destinationReached, calculo si llego
  //    System.out.println("Error code a sustituir:"+stat.getErrorCode());
      stat.setCommandErrorCode(Command.ERRORCODE_DESTINATIONREACHED);
      if (this.getWayPoints()!=null && this.getWayPoints().size()>0)
        this.getWayPoints().remove(0);
    }
   
    switch(stat.getErrorCode()){

    case 0://si colectaba busco la mina y cuento lo que saque
//      collect en la mina
      /*if (this.getCommand()!=null && ((ClientCommand)this.getCommand()).getCommandType()=="collect" && !this.getCommand().getDestination().equals(fortaleza.getPosition())){
        Set recursos=fortaleza.getKnownResources();
        Iterator it=recursos.iterator();
        while (it.hasNext()){
          Mina recurso=(Mina)it.next();
          if (recurso.getPosition().equals(this.getCommand().getDestination())){
            recurso.setResourcesStored(recurso.resourcesStored()+this.getActionSpeed());
            this.setResources(stat.getPayload());
            if (this.resourcesStored()==this.getMaxLoad())
              this.setCommand(null);
            System.out.println("Cantidad de recursos en la mina "+ recurso.resourcesStored()+ " " +stat.getPayload());
            break;
          }
        }
      }
      else
      {
        //collect en la fortaleza
        if (this.getCommand()!=null && ((ClientCommand)this.getCommand()).getCommandType()=="collect" && this.getCommand().getDestination().equals(fortaleza.getPosition())){
          this.setResources(stat.getPayload());
          if (this.resourcesStored()==0)
            this.setCommand(null);

        }
      }*/
      break;
    case Command.ERRORCODE_CHARFULL: 
      {
      Set recursos=fortaleza.getKnownResources();
      Iterator it=recursos.iterator();
      while (it.hasNext()){
        Mina recurso=(Mina)it.next();
        if (recurso.getPosition().equals(this.getCommand().getDestination())){
          recurso.setResourcesStored(recurso.resourcesStored()+stat.getPayload()-this.resourcesStored());
          this.setResources(stat.getPayload());
          System.out.println("Cantidad de recursos en la mina "+ recurso.resourcesStored()+ " " +stat.getPayload());
          break;
        }
      }
      this.setCommand(null);
      break;
      }
    case Command.ERRORCODE_DESTINATIONREACHED:
      this.setCommand(null);
      break;
    case Command.ERRORCODE_CELLAVAILABLE:
      //buscar otro camino
    /*  if (this.wayPoints!=null && this.wayPoints.size() ==1 ){
        this.setCommand(null);
        this.wayPoints.clear();
      }*/
     
      if (this.destino==null && this.wayPoints!=null && this.wayPoints.size()>1){
        System.out.println("Jodido");
      }
      if (this.wayPoints!=null && this.wayPoints.size()>0){
        Point wayPoint=(Point)this.wayPoints.get(0);
        int centroX=this.getPosition().getX();
        int centroY=this.getPosition().getY();
        int desplazamientoX=wayPoint.getX()-centroX;
        int desplazamientoY=wayPoint.getY()-centroY;
        int cantidadDiagonalesExactas=Math.min(Math.abs(desplazamientoX), Math.abs(desplazamientoY));
        int diagonalX=desplazamientoX>0 ? 1: -1;
        int diagonalY=desplazamientoY>0 ? 1: -1;
        desplazamientoX=Math.abs(desplazamientoX-cantidadDiagonalesExactas*diagonalX);
        desplazamientoY=Math.abs(desplazamientoY-cantidadDiagonalesExactas*diagonalY);
        Mina obstaculo;
        while (desplazamientoX>0){//es uno u el otro
          obstaculo=new Mina();
          obstaculo.setPosition(new Point(centroX+desplazamientoX*diagonalX,centroY));
          obstaculos.add(obstaculo);
          desplazamientoX--;
        }
        while (desplazamientoY>0){//es uno u el otro
          obstaculo=new Mina();
          obstaculo.setPosition(new Point(centroX,centroY+desplazamientoY*diagonalY));
          obstaculos.add(obstaculo);
          desplazamientoY--;
       
        while (cantidadDiagonalesExactas>0){
          obstaculo=new Mina();
          obstaculo.setPosition(new Point(wayPoint.getX()-diagonalX*cantidadDiagonalesExactas,wayPoint.getY()-diagonalY*cantidadDiagonalesExactas));
          cantidadDiagonalesExactas--;
          obstaculos.add(obstaculo);
        }
        this.setCommand(null);
        this.wayPoints.clear();
      }
      break;

    case Command.ERRORCODE_RESOURCEMAXEDOUT:
      Set recursos=fortaleza.getKnownResources();
      Iterator it=recursos.iterator();
      Mina recurso=new Mina();
      while (it.hasNext()){
        recurso=(Mina)it.next();
        if (recurso.getPosition().equals(this.getCommand().getDestination()))
          break;
      }
      recurso.setResourcesStored(recurso.resourcesStored()+stat.getPayload()-this.resourcesStored());
      this.setResources(stat.getPayload());
//      System.out.println("Cantidad de recursos en la mina "+ recurso.resourcesStored()); 
     
      if (fortaleza.resourcesPayload<recurso.resourcesStored())
        fortaleza.resourcesPayload=recurso.resourcesStored();
      else
        recurso.setResourcesStored(fortaleza.resourcesPayload);
      recurso.setMaxedOut(true);
      this.setCommand(null);
      break;
    case Command.ERRORCODE_NOTHINGTODEPOSIT://no deberiamos llegar a esto, perdemos turnos
      this.setResources(0);
      System.out.println("No deberia estar aca!!!!");
      this.setCommand(null);
      break;
    }
   
  }
/**
   * @return the estrategia
   */
  public EstrategiaUnidad getEstrategia() {
    return estrategia;
  }

  /**
   * @param estrategia the estrategia to set
   */
  public void setEstrategia(EstrategiaUnidad estrategia) {
    this.command=null;
    /*??? if (this.wayPoints!=null && this.wayPoints.size()>0)
      this.wayPoints.clear();*/
    this.estrategia = estrategia;
  }

 
  /**
   * Devuelve el primer enemigo que este en rango de visi�n
   * @return un enemigo, el primero encontrado. Sino NULL
   * NOTA: puede ser �til hacer una funci�n como �sta que devuelva el primero en rango de tiro
   */
  public Enemigo enemigoEnRango( ){
    //no es �ptimo pero anda (deber�a andar)
    for(int y=position.getY()-vision;y<=position.getY()+vision;y++)
    {
      for(int x= position.getX()-vision;x<=position.getX()+vision;x++)
      {
        Point pEvaluado = new Point(x,y);
        if(!jugador.getFortaleza().isPointAfuera(pEvaluado)&& pEvaluado.distance(position)<=vision)
        {
          MapElement meEvaluado = jugador.getFortaleza().getElementoMapaEnPosicion(pEvaluado);
          if (meEvaluado != null && meEvaluado.getClass().getName().equals("src.Enemigo") && ((Enemigo)meEvaluado).getUltimoTurnoVisto()==this.getJugador().turno )
         
            return (Enemigo)meEvaluado;
        }
      }
    }
    return null;
  }
 
 
  /**
   * genera comando para atacar en el punto par�metro.
   * por ahora el punto es un lugar que est� en rango... no s� si se usar� para perseguir
   * @return
   */
  public ClientCommand atacar(Point p){
    ClientCommand nuevoComando = new ClientCommand();
     getJugador().incIdComando();//incremento el id
    nuevoComando.setId( getJugador().getIdComando());
    nuevoComando.setIdUnit(getId());
    nuevoComando.setType("attack");
    nuevoComando.setOwner(this);

    nuevoComando.setDestination(p)
    nuevoComando.setUnitType(getType());
    Estadisticas.addEstadisticaAtaque(jugador.turno, position.getX(), position.getY(), this.actionSpeed/position.distance(p));

  return nuevoComando;
  }
 
 
  public ClientCommand idle(){
    ClientCommand cIdle = new ClientCommand();

     getJugador().incIdComando();//incremento el id
     cIdle.setId( getJugador().getIdComando());
     cIdle.setIdUnit(getId());
     cIdle.setType("idle");
     cIdle.setOwner(this);
     cIdle.setDestination(position);

    
     cIdle.setUnitType(this.getType());
     return cIdle;
  }
 
 
 
  /**
   * realiza la acci�n del turno
   * @return
   */
  public ClientCommand actuar(){
    //if(estrategia != null)
    return estrategia.accionDeTurno(this);
   
  }
 
 
  /**
   * crea un comando idle
   * @return
   */
  /*public ClientCommand idle(){
   
  }*/
   public int getTipoInternoUnidad(){
      return -1;//por ahora no estamos pensando en crear atacantes x... no tiene atributos, por empezar
    }
  

   /**
    * @override
    */
   public  void setEstrategiaUnidad(EstrategiaUnidad eu){
     this.setEstrategia(eu);
   }
  
}
TOP

Related Classes of src.Atacante

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.