private String generaCoordenadasPerseguir(InfoCollision info) {
    double distancia = 0.5;
    String parteConoColisionada = info.getParteConoColisionada();
    switch (camino.getOrientacion()) {
      case N:
        {
          if (parteConoColisionada.equals("izquierda")) {
            camino.setOrientacion(Orientation.NO);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);
          } else if (parteConoColisionada.equals("centro")) {
            camino.setOrientacion(Orientation.N);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);
          } else if (parteConoColisionada.equals("derecha")) {
            camino.setOrientacion(Orientation.NE);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);
          }
          break;
        }
      case NE:
        {
          if (parteConoColisionada.equals("izquierda")) {
            camino.setOrientacion(Orientation.N);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);

          } else if (parteConoColisionada.equals("centro")) {
            camino.setOrientacion(Orientation.NE);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);
          } else if (parteConoColisionada.equals("derecha")) {
            camino.setOrientacion(Orientation.E);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
          }
          break;
        }
      case E:
        {
          if (parteConoColisionada.equals("izquierda")) {
            camino.setOrientacion(Orientation.NE);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);
          } else if (parteConoColisionada.equals("centro")) {
            camino.setOrientacion(Orientation.E);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
          } else if (parteConoColisionada.equals("derecha")) {
            camino.setOrientacion(Orientation.SE);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          }
          break;
        }
      case SE:
        {
          if (parteConoColisionada.equals("izquierda")) {
            camino.setOrientacion(Orientation.E);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
          } else if (parteConoColisionada.equals("centro")) {
            camino.setOrientacion(Orientation.SE);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          } else if (parteConoColisionada.equals("derecha")) {
            camino.setOrientacion(Orientation.S);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          }
          break;
        }
      case S:
        {
          if (parteConoColisionada.equals("izquierda")) {
            camino.setOrientacion(Orientation.SE);
            camino.getPunto().setX(camino.getPunto().getX() + distancia);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          } else if (parteConoColisionada.equals("centro")) {
            camino.setOrientacion(Orientation.S);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          } else if (parteConoColisionada.equals("derecha")) {
            camino.setOrientacion(Orientation.SO);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          }
          break;
        }
      case SO:
        {
          if (parteConoColisionada.equals("izquierda")) {
            camino.setOrientacion(Orientation.S);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          } else if (parteConoColisionada.equals("centro")) {
            camino.setOrientacion(Orientation.SO);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          } else if (parteConoColisionada.equals("derecha")) {
            camino.setOrientacion(Orientation.O);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
          }
          break;
        }
      case O:
        {
          if (parteConoColisionada.equals("izquierda")) {
            camino.setOrientacion(Orientation.SO);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
            camino.getPunto().setY(camino.getPunto().getY() - distancia);
          } else if (parteConoColisionada.equals("centro")) {
            camino.setOrientacion(Orientation.O);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
          } else if (parteConoColisionada.equals("derecha")) {
            camino.setOrientacion(Orientation.NO);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);
          }
          break;
        }
      default:
        {
          if (parteConoColisionada.equals("izquierda")) {
            camino.setOrientacion(Orientation.O);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
          } else if (parteConoColisionada.equals("centro")) {
            camino.setOrientacion(Orientation.NO);
            camino.getPunto().setX(camino.getPunto().getX() - distancia);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);
          } else if (parteConoColisionada.equals("derecha")) {
            camino.setOrientacion(Orientation.N);
            camino.getPunto().setY(camino.getPunto().getY() + distancia);
          }
        } // NO
    } // fin del switch

    String mensaje =
        nombre
            + ","
            + camino.getPunto().getX()
            + ","
            + camino.getPunto().getY()
            + ","
            + camino.getPunto().getZ()
            + ","
            + camino.getOrientacion();

    return mensaje;
  }
  protected void onTick() {

    listaAgentesComunicacion = paginasAmarillas.buscarServicio("envio-coordenadas", myAgent);
    listaAgentesDeteccionColisiones =
        paginasAmarillas.buscarServicio("deteccion-colisiones", myAgent);

    // Estamos a la escucha para recibir algun mansaje procedente del Agente Servidor
    ACLMessage mensajeEntrante = myAgent.receive();
    if (mensajeEntrante != null) {
      if (mensajeEntrante.getPerformative()
          == ACLMessage.REQUEST) { // Recibimos un mensaje InfoCollision
        try {
          InfoCollision info = (InfoCollision) mensajeEntrante.getContentObject();
          // Dentro del try está la parte relativa a la toma de decisiones:
          String decision;
          if (this.decisionAnterior.equals("perseguir"))
            decision =
                DecisionMaker.tomaDeDecisionesGato(
                    info.getTipoAgente(),
                    info.getOrientacion(),
                    info.getClaridadPercepcion(),
                    info.getDistancia(),
                    this.decisionAnterior,
                    0.3,
                    0.1,
                    0.1,
                    0.1,
                    0.4);
          else
            decision =
                DecisionMaker.tomaDeDecisionesGato(
                    info.getTipoAgente(),
                    info.getOrientacion(),
                    info.getClaridadPercepcion(),
                    info.getDistancia(),
                    this.decisionAnterior,
                    0.5,
                    0.1,
                    0.1,
                    0.1,
                    0.2);

          logger.info("--> DECISION TOMADA POR EL GATO: " + decision);
          String contenido;
          if (decision.equals("perseguir")) {
            contenido = generaCoordenadasPerseguir(info);
            comportamientoTrayectorias = null;
          } else if (decision.equals("esquivar")) {
            contenido = generaCoordenadasEsquivar(info);
            comportamientoTrayectorias = null;
          } else { // "no hacer nada"
            switch (tipoTrayectoria) {
              case PathsBehaviour.OCTOGONAL:
                camino.setOrientacion(Orientation.E);
                break;
              case PathsBehaviour.DIAMANTE:
                camino.setOrientacion(Orientation.NE);
                break;
              case PathsBehaviour.CUADRADA:
                camino.setOrientacion(Orientation.E);
                break;
              case PathsBehaviour.TRIANGULAR:
                camino.setOrientacion(Orientation.O);
                break;
              case PathsBehaviour.ZIGZAG:
                camino.setOrientacion(Orientation.NO);
                break;
              case PathsBehaviour.BARRIDO:
                camino.setOrientacion(Orientation.E);
                break; // nuevo
            }
            contenido = generaCoordenadas();
          }

          for (int i = 0;
              i < listaAgentesComunicacion.length && listaAgentesDeteccionColisiones.length > 0;
              i++) {
            if (activado) nuevoMensaje(listaAgentesComunicacion[i].getLocalName(), contenido);
            mensajeInfoAgente(listaAgentesDeteccionColisiones[i].getLocalName());
            logger.info(
                "GATO EN "
                    + camino.getPunto().getX()
                    + " "
                    + camino.getPunto().getY()
                    + " "
                    + camino.getPunto().getZ()
                    + " "
                    + camino.getOrientacion());
          }

          // Almacenamos la decisión para tenerla en cuenta la vez siguiente: es un criterio.
          this.decisionAnterior = decision;

        } catch (UnreadableException e) {
          e.printStackTrace();
        }
      } else {
        logger.info("Mensaje entrante del gato: " + mensajeEntrante.getContent());
        String contenidoMensaje = mensajeEntrante.getContent();
        if (contenidoMensaje.contains("morir")) { // Matamos a los agentes
          myAgent.doDelete();
        } else if (contenidoMensaje.contains(
            "comunicacion-lista")) { // Permitimos que empiecen a generar coordenadas
          activado = true;
        } else if (contenidoMensaje.contains(
            "genera")) { // Permitimos que sigan generando coordenadas
          String contenido = generaCoordenadas();
          for (int i = 0;
              i < listaAgentesComunicacion.length && listaAgentesDeteccionColisiones.length > 0;
              i++) {
            if (activado) nuevoMensaje(listaAgentesComunicacion[i].getLocalName(), contenido);
            mensajeInfoAgente(listaAgentesDeteccionColisiones[i].getLocalName());
            logger.info(
                "GATO EN "
                    + camino.getPunto().getX()
                    + " "
                    + camino.getPunto().getY()
                    + " "
                    + camino.getPunto().getZ()
                    + " "
                    + camino.getOrientacion());
          }
        }
      }
    } else { // Permanecemos a la espera de que llegue un mensaje
      block();
    }
  }