3.1 KiB
3.1 KiB
Planowanie ruchu
Całą implementacje automatycznego poruszania się można znaleźć
w plikach AStarNode.py oraz
AutomaticMovement.py.
Postęp projektu
Teraz nasz agent ma możliwość automatycznego poruszania się.
Po wciśnięciu u nasza postać zacznie zmierzać do losowego obszaru za pomocą algorytmu A*.
Jeśli pole przed agentem będzie interaktywne zostanie podniesione.
Pętla główna strategii przeszukiwania
Metoda a_Star(self) w AutomaticMovement.py
- Na początku sprawdza czy kolejka jest pusta, jeśli tak zwraca None
- Jeśli test spełnienia celu się powiedzie, sprawdzamy dodatkowo czy nasz punkt docelowy nie jest elementem kolizyjnym, jeśli jest, to cel = cel.parent i zwracamy ciąg akcji
- Dodajemy dane miejsce do listy explored
- Następnie w pętli for deklarujemy nowy stan i priorytet zgodnie z funkcją następnika, jego priorytet określamy za pomocą funkcji priorytetu self.priority
- Jeśli stan nie jest w kolejce i nie ma go w odwiedzonych polach, umieszczamy go w kolejce
zgodnie z priorytetem, zapobiegamy też wystąpienia dwóch takich samych priorytetów poprzes self.testCount += 1 - A jeśli stan newNode należy do kolejki i jakiś inny stan node z kolejki posiada od niego większy priorytet, to usuwamy z kolejki node i dodajemy newNode
Funkcja następnika
Metoda succesor(self, elemState) w AutomaticMovement.py
- Do wynik inicjujemy obrót w lewo i prawo, gdyż to zawsze nasz agent może wykonać
- Sprawdzamy czy jest możliwość ruchu do przodu:
Heurystyka
Metoda approximateDistanceFromTarget(self, tileX, tileY) w AutomaticMovement.py