Zufällige Spiellandschaft erzeugen

Network

Top Contributor
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:"
scaled.php


"Klippig(optional):"
scaled.php


Vielen Dank
 

XHelp

Top Contributor
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.
 

Quaxli

Top Contributor
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

Top Contributor
Das "übliche" Verfahren für Bergiges hat XHelp schon beschrieben (man kann sich auch mal "Perlin Noise" ansehen, wenn's 3D sein soll :D ). "Klippig" ist schon deutlich schwieriger, weil man kaum vernünftige Kriterien definieren kann, damit nicht sowas entsteht wie
Code:
  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

Top Contributor
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

Top Contributor
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)


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. :)

...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:

... "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

Top Contributor
Liniengeschnipsel? Naja, dann muss man einen Linienschnipselvermeidungsalgorithmus implementieren :D 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 :)
 

Ähnliche Java Themen


Oben