Na streamie numer #45,
Gynvael
zamieścił kolejną ciekawą misję. Oto jej treść:
Do tego otrzymaliśmy API deklarujące format danych pobieranych z serwera:
Mamy już dużo informacji. Pora je wykorzystać. Chciałbym uprzedzić że pokazany kod
pisany był na kolanie.
Zaczynamy!
Pamięć podręczna i parser
Zgodnie z zaleceniami powinniśmy cache'ować wszystkie dane jakie otrzymamy z serwera.
W tym celu napisałem sobie prostą klasę pozwalającą zapisać i odczytać dane z pliku:
Kolejnym krokiem będzie pobranie oraz parsowanie danych z serwera.
Zaczniemy jednak od parsera:
Pobieranie i obsługa danych
Gdy możemy już przetwarzać dane z serwera na wygodniejszy dla nas format,
musimy jakoś pobierać je z serwera z wykorzystaniem naszego cache'a:
Ładnie - mamy dostęp do danych z drona. Postarajmy się więc
przetworzyć odczyty z lidaru na pixele znajdujące się na mapie:
Rysowanie danych do obrazka
Wszystko fajnie, ale nie mamy jak podejrzeć naszych odczytów.
Musimy zapisywać je do pliku, najlepiej kilka razy
podczas pracy programu żeby móc zrobić z wygenerowanych obrazów,
ładną animację:
Poruszanie się po mapie
Ostatnim krokiem będzie stworzenie kawałka kodu który będzie zwiedzał mapę naszym
dronem. Nie będziemy przelatywać każdego pola na mapie. Obecny program jest dość
wolny, więc zajęło by to wieki. Ale na szczęście nie musimy tego robić.
Wystarczy żę będziemy trzymać się ściany. Odczyty powinny ukazać resztę elementów.
Do poruszania się po mapie użyjemy lekko zmodyfikowanego algorytmu Wall forever.
Modyfikacja polega na tym że co 10 zmian pozycji będziemy odbijać dronem w kierunku
prostopadłym do ściany za którą podążamy do momentu gdy napotkamy na przeszkodę. Potem wracamy do
dalszego podążania za ścianą. Przedstawia to powyższy obrazek poglądowy.
Czerwona i niebieska linia to droga jaką przebył dron. Czerwona podąża za ścianą,
a niebieskie to cykliczne odbicia od czerwonej co 10 zmian czerwonej pozycji drona.
Poniżej znajduje się część omawianego kodu. Całość można zobaczyć pod linkiem niżej.
Czas połączyć wszystko w całość
Część z was pewnie się zastanawia skąd znalazły się tutaj te adresy.
Otóż podczas wykonywania programu zauważyłem że algorytm nie jest w
stanie odnaleźć wszystkich ścian, więc znalazłem dwa adresy innych miejsc
na mapcę i wypuściłem tam po dwa "drony", każdy leciał w innym kierunku.
Dzięki temu udało mi się odkryć całą mapę:
Jako że po drodze zapisywałem postępy działania programu, udało mi się
wygenerować całkiem fajną animację: