# Zufällige Spiellandschaft erzeugen



## Network (20. Okt 2010)

Hi Community,

Wie erzeugt man am besten für ein 2D Spiel eine Spiellandschaft, die Spiellandschaft soll nicht im Hintergrund sein, sondern auf ihr sollen Objekte stehen.

Die zufällige Spiellandschaft soll bergig aufgebaut sein, oder bzw. einfach eine Klippige Landschaft.
Ziel des Spieles soll nähmlich sein, eine Stadt zu bauen, die auf diesem unförmigen Bergigen, Klippigen gebiet stehen soll.
Sozusagen, wird in dem Spiel, die Natur zur Stadt umgewandelt.


Und jetzt suche ich halt nach einem effektiven Weg.
Um Bildlich zu machen, was ich mit "Bergig" und "Klippig" meine:
(Ich kann nicht mit der Maus zeichnen)

"Bergig:"






"Klippig(optional):"





Vielen Dank


----------



## XHelp (21. Okt 2010)

Eins der Verfahren ist z.B.:
eine horizintale Linie nehmen, den Mittelpunkt nach oben oder unten zu ziehen. Dadurch enstehen 2 Linien. Dann das gleiche mit jeder von den neuen Linien, so entstehen 4, usw usw.
Oder es werden Fraktale dafür verwendet.
Oder, oder, oder.

Ich habe irgendwo die Folien von einem Vortrag über Landschaftsmodellierung, ich versuche die morgen mal zu finden. Aber es gibt auch so im Internet oder Bibliothek bestimmt genügend Literatur diesbezüglich.


----------



## slawaweis (21. Okt 2010)

Network hat gesagt.:


> Und jetzt suche ich halt nach einem effektiven Weg.



Turtle graphics - Wikipedia, the free encyclopedia
Heightmap - Wikipedia, the free encyclopedia
Binary Space Partitioning ? Wikipedia

Slawa


----------



## Quaxli (21. Okt 2010)

Leider kann ich die Bilder hier nicht sehen (werden geblockt) daher kann ich nur raten, was gewünscht ist. 

Ich hab' mal für ein ganz simples Spiel (bzw. eigentlich mehr ein Versuch) einfach senkrechte Linien mit zufälliger Länge nebeneinander in ein Bild gemalt (der Einfachheit halber alles in Grün). (Dazu ein bißchen Logik hinsichtlich Mindest- und Maximalhöhe, sowie der Höhendifferenz von einer Linie zur anderen).
Über die so erzeugte primitive Landschaft sind dann Männchen "gelaufen". Diese Objekte hatten ein bißchen Logik im Bauch, die geprüft hat, ob analog zur Position der Objekte auf dem Bildschirm im Bild grüne Pixel "unter den Füßen" vorhanden sind. 
Das hat in dem sehr einfachen Konzept ganz gut funktioniert und wäre vielleicht ein Ansatz. Wie gesagt, weiß ich nicht genau, was Du willst, Da ich Deine Bilder nicht sehen kann.


----------



## Marco13 (21. Okt 2010)

Das "übliche" Verfahren für Bergiges hat XHelp schon beschrieben (man kann sich auch mal "Perlin Noise" ansehen, wenn's 3D sein soll  ). "Klippig" ist schon deutlich schwieriger, weil man kaum vernünftige Kriterien definieren kann, damit nicht sowas entsteht wie

```
XXXXXXXXXXXXXXXXX
  XXXXXXXXXXXXXXXXX  
  X  XXXXXXXXXXXXXX
  X  XXXXXXXXXXXXXX
  X
XXXXXXXXXXXXXXXXXXXXXXXXX
```
(als Gesteinsformation eben nicht so realistisch). Natürlich "geht" es, aber es ist aufwändig. Mein erster Gedanek wäre jetzt, bei dem von XHelp beschrieben Verfahren noch eine zufällige "Verdrehung" der Liniensegmente einzubauen, die bei jeder Iterationsstufe geringer wird :reflect:


----------



## Landei (21. Okt 2010)

Im 3D-Bereich nimmt man als High-Map meistens einfach ein Perlin Noise, was zufällig aussieht, sich aber gut parametrisieren läßt. Sowas ähnliches gibt es sicher auch für 2D...

[edit] ach, hat ja Marco schon erwähnt...


----------



## Network (22. Okt 2010)

XHelp hat gesagt.:


> Eins der Verfahren ist z.B.:
> eine horizintale Linie nehmen, den Mittelpunkt nach oben oder unten zu ziehen. Dadurch enstehen 2 Linien. Dann das gleiche mit jeder von den neuen Linien, so entstehen 4, usw usw.



Der Vorschlag gefällt mir .
-Mit Mittelpunkt nehmen meinst du wahrscheinlich, die letzten Koordinaten der Linie nehmen, eine neue hinzufügen die dann im Mittelpunkt steht.
(Das währe wohl gleichbedeutend mit 100 Linien nebeneinander, nächste Linie hat Startpunkt der ersten)



slawaweis hat gesagt.:


> Turtle graphics - Wikipedia, the free encyclopedia
> Heightmap - Wikipedia, the free encyclopedia
> Binary Space Partitioning ? Wikipedia
> 
> Slawa



Danke  Jedoch sind die ersten 2 doch für 3D Grafik, oder? Und das letzte ist normalerweise für statische Objekte. Hab ich nicht erwähnt aber die Landschaft wird sich während des spielens verändern. 



Quaxli hat gesagt.:


> ...einfach senkrechte Linien mit zufälliger Länge nebeneinander in ein Bild gemalt (der Einfachheit halber alles in Grün). (Dazu ein bißchen Logik hinsichtlich Mindest- und Maximalhöhe, sowie der Höhendifferenz von einer Linie zur anderen)...



Ja Danke, das ist so einfach und primitiv das es wieder genial ist.
Im Grunde würde es meiner Interpretation von HelpX Vorschlag übereinstimmen.

Problem: Entweder ist mein Rechner zu schnell... bzw. keine Ahnung wie genau (Zufalls)zahlen berechnet werden. Aber nach dem ersten vorzeichenwechsel, ändert sich leider nichts mehr, die Steigung bleibt konstant :bahnhof:



Marco13 hat gesagt.:


> ... "Klippig" ist schon deutlich schwieriger, weil man kaum vernünftige Kriterien definieren kann, damit nicht sowas entsteht wie...
> ...Mein erster Gedanek wäre jetzt, bei dem von XHelp beschrieben Verfahren noch eine zufällige "Verdrehung" der Liniensegmente einzubauen, die bei jeder Iterationsstufe geringer wird :reflect:



Ja das stimmt, aber bei den jetzigen Vorschlägen ist das möglich, und das ist eig. das einzige was ich zum Thema "Klippig" wissen wollte 

Durch eine zufällige Verdrehung der Liniensegmente, würde Liniengeschnipsel im Fenster entstehen 
Jedoch möglich wenn man beim Teilen einer Linie, eine 2. neue zeichnet, die der linken Linie entspricht.
Durch zusätzliche Parameter, könnten diese Linien bei Bedarf "ausgeklappt" werden. War jetzt mein Gedanke.


Also einfach mal Danke an Alle


----------



## Marco13 (22. Okt 2010)

Liniengeschnipsel? Naja, dann muss man einen Linienschnipselvermeidungsalgorithmus implementieren  Nee, im ernst, ich dachte an etwas, was (und ich hoffe das ist jetzt nicht zuuu meta-suggestiv) an eine Koch-Kurve ? Wikipedia angelehnt ist. Die ein bißchen zufällig durchkneten, dann hat man ja schon einen klippigen Berg


----------

