Генерация была написана для игры (rogue-like, 2D, вид сверху) на Unity и переведена на C#. Но тут представлена в изначальном варианте на Python, так мне было удобнее.
Принцип работы основан на делении ребер треугольника.
Сам принцип: Создаем поле 100х100 точек, определяем область генерации первой локации (10х10 в центре) и рандомно , с ограничениями, генерим 3 вершины треугольника. Определяем его центр и центры его граней. От центра в направлении каждой вершины и каждого центра грани проводим отрезки, формируя шестиугольник. И так создаем еще пару локаций увеличивая у каждой количество вершин в 2 раза. Мы отметили и запомнили все вершины будущего острова. Заполним его: начиная с самой большой локации "закрасим" периметры каждой и "зальем" их построчно. Готово!
Алгоритм при небольшой доработке позволит создавать карты разных размеров.