Я написал что-то похожее на то, что вам нужно для автоматического клона Civilization 1. Для записи я написал это на VB.net, но поскольку вы ничего не упоминаете о языке или платформе в своем вопросе, я сохраню это абстрактно.
«Карта» указывает количество континентов, разницу в размерах континентов (например, 1.0 сохранит все континенты с одинаковой приблизительной площадью суши, уменьшение до 0,1 позволит континентам существовать с 1/10 массы самого большого континента), максимальную площадь суши (в процентах) для генерации и центрального смещения земли. «Семя» случайным образом распределяется по карте для каждого континента, взвешенное по направлению к центру карты в соответствии с центральным смещением (например, низкое смещение создает распределенные континенты, более похожие на Землю, тогда как высокое центральное смещение будет больше напоминать Пангея). Затем для каждой итерации роста «семена» назначают тайлы земли в соответствии с алгоритмом распределения (подробнее об этом позже), пока не будет достигнута максимальная площадь земли.
Алгоритм распределения земли может быть сколь угодно точным, но я нашел более интересные результаты, применяя различные генетические алгоритмы и бросая кости. «Игру жизни» Конвея действительно легко начать. Вам нужно будет добавить НЕКОТОРУЮ глобальную логику, чтобы избежать врастания континентов друг в друга, но по большей части вещи сами о себе позаботятся. Проблема, которую я обнаружил с более фрактальными подходами (что было моим первым желанием), заключалась в том, что результаты либо выглядели слишком шаблонно, либо приводили к слишком большому количеству сценариев, требующих хакерских обходных правил для получения результата, который все еще не казался достаточно динамичным. В зависимости от используемого алгоритма вы можете применить «размытие» к результату, чтобы исключить такие вещи, как обильные одноквадратные плитки океана и клетчатые береговые линии. В случае появления чего-то вроде континента в окружении нескольких других, которому некуда больше расти, переместите семя в новую точку на карте и продолжите прохождение роста. Да, это может означать, что иногда у вас оказывается больше континентов, чем планировалось, но если это действительно то, чего вы категорически не хотите, тогда еще один способ помочь избежать этого - смещать алгоритмы роста, чтобы они поддерживали рост в направлении с наименьшей близостью к другим. семена. В худшем случае (во всяком случае, на мой взгляд) вы можете пометить серию как недействительную, когда семени некуда расти и создать новую карту. Просто убедитесь, что вы установили максимальное количество попыток, чтобы, если указано что-то нереалистичное (например, уместить 50 равновзвешенных континентов на доске 10x10), он не тратит вечно на попытки найти правильное решение.
Я не могу поручиться за то, как это делают Civ и т. Д., И, конечно, не касается таких вещей, как климат, возраст земли и т. Д., Но, играя с алгоритмом роста семян, вы можете получить довольно интересные результаты, которые напоминают континенты, архипелаги и т. Д. используйте тот же подход для создания «органических» рек, горных хребтов и т. д.