Napisałem coś podobnego do tego, czego szukasz dla automatycznego klona Civilization 1 w stylu wygaszacza ekranu. Dla przypomnienia, napisałem to na VB.net, ale ponieważ nie wspominasz o języku ani platformie w swoim pytaniu, zatrzymam to abstrakcyjne.
„Mapa” określa liczbę kontynentów, zróżnicowanie wielkości kontynentów (np. 1,0 utrzymywałoby wszystkie kontynenty o tym samym przybliżonym obszarze lądowym, a do 0,1 pozwoliłoby istnieć kontynentom z 1/10 masy największego kontynentu), maksymalny obszar lądowy (w procentach) do wygenerowania i centralne odchylenie względem ziemi. „Ziarno” jest rozmieszczone losowo po mapie dla każdego kontynentu, ważone w kierunku środka mapy zgodnie z centralnym nastawieniem (np. Niskie odchylenie powoduje, że rozproszone kontynenty są bardziej podobne do Ziemi, gdzie wysokie centralne odchylenie będzie bardziej przypominać Pangea). Następnie dla każdej iteracji wzrostu „nasiona” przypisują kafelki terenu zgodnie z algorytmem dystrybucji (więcej o tym później), aż do osiągnięcia maksymalnej powierzchni lądu.
Algorytm rozmieszczenia terenu może być tak precyzyjny, jak chcesz, ale znalazłem bardziej interesujące wyniki, stosując różne algorytmy genetyczne i rzucając kostką. „Gra w życie” Conwaya jest naprawdę łatwa do rozpoczęcia. Będziesz musiał dodać NIEKTÓRE globalnie świadome logiki, aby uniknąć wzajemnego zrastania się kontynentów, ale w większości przypadków same zajmują się sobą. Problem, który znalazłem w przypadku podejść opartych na bardziej fraktali (co było moim pierwszym zamysłem), polegał na tym, że wyniki albo wyglądały na zbyt wzorzyste, albo prowadziły do zbyt wielu scenariuszy wymagających zasad obejścia opartych na hacky, aby uzyskać wynik, który wciąż nie był wystarczająco dynamiczny. W zależności od używanego algorytmu możesz zastosować „rozmywanie” wyniku, aby wyeliminować takie rzeczy, jak obfite jednokwadratowe kafelki oceanu i linie brzegowe w kratkę. W przypadku pojawienia się czegoś w rodzaju kontynentu otoczonego przez kilka innych i nie mającego miejsca na rozwój, przenieś nasiona do nowego punktu na mapie i kontynuuj etapy wzrostu. Tak, może to oznaczać, że czasami kończy się na większej liczbie kontynentów niż planowano, ale jeśli naprawdę jest to coś, czego zdecydowanie nie chcesz, to innym sposobem na uniknięcie tego jest odchylenie algorytmów wzrostu, tak aby faworyzowały wzrost w kierunku, w którym najmniej blisko do innych. posiew. W najgorszym przypadku (w każdym razie moim zdaniem) możesz oznaczyć serię jako nieważną, gdy ziarno nie ma już miejsca na wzrost i wygenerowanie nowej mapy. Po prostu upewnij się, że ustawiłeś maksymalną liczbę prób, więc jeśli określono coś nierealistycznego (np. Dopasowanie 50 kontynentów o parzystej wadze na planszy 10x10), nie spędza wieczności na próbach znalezienia prawidłowego rozwiązania.
Nie mogę ręczyć za to, jak robi to Civ itp. I oczywiście nie obejmuje takich rzeczy, jak klimat, wiek lądowy itp., Ale bawiąc się algorytmem wzrostu nasion, można uzyskać całkiem interesujące wyniki, które przypominają kontynenty, archipelagi itp. zastosuj to samo podejście do produkcji rzek, pasm górskich, które wyglądają na „organiczne”.