I had an idea for map creation similar to the tectonic plates answer. It went something like this:
- sweep through the grid squares giving each square a "land" square if rnd <= 0.292 (the actual percentage of dry land on planet earth).
- Migrate each land chunk one square toward its nearest larger neighbour. If neighbours are equidistant, go toward the larger chunk. If chunks are equal size, choose one randomly.
- if two land squares touch, group them into a chunk, moving all squares as one from now on.
- repeat from step 2. Stop when all chunks are connected.
This is similar to how gravity works in a 3D space. It's pretty complicated. A simpler algorithm for your needs would work as follows:
- Drop in n starter land squares at random x,y positions and acceptable distances from each other. These are seeds for your continents. (Use the Pythagorean theorem to ensure the seeds have a minimum distance between themselves and all others.)
- spawn a land square from an existing land square in a random direction, if that direction is an ocean square.
- repeat step 2. Stop when land squares fill 30% of total map size.
- if continents are close enough to each other, drop in land bridges as desired to simulate a Panama type effect.
- Drop in smaller, random islands as desired for a more natural look.
- for each extra "island" square you add, cut out inland seas and lake squares from the continents using the same algorithm in reverse. This will maintain the land percentage at the desired amount.
Let me know how this works out. I've never tried it myself.
PS. I see this is similar to what you tried. Except it sets up all the seeds at once, before beginning, so the continents will be far enough apart and will stop when the map is sufficiently filled.