diff --git a/data/images/screenshots/aStarLoop1.png b/data/images/screenshots/aStarLoop1.png new file mode 100644 index 0000000..009d3e6 Binary files /dev/null and b/data/images/screenshots/aStarLoop1.png differ diff --git a/data/images/screenshots/aStarLoop2.png b/data/images/screenshots/aStarLoop2.png new file mode 100644 index 0000000..8bd79b0 Binary files /dev/null and b/data/images/screenshots/aStarLoop2.png differ diff --git a/data/images/screenshots/aStarLoop3.png b/data/images/screenshots/aStarLoop3.png new file mode 100644 index 0000000..e99946f Binary files /dev/null and b/data/images/screenshots/aStarLoop3.png differ diff --git a/data/images/screenshots/aStarSuccesor.png b/data/images/screenshots/aStarSuccesor.png new file mode 100644 index 0000000..115c090 Binary files /dev/null and b/data/images/screenshots/aStarSuccesor.png differ diff --git a/data/images/adventure.png b/data/images/screenshots/adventure.png similarity index 100% rename from data/images/adventure.png rename to data/images/screenshots/adventure.png diff --git a/environment.md b/environment.md index f8a980e..a5b3e1c 100644 --- a/environment.md +++ b/environment.md @@ -33,7 +33,7 @@ Statystyki agenta można zmieniać poprzez interakcję z objektami **entities**, nasze pragnienie, a zjedzenie królika nasz głód, możemy również odpocząć przy ognisku. Posiadamy również konsolę, która wypisuje różnorodne zdarzenia i ich skutki, na przykład gry agent coś podniesie. W konsoli znajduję się również Timer, który pozwala nam ustalić ile czasu udało się agentowi przetrwać._ -![screenshot](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/raw/master/data/images/adventure.png?fbclid=IwAR0lBN3bQIK4-LQuVPw-vTLxBrN3xMTrNjKjcrOp4idzaZvkOwdbYZQRQc0) +![screenshot](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/raw/master/data/images/screenshots/adventure.png?fbclid=IwAR0lBN3bQIK4-LQuVPw-vTLxBrN3xMTrNjKjcrOp4idzaZvkOwdbYZQRQc0) ### Statystyki **Health points:** *Punkty życia agenta, gdy pasek spadnie do zera agent umiera.* **Hunger:** *Głód agenta, gdy pasek podniesie się do wartości 100, agent umiera.* diff --git a/route-planning.md b/route-planning.md index 19c89fb..683992e 100644 --- a/route-planning.md +++ b/route-planning.md @@ -3,27 +3,38 @@ **Całą implementacje automatycznego poruszania się można znaleźć w plikach [AStarNode.py](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/src/master/src/AI/AStarNode.py) oraz [AutomaticMovement.py](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/src/master/src/AI/AutomaticMovement.py).** - -## Pętla główna strategii przeszukiwania +## 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*. + +## Pętla główna strategii przeszukiwania +**Metoda *a_Star(self)* w [AutomaticMovement.py](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/src/master/src/AI/AutomaticMovement.py)** * Na początku sprawdza czy kolejka jest pusta, jeśli tak zwraca *None* +![screenshot1](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/raw/master/data/images/screenshots/) * 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 +![screenshot2](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/raw/master/data/images/screenshots/) * 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* +![screenshot3](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/raw/master/data/images/screenshots/) ## Funkcja następnika +**Metoda *succesor(self, elemState)* w [AutomaticMovement.py](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/src/master/src/AI/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: - * Sprawdzamy czy przed nami jest jakaś kolizja jeśli jest to weryfikujemy - czy to nie jest nasz cel, jeśli jest to dodajemy ruch do przodu do wyniku funkcji następnika, jeśli nie to zwracamy jedynie listę z obrotami + * Sprawdzamy czy przed nami jest jakaś kolizja, jeśli jest to weryfikujemy + czy to nie jest nasz cel + * Jeśli to jest nasz cel to dodajemy ruch do przodu do wyniku funkcji następnika, jeśli nie to zwracamy jedynie listę z obrotami +![screenshot4](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/raw/master/data/images/screenshots/) + ## Heurystyka - +**Metoda *approximateDistanceFromTarget(self, tileX, tileY)* w [AutomaticMovement.py](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/src/master/src/AI/AutomaticMovement.py)** * Oszacowuje koszt dotarcia do celu końcowego z aktualnej pozycji gracza. -* Opisana metodą approximateDistanceFromTarget(self, tileX, tileY) w pliku AutomaticMovement.py -* Od tileX i tileY (aktualna pozycja gracza) odejmowana jest pozycja docelowa, zwracana jest wartość zaniżonego kosztu osiągnięcia celu. \ No newline at end of file +* Od tileX i tileY (aktualna pozycja gracza) odejmowana jest pozycja docelowa, zwracana jest wartość zaniżonego kosztu osiągnięcia celu. +![screenshot7](https://git.wmi.amu.edu.pl/s444409/DSZI_Survival/raw/master/data/images/screenshots/) \ No newline at end of file