d. Descripción detallada de los algoritmos desarrollados. - AnthonyHMR/ITCR.DatosII.ProyectoII.LetsPlay.Server GitHub Wiki
Se implementa un algoritmo de búsqueda recursiva en una matriz binaria de 20x30, donde los ceros representan un jugador, es decir, un obstáculo para el camino del balón y los unos son caminos libres.
La matriz se recorre desde un punto inicial que es la posición del jugador en turno y tiene como destino el marco del equipo rival. El algoritmo revisa los bloques vecinos al jugador en turno y avanza conforme hay casillas disponibles hasta encontrar la meta, luego de explorar todos los posibles caminos elige el más corto y lo guarda en la matriz que guarda el camino.
Métodos:
isSafe(x, y): boolean que retorna true si se puede visitar un bloque de la matriz y false si esa posición de la matriz ya fue visitada o es un obstáculo.
isValid(x, y): boolean que retorna true si las coordenadas (x, y) están dentro de los márgenes de la matriz, false sino.
findShortestPath(xstart, ystart, xend, yend, distance): método que recorre la matriz entre dos puntos dados para encontrar cuál es el camino más corto hacia la meta.
Se implementa el algoritmo A* para una búsqueda en una matriz binaria de 20x30. Cuando la modalidad del juego es 1 vs 1 se realiza lo siguiente:
La matriz se recorre desde un punto inicial que es la posición del jugador en turno y tiene como destino el marco del equipo rival. El algoritmo revisa los bloques vecinos al jugador en turno y avanza conforme hay casillas disponibles hasta encontrar la meta, luego de explorar todos los posibles caminos elige el más corto y lo guarda en la matriz que guarda el camino, todo mientras los bloques vecinos van entrando a una lista de vecinos.
Métodos:
findPath(): chequea todas las posibles soluciones y dedide cuál es la más corta.
solveUtil(StarNode): auxiliar de findPath para validar decisiones.
addNeighbors(StarNode): agrega los nodos vecinos del nodo pasado por parámetro.
existsInOpenList(StarNode):verifica si el nodo es parte de la lista abierta.
isSafe(x, y): verifica que el punto (x, y) sea seguro.
createSol(StarNode): inicializa la matriz que guarda el camino más corto.
printSol(grid): imprime por consola la matriz solución.
existsInClosedList(StarNode): verifica si el nodo pasado por parámetro está en la lista cerrada.
![[DC]](https://github.com/AnthonyHMR/ITCR.DatosII.ProyectoII.LetsPlay.Server/raw/main/doc/diagrame_clases.jpg)
![[Diagrama de clases: servidor]](https://github.com/AnthonyHMR/ITCR.DatosII.ProyectoII.LetsPlay.Server/raw/main/doc/Proyecto%202%20Datos%202.png)