generowanie map kosmicznych

Sep 10 2020

Jestem na początku tworzenia przestrzeni 4x i przede wszystkim muszę wygenerować galaktykę gwiazd połączonych liniami łączącymi, które zmieniają się w każdej nowej grze, dodam kilka zdjęć, aby pokazać, czego chcę

Jak więc mogę mieć prostą mapę 2d z połączonymi punktami, takimi jak te obrazy? Pomyślałem o zaprogramowaniu każdej linii z losową długością i przypadkowym kątem lub zaprogramowaniu wielokątów przez wielokąty, ale nadal jest to niejasne.

Odpowiedzi

4 DMGregory Sep 11 2020 at 12:13

Możesz rozrzucać punkty za pomocą ...

  • jednolite losowe współrzędne (podatne na nierówne skupienia i luki)

  • lub potrząśnięta lub drżąca siatka, w której zaczynasz od regularnej siatki punktów, a następnie dodajesz do każdego mały losowy offset (zapobiega powstawaniu dużych luk / klastrów, ale może ujawnić jego strukturę)

  • lub rozkład Poissona ( kilka sprytnych algorytmów do generowania tego można znaleźć tutaj )

Red Blob Games ma stronę, która pozwala ci grać z różnymi rozchwianymi rozkładami siatki w porównaniu z rozkładami Poissona, aby poznać kompromisy w tych algorytmach.

Jeśli okaże się, że wynik jest zbyt nierówny, możesz utworzyć diagram Woronoja swoich punktów - generując wypukły wielokąt, który jest bliżej każdego punktu niż jakikolwiek inny - i przesunąć każdy z punktów w kierunku środka ciężkości jego wielokąta. To zwykle trochę uśrednia odstępy, zachowując przy tym organiczne elementy.

Jeśli okaże się, że wynik jest zbyt równy, możesz losowo usunąć niektóre punkty, aby wprowadzić luki, lub losowo wstawić kilka ze słabszymi kryteriami odstępów, aby utworzyć skupienia.

Możesz także zmieniać odstępy między próbkami siatki lub próbek Poissona w oparciu o mapę gęstości, którą najpierw generujesz za pomocą szumu.

Teraz do połączeń:

Aby upewnić się, że wszystkie gwiazdy są podłączone do sieci, więc nie możesz mieć wyspy niedostępnej z reszty galaktyki, możesz użyć algorytmu drzewa opinającego.

Minimalne drzewo rozpinające daje szkielet konstelacji, który dotyka wszystkie gwiazdy, wykorzystując najkrótsze łącza może. Następnie rozwiniemy się na tej podstawie, nie naruszając gwarancji łączności.

  • Jeśli używasz algorytmu Prim (który dodaje linki jeden po drugim), możesz dodać kilka dodatkowych łączy po zakończeniu algorytmu, aby utworzyć cykle i alternatywne ścieżki.

  • Jeśli używasz algorytmu Kruskala (który zaczyna się od gęstego wykresu i usuwa linki jeden po drugim), możesz zatrzymać algorytm wcześniej, zanim usunie więcej niż x% zbędnych linków, lub dać mu prawdopodobieństwo zachowania zbędnych linków. idzie.