I need a random map generator.
To be more specific, I need a land form generation function that accepts a width and a height and returns a 2-dimensional array that represents a somewhat realistic map containing "islands" of various sizes. The frequency of the islands should in some way be configurable, and islands should not all be the same size.
A UI is not needed, you can just return the array and print it to the console. The important part is the function and the algorithm(s) behind creating the map data.
The landforms should be of various sizes, but be clustered on the map in a manner that makes sense, and looks like a map. Many computer games generate random maps like this, so this is something that has been done many times before, I just don't know how to do this myself.
An island can consist of the following possible tiles:
* Grass tiles (standard land tiles, the most common.)
* Tree tiles (grouped together on some islands to create forests, or perhaps sometimes just a single tree if it looked okay.)
* Sand tiles (grouped together on some islands to create deserts, also lined thinly around the edges of some islands to create shores.)
* Mountain tiles (grouped together, similar to deserts and forests, to create mountain ranges. mountain ranges would have a different shape than forests and deserts, generally, in order to look like mountain ranges.)
* The Water tile is what every other tile on the map would be.
Those are the only possible tiles necessary, although I might pay more if you can convince me that adding more would improve the quality of the map generated.
The language you write this is in not important, as long as it is not relying on any language-specific features that could not be translated to another major language. I am interested in the concepts and algorithms behind how you do it.
Please be specific in your bid as to any experience you have had doing this sort of thing. I am willing to pay, but I have been burned on sites similar to this by people who bid for projects they do not have the time and/or ability to complete. I want somebody with a good math/compsci background, basically somebody who knows what they are doing, and will make this happen.
I may have an additional project or two, similarly related, for the personal who successfully completes this project for me.