# Raport 2 ### Definicja pętli głownej strategi przeszukiwania Naszą główną funkcją jest funkcja `aStar(startField, goalField)`, przyjmuje ona dwa argumenty: `startField` - pole z którego wyrusza agent `goalField` - cel drogi agenta. Zwraca ona ścieszkę z `startField` do `goalField`. #### Opis `closedSet` - lista zawierająca sprawdzane i sprawdzone pola z listy `openSet` `openSet` - lista zawierająca pola do sprawdzenia `path` - lista zawierająca pola tworzące ścieszkę do wybranego celu
- Dodajemy pierwszy element który będziemy sprawdzać do listy openSet: `addToOpenSet(openSet, startField)` - Dopuki lista `openSet` nie bedzie pusta sprawdzamy jej elementy: `while(openSet.length > 0)` - Wybieramy najbardziej obiecujący element z zbioru `openSet`: `let current = findLowestFScore(openSet, goalField)` - Jeśli pole `current` okaże się naszym celem tworzymy ścieszkę z punktu startowego do naszego celu. ```javascript if(current === goalField){ path = [] var temp = current; path.push(temp); while(temp.previous){ path.push(temp.previous); temp = temp.previous } ``` - Następnie kolorujemy tą ścieszkę i kończymy funkcję zwracając ścieszkę `path` ```javascript for(var i = 0; i < path.length; i++){ colorYellow(path[i]); } return path ``` - Jeśli pole `current` nie jest naszym celem, to usuwamy je z listy `openSet` i dodajemy do listy `closedSet` ```javascript removeFromSet(openSet, current); addToClosedSet(closedSet, current); ``` - Pobieramy sąsiadów pola `current`: `var neighbors = current.neighbors;` - Dla każdego sąsiada obliczamy koszt dotarcia do niego z punktu początkowego najlepszą ścieszką. ```javascript for(var i = 0; i < neighbors.length; i++){ var neighbor = neighbors[i]; if(!closedSet.includes(neighbor)){ var tempG = current.gScore + neighbor.costOfTravel; if(openSet.includes(neighbor)){ if(tempG < neighbor.gScore){ neighbor.gScore = tempG; } } else { neighbor.gScore = tempG; addToOpenSet(openSet, neighbor); } ``` - Po przypisaniu kosztu do sąsiada dodajemy jego odległość do celu:
`neighbor.heuristic = getDistance(neighbor, goalField);`, - ??????????: `neighbor.f = neighbor.gScore + neighbor.heuristic;` - oraz jego poprzednika: `neighbor.previous = current;` ### Definicja funkcji następnika ### Definicja przyjętej heurystyki