Autor Wątek: Przetwarzanie danych  (Przeczytany 842 razy)

Wine

  • Gość
# Marzec 06, 2010, 14:40:47
Witam,

Mam np. wektor obiektów jakiegoś typu. Każdy obiekt reprezentuje coś w grze - np. drzewo oraz posiada pozycję. Każdy gracz dajmy na to może zbudować sobie drwala który by te drzew ścinał na danym obszarze. O ile gracz może sobie sam pomyśleć gdzie zbudować drwala by ścinał jak najwięcej drzew o tyle komputer nie może stawiać budynków na oślep. Jak więc analizować (w rozsądnym czasie) tego typu dane? Sprawdzenie każdej konfiguracji (postawienie drwala w każdym miejscu i popatrzenie gdzie ma najwięcej drzew) nie będzie zbyt szybkie.

-W

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Furry

  • Użytkownik
    • DevBlog

# Marzec 06, 2010, 14:48:10
Najlepszym rozwiązaniem jest zrobić mapę zagospodarowania czyli: tworzysz mapę szer X wys typu bool i tam gdzie jest drzewo i zasięg tego drzewa wstawiasz 1 a tam gdzie możesz budować budynek masz 0. I teraz za każdym razem gdy komputer chce postawić budynek to przegląda tę tablicę w poszukiwaniu 0. Kiedy je znajduje buduje je w miejscu gdzie ono stoi.
Przykład:
110000
111100
001100
110000
110000
i teraz lecisz forem po tablicy po natknięciu się fora na 0 wywołujesz funkcję budowania na danej pozycji(w tym przypadku najbliżej jest[2][0]

Wine

  • Gość
# Marzec 06, 2010, 14:50:41
@Furry: Wiesz, chciałbym znaleźć najlepszą możliwą pozycję dla drwala... nie pierwszą lepszą a najlepszą.

-W

Offline Liosan

  • Moderator

# Marzec 06, 2010, 15:02:21
Olej najlepszą, poszukaj bardzo dobrej.

Nie wiem dokładnie jak działają drwale w Twojej grze, ale załóżmy że tak jak w Settlersach - czyli pewnie standardowo. Podziel sobie mapę na sektory (nie wiem, 10x10, powinny mieć wielkość porównywalną z połową promienia zasięgu drwala) - jeśli masz jakąś strukturę podziału przestrzeni używane do kolizji czy czegoś tam, np. sztywne sektory albo quadtree, możesz je wykorzystać. Zlicz ilość drzew w każdym sektorze, następnie w odrębnym przebiegu rozmyj te wartości - czyli ocena każdego sektora to ilość drzew w nim * 0.5 + suma drzew w sąsiednich sektorach * 0.25. Na podstawie tej oceny możesz wybrać najlepszy sektor. Następnie, w ramach sektora możesz zastosować jakiś podobny algorytm wyboru optymalnego pola.

Oczywiście, powinieneś do tego dorzucić wpływ obecności innych drwali (np. negatywnie modyfikować wartość funkcji oceny o stałą wartość, albo zależną od odległości) i odrzucać pola strategicznie nieopłacalne (np. za daleko od bazy/magazynu/żołnierzy).

Liosan