Path durch ein ds_grid erstellen

  • GM 8

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

  • Path durch ein ds_grid erstellen

    Heyho ich bastle gerade an einem map generator und bin auf ein Problem gestoßen wo ich einen denkanstoß brauche,

    erstmal vorweg, ich teile meine map in ein raster auf, (50*50) pro rasterblock, und packe dieses dann in ein ds_grid wobei verschiedene zahlen die da erzeugt werden am ende für verschiedene objekte stehen. soweit ganz grob zu meiner voergehensweise.

    nun erzeuge ich ein start und ein ziel objekt und möchte dazwischen eine art weg bilden, der aber einen zufälligen verlauf hat, also nicht dierekt auf kürzestem weg von a nach b verläuft.
    kennt da jemand grundsetzlich einen ansatz wie man sowas macht? :heul:

    gruß prayer
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • der weg darf sich ruhig selbst schneiden, und ja er soll komplett zufällig sein. Er muss halt nur start und ziel miteinander verbinden und das halt so, das er nicht eine einheit breit ist sondern 4-6 einheiten breit ist. is doof zu erklären
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • Oh, er muss auch noch mehrere Felder im Gitter breit sein?
    Wie willst du das denn genau darstellen?
    Wenn du das Pfad-System im Game Maker benutzen willst hat dieses ja keine Breite sondern verbindet Punkte... Man könnte dann einfach sagen dass jeweils 3 Punkte links und drei rechts davon ebenfalls zum "Pfad" gehören.
    Aber wie soll das Ergebnis denn vorliegen? Ein array aus allen Koordinaten im Gitter? Ein GM Pfad?

    Oder was willst du überhaupt machen? eine zufallsgenerierte TowerDefense map?

    Sorry für dir vielen Fargen.. aber dieses Problem ist etwas ungenau formuliert.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • ja es geht um die erzeugung einer zufallsgeneriten td map. am ende möchte ich über ds_grid ein 2D- array haben. indem eine map generiert mit zahlen ist. die ich danach außlesen und in tiles und objekte umwandeln kann.

    für ein einfaches 4 eckiges feld, was bestimmten regelen folgt bekomm ich das auch schon gut hin.

    jetzt möchte ich aber noch gern so eine art weg machen die start und ziel irgendwie zufällig miteinander verbindet. als anderen Landschaftstyp sozusagen. ich weiß jetzt aber nicht genau wie man an die berechnung des weges herrangeht ;(


    im prinzip erzeuge ich 2 ebenen.

    die erste ebene ist der untergrund ein zufälliger weg zwischen start und ziel, KEIN path, es geht nur um den freien Raum.
    die zweite ebene ist sozusagen die begrenzung des spielfeldes.

    das ganze kann man sich so vorstellen wie eine schlucht, die erste ebene ist der weg durch die schulcht, wo die ceeps laufen und die türme stehn. die zweite ebende ist das terrain drumrum das als abgrenzung dient. werd morgen mal ein kleines bildchen hochladen ich glaub dann wirds deutlicher.

    tut mit leid für die schwammige umschreibung:(
    Mein aktuelles Projekt: Twiggels Tower Defence :para: :shifty:
    Mittlerweile: Green and Grey
  • Okey, glaube ich habs verstaanden.. wobei du meine Frage noch nciht zu 100% beantwortet hast. WIE soll das Ergebnis vorliegen? Ein ds_grid ja, aber was für Zahlen meinst du?
    Naja ich geh im Folgenden mal aus dass die Zahl 1 gleichbedeutend ist mit blockiertes Quadrat und die Zahl 0 mit einem Quadrat auf dem Weg.

    Auf jeden fall würden dir horizontale und vertikale Weg-Stücke denn reichen?
    Schrägen würden nämlich einigs mehr an Mathematik erfordern.
    Für horizontale und vertikale "Linien" im Gitter gibt es zufällig schon im Game Maker.

    Nun wird das Gitter erstmal mit einsen gefüllt damit man eine Basis hat.
    Zunächst brauchst du zwei Variablen (xx und yy) die zum Anfang die Koordinaten des Startpunktes im Gitter besitzen.

    Vom Startl aus wird nun nach einem simulierenden Plan Felder auf 0 gesetzt.
    Dazu erstmal per Zufall eine Zahl aussuchen, z.B.

    GML-Quellcode

    1. length = irandom_range(4,10);

    Und noch eine zweite Zahl die entscheidet in welche Richtung die nächste Linie (wegstrecke) gehen soll. Diese Zahl muss zwischen 0 und 3 sein wobei z.B. 0 nach rechts entspricht, 1 nach oben usw.

    So wurde dann der Code lauten der eine Wegstrecke nach rechts zeichnet (also wenn die richtunsgvariable 0 ergab):

    GML-Quellcode

    1. ds_grid_set_region(map_grid,xx,yy-3, xx + length ,y2+3,0);
    2. xx = xx + length;


    Die Zahl 3 gibt in dem Beispiel an wie breit dein Weg sein soll. Du kannst den natürlicha uch vom Zufall abhängig machen.
    xx muss dann auch verändert werden eben damit die nächste Wegstrecke vom ende der Vorherigen ausgeht.
    An dieser Stelle musst du auch eine Abfrage machen ob das Wegende grade auserhalb des SPielfeldes gekommen ist! In dem Fall muss xx bis an den Rand.

    DIesen ganzen Code-Block packst du dann am besten in eine Schleife die eine variable Anzahl mal wiederholt wird.
    Anschließend musst du dann nur noch den Punkt den der Weg erreicht hat mit dem Zielpunkt verbinden. Dazu erstmal eine horizontale und dann vertikale Wegstrecke einbauen die genau zum Ziel führt (jeweils mit der länge (ZIELXX- xx) und (ZIELYY - yy).

    Hoffe du verstehst das... glaube besser kann ichs nicht erklären... wenn du Fragen hast, frag sie bitte :)

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)