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(); } }