I was working some time ago on a 4X with an hexagonal map (not only made of hex tiles, but the overall shape was an hexagon rather than a rectangle, no wrap-around).
Using a noise function alone does not let you choose how many landmass you want to generate.
Using "wave function collapse"/constraint solvers is too slow for large maps when the amount of constraints increase (please don't put a mountain in the middle of the ocean, or a snow tile in the middle of a desert). My implementation took almost 8h to generate a single map, and the result was not even good.
In the end, I used a combination of multiple techniques:
- voronoi to split the map into regions
- use a noise function to make the regions boundaries a bit more natural
- fill the map with water tiles, place randomly some island seeds
- grow the islands from their seeds using a cellular automata
- to create continents, simply put a lot of island seeds in the same area, to generate a bigger one
- place mountains or rifts on region boundaries to simulate "tectonic plates"
- generate a heat map (influenced by position of the north/south poles and equator of the map), a humidity map (influenced by leftover ocean tiles), a height map (which is influenced by the already placed mountains/rifts) using a noise function
- using the previous heat/humidity/height maps, generate a wind map
- using the wind map, modify the humidity map (wind carries humidity over the land)
Then, choose randomly some tiles that fit some criteria to place biomes:
- desert on hot/dry land
- forest on temperate land
- swamp on temperate/wet land
- jungle on hot/wet land
- ...
Then a bunch of different cellular automata to grow the biomes naturally.
The result was quite nice, but it still wasn't on par to the map gen in Civilization games. I still want to continue this project, but I think in my heart I gave up.
EDIT: Some formatting because i always forget HN does not support markdown lists