d. Descripción detallada de los algoritmos desarrollados. - AnthonyHMR/ITCR.DatosII.ProyectoII.LetsPlay.Server GitHub Wiki

Algoritmo de backtracking :

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.

Algoritmo de Pathfinging A*:

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.

⚠️ **GitHub.com Fallback** ⚠️