ich bastele gerade an einem kleinen 2D-Spiel. Für die Welt nutze ich eine tilebasierte 2D-Karte, die aus 32x32 großen Tiles besteht und 32x24 bis 2048x2048 Tiles groß sein kann. Ich möchte nun einen Algorithmus einbauen mit dem Zufallskarten erstellt werden. Ich habe einige Regeln (bestimmte Terraintypen dürfen nur an bestimmte andere grenzen usw). Außerdem soll das ganze einen Inselstil haben, sprich Wasser ist meist außen und Landmassen im Zentrum bzw. bei mehreren Inseln dann halt Landmassen. Auch auf den Inseln möchte ich eine gewisse Clusterung erzeugen (Berge, Grasflächen, Süßwasserseen, vielleicht sogar Flüsse).
Mir geht es hier nicht darum einen fertigen Algorithmus zu bekommen, sondern eher um prinzipielle Ideen wie man da ran gehen kann. Oder vielleicht gibt es ja auch schon Algorithmen um zum Beispiel effektiv eine Clusterung zu bewirken.
Für die Generierung kann man über bestimmte Parameter die prozentuale Anzahl der Terraintypen vorgeben (z.B. ein Parameter "Inseln" der steuert wieviel Landmasse es gibt usw).
Mein erster Versuch hat in einem großen Switch-Block die möglichen Terraintypen für alle 4 Nachbartiles eines Tiles bestimmt und zufällig einen ausgewählt. Das ganze dann rekursiv bis die ganze Map befüllt ist. Da Berge und Wasser sehr strenge Regeln haben (Wasser kann nur an anderes Wasser oder Strand grenzen, Berge können nur an andere Berge und Grasland grenzen) bzw. nur wenige Möglichkeiten für Alternativen bieten, sind diese Teile schon recht ansehnlich. Beim Rest ist noch alles ziemlich kunterbunt. Außerdem kann ich durch die Rekursion nicht immer ausschließen, dass ungültige Terrain-Kombinationen entstehen. Wenn das letzte zu füllende Tile an 4 Tiles angrenzt, die kein Terrain ermöglichen (z.B. eine Seite Wasser und eine Seite Berg) dann hab ich auch ein Problem.
Prinzipiell müsste ich also weiter vorausschauen und die Clusterung könnte man eventuell durch eine Gewichtung erreichen. Aber ich wollte erstmal hier fragen. Vielleicht habt ihr ja ein paar gute ideen.
Hier mal ein Ausschnitt wie es zur Zeit aussieht:

Bitte nicht an der Optik stören. Das Ganze steckt noch in einer sehr frühen Prototyp-Phase. ;) Mir geht es erstmal um die Funktionalität.
Was man im Bild auch noch gut sieht sind die Bereiche rechts wo Strand und Meerwasser zusammen mitten in der Insel vorkommen, da Strand natürlich neben Grasland liegen kann usw. Ich muss hier also irgendwie besser Aussagen treffen können wo sich ein Tile befindet (bezogen auf eine Insel zum Beispiel).