Captura la bandera

De OpenDataLab
Saltar a: navegación, buscar

Página de las características de la plataforma CTF-UHU

Descripción del proyecto

El proyecto a desarrollar se puede encajar, principalmente, dentro del proyecto docente del área de de Ciencias de la Computación e Inteligencia Artificial. Éste va a consistir en el desarrollo de una plataforma multiagente donde poner en práctica todas las ideas y algoritmos desarrollados durante los estudios de Grado en Ingeniería Informática.

En concreto, para la asignatura de Inteligencia Artificial, los alumnos lo usarán para experimentar con los principales algoritmos de búsqueda estudiados.

Para la asignatura Sistemas Inteligentes, los alumnos podrán desarrollar por completo un agente software, o varios, para poner en práctica los conocimientos aprendidos en la asignatura.

Sobre la plataforma, se desarrollará en Java. Simulará el juego "Capture the Flag". El servidor será un agente sofware JADE. Recibirá jugadores y simulará las partidas. También se desarrollará un agente gráfico, para ver la partida. La comunicación entre agentes se basará en la biblioteca JADE. La parte gráfica se desarrollará mediante la biblioteca PROCESSING.

Objetivos: - Estudio y desarrollo de la plataforma base y arquitectura del sistema.

- Integración con entorno gráfico.

- Desarrollo de esquemas de programación.

- Elaboración de algunas prácticas "tipo".

- Redactar documentación del funcionamiento del sistema.

- Implantación de la plataforma en la web.


GitHub

https://github.com/Saviatron/Plataforma_CTF_UHU


Vídeo funcionamiento

Demostración funcionamiento Plataforma


Versión y estado

El proyecto está actualmente en la versión 6.1.

Esta versión es completamente estable y tiene todas las funcionalidades pensadas inicialmente.


El estado de desarrollo es 98%, ya que siempre será posible seguir añadiendo funcionalidades.


Implementadas

- Cambiar de JFrame a processing 2, luego a processing 3. Esto implica que PApplet no hereda de Applet, debido a eso, no se puede incrustar en JFrame.

- El PApplet no tiene constructor con parámetros, para ello: InitMapa().

- La solución es crear 2 ventanas: GUI_Interactuar (Para ver los jugadores, cambiar camaras, y elegir entre 2D y 3D). GUI_Mapa (Ventana del sketch donde se representará la partida).

- Dibujar el mapa en 2D con processing.

- Dibujar el mapa en 3D con processing.

- Realizar procesador de lenguajes (Parser) para comunicar mapa:

       La gramatica finalmente realizada será: 
       Cada línea: token “,” equipo “,” posX “,” posY “\n” 
       token: “entrada” | “jugador” | “muerte” | “base” | “bandera”
       equipo: numero
       posX: numero
       posY: numero

- Corregir texturas 2D y 3D.

- 2 SimpleAchieveREResponser (FIPARequest): Solucionado con plantilla de mensajes, una para jugadores y otra para monitores.

- Arreglar bucle para leer acciones de HashtTable, en el comportamiento Tick.

- Pasar nombre de jugadores a GUI_Interactuar.

- Primera versión 3D: Graficos en 3D simples Pelotas, cubos y triangulos.

- Ir adaptando jugadores a los cambios en el servidor, y a varios equipos.

- Monitor para cada pc con jugadores. Independiente del servidor.

- Archivo Config externo. (API Properties)

- Desconectar monitor

- Animaciones entrada y muerte de jugadores.

- Enviar mensaje GameOver a monitores

- Probar monitores externos desde otro PC.

- Montar archivos .bat y .jar

- Corregir varios jugadores con bandera. se debe a que hay varios jugadores en la misma casilla, problema procedente por la falta de un break; en un switch.

- Realizar copias de seguridad.

- Varias acciones para un jugador en el mismo tick. Debido a anteriores acciones en hashtable no eliminadas. Esto generaba también el error de MAX_Jugadores. La solución ha sido eliminar por fuerza bruta recorriendo el array de jugadores y eliminando por nombre. Al morir un jugador, se eliminaba el Objeto de la lista. Al volver a entrar, se crea otro objeto con el mismo nombre. Habia veces que no se eliminaba correctamente, por ello eliminamos por nombres. Ademas, estos 2 distintos objetos con el mismo nombre, es lo que creaba conflictos en la hashtable asignando 2 posiciones al mismo jugador en un mismo tick.

- Cargar .obj en 3D, optimizando el tiempo de carga eliminando texturas y aplicando en tiempo de ejecución el color. Solo disponemos de 5 segundos para cargar las figuras en 3D.

- Aplicar texturas con textureMode(PConstant.NORMAL). Pero podría ser mas lento, no abusar.

- Añadir opción 2D-3D en GUI_Interactuar.

- Añadir varias opciones cámaras en GUI_Interactuar.

- Redimensionar pantalla del sketch al iniciar.

- Opción 2D mantenida debido a restricciones de pc.

- Hacer cámara fija

- Hacer cámara controlada por el raton

- Mapa lineal en lugar de bidimensional. Sigue sirviendo? Añadir a monitor y jugador?

- Redimensionar las 2 ventanas y posicionar correctamente para varios equipos.

- Si añadimos redimensionamiento en tiempo real al sketch, redimensionar casillas y jugadores.

- Nueva estructura del mapa: 2 ficheros: .txt para paredes y .ini para contenido. Solo pasamos el mapa 1 vez, luego solo comunicamos el contenido.

- Modo sin monitor, guardar partida en .txt

- Estadísticas de la partida.

- Skybox en processing

- Añadir sonidos. Hacer visibles acontecimientos.

- Poner botones del Play... etc...

- Estadísticas. quien es el ganador número de tics jugados número de bajas por equipos.

- Lista de jugadores y sus bajas.

- Esquema de pasos de mensajes.

- Cámara por teclado

- Meter carpeta figuras dentro del .jar

- Añadir opción 2D-3D en config.

- Ordenar librerías externas.



- Beta finalizada.



- Poner nombre al equipo. El primer jugador que cambie el nombre del equipo.

- Opción para deshabilitar sonido del monitor.

- Cámara por jugadores. Más o menos, hay que terminar de cuadrarla por posición. Se elegirá un jugador de la lista de los actuales.

- Añadir orientación a jugadores (solo se mueven adelante) . Orientación relativa o absoluta. Se elige en Servidor.cfg. Se ha creado la clase Accion.java. El servidor recibe: int,String (Absoluta) o int,int (Relativa) -> desplazamiento,orientacion Si (desp>1) -> desp=1 Relativa: si (!grados%45) -> INCORRECTA Absoluta: si (¡orientacion==[N,NE,E,SE…]) -> INCORRECTA Si (desp==0) -> NULA Si recibe “ABANDONAR” -> Abandonar Orientación inicial -> 0 == N -45º -> 360-45 , 405º -> 405%360 Deberia rotar si desp==0? Por ahora no. Añadir opción de despl=-1 (atrás)? Se podría quitar opción, ya que se diferencia en int o String? - Sombras y luces en processing (Terminar, arreglar fallos) Por ahora no!

- Ficheros partida y estadística siempre abiertos. Si el servidor no acaba como es debido se pierde todo. Ultima voluntad o abrir y cerrar siempre? Java.Util.Logging no sirve, escribe fecha… -> Abrir y cerrar cada vez que escriba.

- Mapa parcial: Solo se le enviará al jugador una porción del tablero en cada tick. Configurable desde ServidorConfig.


Pendientes

• Limpiar, ordenar, optimizar, comentar, depurar código.

• Redimensionar tablero y casillas a pant. Completa

• Mejorar jugadores (Hacer jugador rival)

• Hacer esquema rellenable de jugadores (jugador esqueleto) PARA PRACTICA IA LABERINTO

• Añadir elementos al juego. (Vida, daño, paredes moviles, recursos)

       Vida y daño ya añadidos.

• Esquema de clases de cada proyecto y funcionamiento.

• Hacer figuras con menos detalles -> eficiencia

• Subir plataforma a Internet


Ideas

- Terminar las ideas no implementadas.


Autoría

Autor del proyecto: Javier Martín Moreno.

Tutor del proyecto: Gonzalo Antonio Aranda Corral.


Firmado

--Javier.martin816 (discusión) 10:26 3 abr 2019 (CEST)