Map-Generator - wie programmieren?

  • bis jetzt entsteht meine map hauptsächlich durch zufall.
    ok, ein bisschen wird gesteuert, dass wälder, seen und berge zusammenhängend sind, aber wirklich beeinflussen kann ich das nicht.

    ich möchte nun einen map-generator machen, mit dem ich schön grosse seen (bzw. im foldenden beispiel wälder) machen kann.
    - figur nr. 1: mehr oder weniger rund: ist kein problem
    - figur nr. 2: mehr oder weniger rund mit "überhängen": erste probleme ^^
    - figur nr. 3: willkürliche form: grosses problemchen ^^

    bevor ich mir da gross nen kopf drüber mach, wie ich das coden soll, wollte ich einfach mal in die runde fragen, ob da schon wer erfahrung damit hat. gibts nen klugen algorithmus (wie bei der pfadfindung den A*) den man hierzu verwenden könnte?

  • wenn man nur eine map will, ist das sicher die beste variante.
    aber ich will ja jede runde eine neue map - ohne handarbeit ;)

    ich hab da ne idee, wie's gehen könnte...
    das wird jetzt richtig geometrielastig :baby:
    wenns tut, kannst auch mal damit spielen :D

    Einmal editiert, zuletzt von Flunsi (25. April 2007 um 16:13)

  • Was spricht dagegen, jede Runde eine neue Karte zu pinseln? Sehe das Problem nicht, die Runden sollen ja auch länger laufen. Im Prinzip kann man sowas sogar als einer Art Kontest laufen lassen, Motto: Wer malt die schönste Karte? ;)

  • Ich habe schon einmal so einen Map Generator programmiert für eine Weltkarte. Wenn ich an die Daten ran komme, kann ich euch das mal zeigen. Aber momentan sieht es nicht so gut bestellt damit aus, weil ich z.Z. nicht zuhause bin.

    Ich habe ein Spiel programmieren wollen, dass WebZiv heißt. Also Civilization 1 fürs Web. Jetzt mit der Web 2.0 Technologie würde so etwas viel mehr Sinn ergeben.

  • also einen normaler map-geni hab ich auch schon gemacht, aber ich hätte gern einen, bei dem ich recht genau definieren kann wie die map aussehen wird.

    ist das jetzt ein witz mit webziv? hast du lh schon mal angeschaut?
    das ist nämlich ein browsergame auf ziv1 basierend...
    was web2.0 angeht, bin ich nicht voreilig. erst die grundfunktionalität stabil laufen lassen - erst dann die sogenannten web2.0 gimmicks einbauen. wie zb. googlemap etc.

  • Zitat

    ist das jetzt ein witz mit webziv?


    Nein das ist ganz und gar kein Witz. Ich hatte wirklich ne Menge dazu schon programmiert.

    EDIT:
    Ich könnte euch wirklich den gewünschten Map-Generator programmieren! Aber dazu brauche ich die Zeit usw.

    Einmal editiert, zuletzt von trace (27. April 2007 um 16:08)

  • ich wäre schon zufrieden, wenn du mir das grobkonzept zu einem guten map-generator verrätst. ;)

    die idee von meinem neuen geni sage ich noch nicht, aber ich kann dir die idee von meinem alten geni verraten.
    ich verpixle einfach die ganze map per zufall. ist neben dem kommenden pixel bereits ein "wasser"-pixel, wird der zufall erhöht, dass der zu kommende pixel ebenfalls ein "wasser"-pixel wird.
    ist im detail natürlich noch weitaus komplizierter, aber das ist die grundidee.

  • kleine anregung (stichworte):

    lineare automaten
    planare automaten (zB oldfashioned Game of Life)
    (beliebig erweiterbar, komplexität steigt allerdings exponentiell)

    regelbasierte systeme sind auch nicht schlecht, oder gleich ein kleines neuronales netz? das nimmt dir ne menge arbeit ab ...

    :feuerteufel: rs longa vita bre:hoppel:is: Entia non sunt multiplicanda praeter necessitatem.

  • Also ich verrate mal mein Konzept, auch wenn es mir in diesem Moment ganz schöne Kopfschmerzen bereitet. Das meine ich ernst!

    Also ich habe ein Bild mit php generiert. Die Pixel werden in einer 2Dimensionalen Datenbank gespeichert.

    Es wird eine Linie generiert, die einmal von links nach rechts und in einer anderen Variante von oben nach unten geht.

    Diese Linie beginnt klein und es gibt eine Wahrscheinlichkeit der Wahrscheinlichkeit, ja so habe ich das programmiert, die sagt, dass die Linie nach einer Zeit fortwährend größer wird.

    Durch diese 2 Konzepte entsteht ein Teil von einem Kontinent.

    Diese Mini-Kontinente sind einigermaßen gleichmäßig verteilt auf der Karte, durch den Zufall des Zufalls einer gleichmäßigen Verteilung von festen Punkten, es ist nämlich eingeschränkter Zufall.

    Auf diese Art überlagern sich manchmal diese Mini-Kontinente und ergeben einen Kontinent.

    Das ganze habe ich dann als jpeg ausgegeben.

    Das ist aber nur das grundlegende Konzept. Dazu habe ich noch andere Wahrscheinlichkeiten der Wahrscheinlichkeit erstellt für Wüste, Wald usw.

    Noch Fragen?

    Einmal editiert, zuletzt von trace (29. April 2007 um 14:34)

  • wenn ich das richtig verstanden habe, kannst du damit aber auch keine überhängenden teile (wie oben wald2 und wald3) machen, oder?
    das gab dann wohl mehr wald1-ähnliche gebilde!?


    ok, meine neue idee kann ich auch verraten...
    aber bitte nicht klauen. ist nämlich (c)-protected. :D
    es ist eine art baumstruktur in alle richtungen. quasi ein baum von oben betrachtet. es gibt n äste die wiederum m vergabelungen haben.
    richtung, dicke und länge der äste wird mit gesteuertem zufall generiert.
    toll, oder? ^^

    @than: diese automaten sind mir zu kompliziert. und ich kann mir auch nicht vorstellen, dass man damit insel-artige gebilde von vordefinierter grösse erzeugen kann, wenn jeder pixel (automaten) für sich selber denkt.
    aber wie schon gesagt, dafür habe ich nicht die nötigen kenntnisse :schäm:

    3 Mal editiert, zuletzt von Flunsi (29. April 2007 um 16:30)

  • Zitat

    Original von Flunsi
    ok, meine neue idee kann ich auch verraten...
    aber bitte nicht klauen. ist nämlich (c)-protected. :D
    es ist eine art baumstruktur in alle richtungen. quasi ein baum von oben betrachtet. es gibt n äste die wiederum m vergabelungen haben.
    richtung, dicke und länge der äste wird mit gesteuertem zufall generiert.
    toll, oder? ^^

    irgendwie kommt mir das sehr bekannt vor ... es gibt sogar uralte bildschirmschoner, die schon mit genetischen algorithmen laufen ... *g*

    Zitat

    Original von Flunsi
    @than: diese automaten sind mir zu kompliziert. und ich kann mir auch nicht vorstellen, dass man damit insel-artige gebilde von vordefinierter grösse erzeugen kann, wenn jeder pixel (automaten) für sich selber denkt.
    aber wie schon gesagt, dafür habe ich nicht die nötigen kenntnisse :schäm:

    stichwort "Ameisen(haufen)"

    Durch das Zusammenwirken des Outputs vieler kleiner dummer Pixel ergibt sich was scheinbar Sinnvolles .... Schau dir mal im Netz Game of Life- Generatoren an und ein wenig Oberflächentheorie dazu, das ist erklärender als manche Informatik-Vorlesung

    :feuerteufel: rs longa vita bre:hoppel:is: Entia non sunt multiplicanda praeter necessitatem.

  • Also ich verstehe nicht, was mit Wald1 und Wald2 gemeint ist.

    Ich weiß nicht, ob ich das so programmiert habe, dass beim Erstellen der Map oder danach die Geländeeigenschaften hinzukommen, aber die sind auch mit gesteuertem Zufall des Zufalls gemacht worden.

  • so, der hauptteil ist nun fertig.
    wenn ich gewusst hätte, dass mich das soviel zeit kostet, hät ich es wohl sein lassen ;)
    boundary-fill und flood-fill algorithmus haben zwar gefunzt, hat jedoch nicht immer alles gefüllt.
    nun mach ich ein polygon und lass den scanline-algorithmus laufen - der tut :D


    ich definiere jetzt 80*80 felder als einheit.
    die komplette karte entsteht dann durch 5*5 solcher einheiten. (natürlich alle anders ^^)

    aber jede einheit hat nun einen grossen see, einen fluss, kleine und grosse wälder, kleine und grosse berge und sonstiges ^^

  • thx :D

    karte verschieben, rein- und raus zoomen wie man es von google-map kennt wird auch noch kommen. aber erst später ;)

    vorläufig bleibt die anzeige so wie es bisher war.
    kann nicht alles auf einmal ^^

  • thx ;)
    aber was meinst du genau mit inseln?
    die wald-, berg- und wasser-flecken?
    wenn es nur ganz grosse "flecken"/"inseln" gäbe, wäre es zwar schöner zum anschauen, aber sehr langweilg zum spielen.
    ein spieler hat vielleicht 2-3 sektoren als basis. diese muss er mit der zeit gut kennen. wäre doch langweilig wenn es nur ein wald und nur eine bergkette gäbe.
    und die ganz kleinen flecken habe ich wegen den taktischen möglichkeiten eingebaut.

    hier noch die weltkarte. ein feld ist 2*2 pixel.

    die grossen seen sollte ich vermutlich noch etwas mehr verstreuen. problem ist dann nur, dass nicht alle spieler an einen see angrenzen.

    kritik, verbesserungsvorschläge?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!