Jak rozwiązać temat lokalizacji "przeciwnika" w mobilnej aplikacji imitującej grę

0

Aplikacja oparta na pozycji na mapie.
Po włączeniu aplikacji apka pobiera lokalizację użytkownika, wysyła jego koordynaty do backendu i na ich podstawie wyświetlam na mapie w promieniu 500 metrów kropkę, którą użytkownik musi dogonić.

Z tym problemu nie mam. Zaczynam mieć wątpliwości jak rozwiązać problem jeśli chcę, żeby kropka była ruchoma. Czyli:

  1. Kropka potrzebuje generować sobie w jakiś sposób gdzie będzie się poruszać, powiedzmy co 10 sekund zmienia swoje położenie o 10 metrów.
  2. Gdy użytkownik znajdzie się w obrębie 20 metrów od kropki może ją kliknąć, puścić odpowiedź do API, że ją dogonił i dostać "nagrodę".

No i teraz pytanie, czy nie będzie przeciwwskazań, żeby sobie nowe koordynaty generować na froncie? Jeśli mówilibyśmy o zabawie "single player" to co tam, jeśli użytkownik znajdzie jakiś exploit by zawsze złapać kropkę to jest jego sprawa, ale w przypadku gdy będziemy mieli wielu "graczy" i za łapanie kropek będa nagrody to pewnie wypadałoby jakoś rozwiązać ten problem.

Podaję ogólny przykład, przez to nie wiem czy nie wyszedł zbyt chaotyczny opis, ale może ktoś na jego podstawie zaproponowałby mi jakieś poprawne rozwiązanie logiki takiej małej aplikacji? Zawsze zakładam najgorszy wariant, że mogę mieć tysiące użytkowników i nie chcę zajechać API (ani google mapsów i polecieć z torbami).

1

Tutaj podstawowym problemem jest to jak zweryfikować czy koordynaty podawane przez środowisko są poprawne. Jest mnóstwo metod obchodzenia geofencingu.

Zakładając jednak że ufamy userowi, jeśli chodzi o ruch kropki - jeśli kropka rusza się po jakiejś krzywej, to może warto w backendzie zapisać sobie jej parametry i weryfikować na ich podstawie - na przykład wysyłać jakiegoś splinea i może osobne parametry funkcji jeśli chodzi o prędkość poruszania wzdłuż tej krzywej. Inną opcją jest deterministyczne generowanie - zamiast w pełni losowego ruchu możesz wysłać seed do jakiegoś konkretnego generatora liczb losowych który wygeneruje ci taką krzywą - w obydwu rozwiązaniach backend weryfikuje bliskość kropki, ale nadal pozostaje kwestia spoofingu położenia.

0

O samym spoofowaniu pewnie jeszcze sobie poczytam jak temu przeciwdziałać, apka w domyśle ma być lekko fitnesowa więc i tak będę śledzić położenie użytkownika, jak wyliczę mu za dużą szybkość to mogę mu po prostu zablokować klilknięcie kropki by przeciwdziałać teleportującym się typkom (pomysł na szybko, pewnie jest wiele lepszych).

Ruch właśnie w efekcie końcowym bym nie chciał by był losowy, best case scenario chcę, żeby poruszał się ulicami (żeby usera nie wywaliło na środek czyjegoś pola), ale jak to rozwiązać jeszcze nie wiem. Na pewno chcę przeciwdziałać temu by kropka chodziła 10 metrów w prawo, potem w lewo i się zapętliła w ten sposób, ona ma sobie w miarę "naturalnie" spacerować.

Może więc zatem generować na backendzie jakąś tablicę koordynatów na najbliższe X minut, wysłać te dane na front a jak aplikacja zwróci informacje o dogonieniu kropki to jakaś funkcja sprawdzająca czy kropka była w odpowiednim miejscu i nie została zmanipulowana w jakiś sposób (z marginesem błędu na powiedzmy 2 pozycje w tablicy jakby api zamuliło). Będę szczery nawet nie wiem czy jest coś takiego możliwe bo nigdy się nie interesowałem takimi tematami, przy aplikacji webowej bym się bardziej bał, ale to będzie react native więc pewnie możliwości kombinowana są ograniczone.

1

ale jak to rozwiązać jeszcze nie wiem

Wez polozenie uzytkownika, wylosuj jakies losowe miejsce w miescie (np. restauracje) i wyznacz trase do niego. Polozenie kropki bedzie na tej trasie tylko w roznych odleglosciach od punktu startowego :)

Tylko tak zeby sie na piechote dalo dotrzec na miejsce a nie nagle na autostrade musisz wbiec. (google maps ma opcje np. samochod/transport publiczny/rower/piechota).

0

Myślałem o tym, ale potem zobaczyłem cennik google mapsów z wyznaczaniem trasy. Przy wielu kropkach pójdę z torbami :( Na większym etapie zaawansowania projektu poszukam innych opcji wyznaczania trasy, może jest coś darmowego co zadziała, w końcu jedyne co potrzebuję to tablicę koordynatów

1

Spróbuj pogrzebać wokół OSM, powinno się dać coś zrobić, pytanie jakim wielkim bólem będzie utrzymanie tego.

0

No właśnie już raz projekt porzuciłem, zaczynałem go robić na leaflecie, jednak już podstawowa rzecz jak wyświetlenie mapy wymagało ode mnie workarounda i wytłumaczenie było "No czasami się zdarza, nie wiemy czemu" (nie ładowały się kafelki z mapą na starcie, musiałeś się ruszyć poza jakiś kafelek). Jak pewien procent apki to zaczęły być workaroundy to rzuciłem to wszystko i zapomniałem o pomyśle na rok.

Pewnie będę kombinować by dostać najlepsze z dwóch światów, jak mi to wyjdzie się przekonamy, ale spodziewam się, że po prostu będę musiał sypać hajsem w google'a jeśli będę chciał projekt potraktować poważnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1