Überlagerung der Räume bei einem Dungeon Generator verhindern



  • Hallo C-plusplus Forum,

    ich probiere nun seit 2 Tagen ein Dungeon Generator für ein Roguelike Spiel das ich programmiere zu erstellen.
    Mein Problem ist das sich die Räume trotz meiner Abfrage nach freiem Platz überlagern und ich finde meinen Fehler nicht warum dies geschiet.

    Zum Vorgang wie die Erstellung eines Raumes abläuft:
    1. Ich finde mir einen zufälligen Punkt X und Y in meinem 2d Array(ich werde das 2d Array von nun an Map nennen)

    2.Nun lasse ich mir eine zufällige length und width generieren für den Raum.

    3. diese addiere ich mit dem zufälligen X oder Y Wert in einem neuen integer um den maximal x und y wert zu haben.

    4. Danach gehe ich einmal um das durch X/y , maxX/y , X/maxY entstandene Viereck rum und schaue das über all wall (die durch # symbolisiert wird in der map) ist.

    5. wenn dies der fall ist soll das viereck ausgefüllt werden mit leerzeichen damit dann später der spieler hier laufen kann.

    Diese Fünf Schritte sollen solange ausgeführt werden bis die maximale Anzahl der Räume getroffen ist.

    So nun zu meinem Problem. Aus irgend einem mir nicht bekannten Grund werden Räume in einander generiert oder direkt neber einander generiert ohne eine lücke. Ich habe vieles probiert aber finde meinen denkfehler nicht 😞 um das Problem zu beseitigen.

    Hier ist der Code(leicht modifiziert das die Räume mit 1-8er ausgefüllt werden je nachdem welcher Raum gerade generiert wird und nach jeder generierung die map ausgegeben wird):

    Edit: Ich habe probiert den Code etwas lesbarer zu machen mit mehr absätzen und die unnötigen überbleibsel meiner Experimente an dem code entfernt.

    Hat sich erledigt habe es hinbekommen 🙂



  • Deine Schleifenbedingung ist Käse, du wiederholst nur, wenn alle 4 Ecken keine Wand sind.

    Es reicht aber sowieso nicht aus, nur die Ecken zu prüfen.



  • ich habe nun probiert mit einer ähnlichen Art wie ich den Raum aushöhle sicher zustellen das die felder wall sind aber dann bekomme ich nur einen weißen bildschirm.

    kann mir hier jemand bitte einen vorschlag machen wie ich das ganze hinbekomme? Ich stehe gerade übelst auf dem Schlauch!



  • floor=roomCounter+'1';
    

    Das macht deinen Code ein wenig lesbarer.


Anmelden zum Antworten