Zufällig generierte 2D-Map/World

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zufällig generierte 2D-Map/World

    Für mein aktuelles Projekt benötige ich eine effektive (und am besten nicht allzu extrem-komplizierte) Methode die Spielwelt zufällig generieren zu lassen. Wichtig dabei ist, dass man die Welt beim erneuten Spielen wieder laden kann. Ob nun durch eine externe (Ini?) Datei oder mit dem GM Speichersystem ist relativ egal.
    Besser wäre es vielleicht mit der Ini-Datei (falls ich Änderungen vornehme, dass die generierte Welt kompatibel bleibt), fall das überhaupt Sinn ergibt.

    Wichtig zu erwähnen wäre da noch, dass es sich um ein 2-Spieler-Split-Screen-Spiel handelt. Ich weiß nicht in wiefern da eine prozedurale Weltgenerierung möglich ist.

    Achja das Spiel ist 2D Topdown.

    Hat jemand Ideen und Anregungen wie man so eine komplexe Sache am besten angehen könnte?

    Edit: Ein wichtiges Detail noch. Ich würde gerne einen Generator entwickeln, mit dem sich auch gut größere Welten generieren lassen.^^

    Hoffe ihr versteht mich. Freu mich schon auf eure Antworten :thumbsup: .
  • Dazu müsstest Du genauer beschreiben, was alles in der Welt vorkommt (Burgen, Häuser, Bäume, Autos, Waffen, Gegner...)
    Ich hab noch einen rumliegen, der genau das macht. Er erstellt sogar zufällige Häuser, die immer anders aussehen.
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Cool. Also generiert werden müssten Länder (idealerweise Kontinente^^). Darin vorkommen würden Wiesen, Wälder, Wüsten, Steppen, Berge, Wasser und wenn das alles klappt noch generierte Flüsse.

    Aber cool, dass du es erwähnst, ich hatte nämlich auch vor gehabt Festungen/Lager zufällig generieren zu lassen. Und darin sollen dann auch die einzelnen Häuser zufällig generiert werden^^.

    Waffen, Autos und Gegner lasse ich denke ich lieber irgendwie um den Spieler herum spawnen, oder?

    Danke für deine Hilfe :) .
  • Also das klingt für mich etwas aufwendig; wenn Du mehrere Kontinente generieren lassen willst, mit Flüssen und Berge und Zeugs...

    Ich kann mir noch nicht genau vorstellen wie deine Welten dann aussehen sollten, aber beim Stichwort "Kontinente" musste ich sofort an die Anno-Serie denken. Da glaub ich, gibt es mehrere verschiedene "Vorlagen" von Inseln, die einfach zufällig zusammengewürfelt werden. Fürs 1503er gabs sogar einen fan-made Editor. Du könntest dann z.B. mehrere Größen von Kontinenten festlegen und für jede Größe ein paar verschiedene Vorlagen erstellen. Bei der Generierung der Map kannst Du dann zufällig einige der Vorlagen zusammenklauben...
    "Es gibt nie ein glückliches Ende, denn es endet nichts." - Schmendrick
  • Fürs erste wäre ich auch mit einem Land zufrieden^^. Also einfach eine große, generierte Fläche sozusagen.

    Ich überlege auch schon ob eine Echtzeit-Generierung Sinn machen würde. Dass also (zB) 3x3 Felder um die Spieler herum generiert wird. Dann wüsste ich aber wiederum nicht wie ich das alles speichern lassen kann. Ich kann ja schlecht die Koordinaten sämtlicher Objekte in einer .Ini-Datei abspeichern lassen, oder xD? Das wäre denke ich zu langsam.
  • Wieso willst Du das in einer .ini abspeichern? Normale Textfiles sind da besser. Und schneller.
    das mit bergen, kontinenten und flüssen ist eigenartig, denn ganze Kontinente wären ziemlich groß für eine normale Map.
    Es lässt sich aber sicher realisieren.
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Nunja, ich wollte Open World mal wörtlich nehmen :D.

    Sind Textfiles auch schneller als .Inis mit der Rini.dll? Aber im Prinzip speichert man einfach die Koordinaten sämtlicher Objekte ab, oder? Wäre dann jedes Tile (Wiese, Baum, Stein, Wasser..etc.) ein einzelnes Objekt?
  • Nunja, eine .ini würde auch mehr Speicherplatz brauchen.
    Ich hab mal ein Speichersystem für Maps mit .inis gemacht:

    GML-Quellcode

    1. for(xx=0;xx<map_length;xx+=1){
    2. for(yy=0;yy<map_height;yy+=1){
    3. ini_write_real("bla",string(xx)+"/"+string(yy),block_id[xx,yy])}} // speichert die block_id ab, sieht in der ini dann so aus: 12/32 = 5


    Am besten wäre es, noch ein paar Nullen vor die Zahlen zu hängen und sie als Strings abzuspeichern, da sonst lesefehler enstehen könnten.
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Danke das werde ich mir so erstmal in den Code einkommentieren, bis ich etwas habe, das ich abspeichern kann. In wiefern können Lesefehler entstehen?

    Optimal wäre es sämtliche Koordinaten der Objekte erst mit ds_map festlegen zu lassen und die Objekte je nach Spielerpositionen erst kreieren zu lassen, oder?