W pracach mam strategię opartą na kafelkach 2D. Wędruję, jak poradzić sobie z relacją między mapą a jednostkami na mapie.
Biorąc pod uwagę współrzędne kafelków, będę musiał móc postawić na nim jednostkę, jeśli taka istnieje. W tym samym czasie, jeśli otrzymam jednostkę, będę chciał uzyskać współrzędną jednostki.
Widziałem dwa rozwiązania tego. Pierwszym rozwiązaniem byłoby, aby jednostki zapisywały współrzędne, a odniesienia do jednostek mapy zapisywały na swoich kafelkach. Stwarza to cykliczną zależność między mapą a jednostkami. Muszę się upewnić, że mapa dowolnej jednostki będzie zsynchronizowana, jeśli jednostka się poruszy.
Drugim rozwiązaniem byłoby śledzenie współrzędnych tylko przez jednostki. Aby stwierdzić, czy kafelek zawiera jednostkę i uzyskać tę jednostkę, przejrzałbym cały zestaw jednostek, które znajduję, z pasującymi współrzędnymi. Otrzymują one cykliczną zależność, ale tracą właściwość O (1), jaką miało pierwsze rozwiązanie do wyszukiwania jednostek z mapy. Może się to sumować, ponieważ chcę móc regularnie skanować mapę w poszukiwaniu takich rzeczy, jak znalezienie ścieżki, określenie zasięgu ruchu i znalezienie prawidłowych celów dla danej jednostki.
Nie mogę też po prostu przechowywać jednostek na mapie (czy mogę?). Jednostki są powiązane z „armiami”, zarówno graczami, jak i AI. Armia powinna mieć łatwy dostęp i iterację wszystkich swoich jednostek.
Ponieważ wydaje się, że jest to częsty problem w grach strategicznych, czy istnieją jakieś inne wzorce oprócz dwóch opisanych przeze mnie do zarządzania relacjami między jednostkami a mapami?
Cóż, chyba że masz kilka tysięcy jednostek na gracza, nie martwię się o użycie pamięci i skorzystam z pierwszego rozwiązania. Wydaje się, że pamięć jest tańsza niż procesor.
W rzeczywistości, nawet jeśli masz 4000 jednostek na gracza, używając dwóch liczb całkowitych do przechowywania tam lokalizacji, i 8 graczy, co zajmuje tylko 2 MB, ale przy pierwszym rozwiązaniu możesz użyć koordynatora O (1) zamiast O (n) (przy założeniu nieposortowane), co przy dużej liczbie jednostek może być powolne.
Większość gier wydaje się być oparta na pikselach, a nie na kafelkach, teraz już kilka dni, więc muszą tylko zdobyć jednostkę do przechowywania ko-zamówień.
źródło