Zufällig Zusammengesetzter Dungeon?

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

  • Zufällig Zusammengesetzter Dungeon?

    Guten Abend,
    Ich versuche meine Frage so gut erklärt wie möglich zu stellen, und hoffe einer von euch kann mir ein bisschen Helfen!

    Ich arbeite an einem 2D Dungeon Fighting Game, ich habe vor das Spiel mit zufällig generierten Dungeons ein bisschen interessanter zu gestalten. Ich möchte im Prinzip ein paar Dungeon Räume gestalten, die dann zufällig zu einem Großen Dungeon zusammengesetzt werden! Ich habe jedoch keinerlei Ahnung davon. Ich bin noch nicht sehr Erfahren in GML ich habe ein bisschen Ahnung, aber sowas habe ich noch nicht gemacht. Wie würdet ihr das ganze Programmieren? Hat einer eine Idee? Ich wäre für jede Idee bzw. Hilfe dankbar! :)
  • Gibt wie ich finde eine einfachere Lösung die ich selber verwende, du brauchst ein Objekt - nennen wir es mal oFloorPlacer -, welches du in deinem Raum platzieren musst.

    oFloorPlacer Create Event:

    GML-Quellcode

    1. ​floors_placed = 0
    2. dir = 1;
    3. randomize();
    4. xx = random_range(0, room_width);
    5. yy = random_range(0, room_height);
    6. // Grid
    7. x = 1000-(1000%32); // für größeres Grid die 32 erhöhen
    8. y = 1000-(1000%32); // für größeres Grid die 32 erhöhen
    9. xLeft = x;
    10. yUpper = y;
    11. xRight = 0;
    12. yLower = 0;
    13. repeat(800) // wenn du mehr Boden Teile in deinem Raum willst, die Zahl erhöhen
    14. {
    15. instance_create(x, y, DEIN BODEN OBJEKT);
    16. floors_placed++;
    17. dir = choose(1, 2, 3, 4, dir, dir, dir, dir);
    18. switch(dir) // gibt an in welcher Richtung der nächste Boden platziert werden soll
    19. {
    20. case 1:
    21. x += 32;
    22. break;
    23. case 2:
    24. y += 32;
    25. break;
    26. case 3:
    27. x -= 32;
    28. break;
    29. case 4:
    30. y -= 32;
    31. break;
    32. }
    33. // Abstände von Raumende einhalten
    34. if (x < 256) x = 256;
    35. if (x > room_width-288) x = room_width-288;
    36. if (y < 256) y = 256;
    37. if (y > room_height-288) y = room_height-288;
    38. if (x < xLeft) xLeft = x;
    39. if (x > xRight) xRight = x;
    40. if (y < yUpper) yUpper = y;
    41. if (y > yLower) yLower = y;
    42. }
    Alles anzeigen


    Nun brauchst du nur noch ein Boden Objekt mit einem 32x32 Sprite mit der Zentrierung auf 0, 0.

    Wenn du nun noch wissen möchtest, wie du passend Wände platzieren kannst, frag hier einfach nochmal nach ^^
    Es gibt 10 Arten von Menschen: Diejenigen, die Binärcode verstehen und die, die es nicht tun ^^
  • Meine momentane Lösung für die Mauern ist vielleicht nicht die beste, allerdings funktioniert sie und ich arbeite an einer schnelleren Methode.

    Du brauchst ein Objekt - bei mir heißt es oWallPlacer -, welches den Sprite der Maske deiner Hitbox verwendet.

    oWallPlacer Create Event:

    GML-Quellcode

    1. stopX = oFloorPlacer.xRight+64;
    2. stopY = oFloorPlacer.yLower+64;
    3. startX = x-32;
    4. room_speed = 300; // damit beschleunigst du alles, wie gesagt aber keine optimale Lösung


    oWallPlacer Step Event:

    GML-Quellcode

    1. target = instance_place(x, y, DEIN BODEN OBJEKT);
    2. if (instance_exists(target))
    3. {
    4. if (!place_meeting(x+32, y, DEIN BODEN OBJEKT)) instance_create(x+32, y, DEIN WAND OBJEKT);
    5. if (!place_meeting(x-32, y, DEIN BODEN OBJEKT)) instance_create(x-32, y, DEIN WAND OBJEKT);
    6. if (!place_meeting(x, y+32, DEIN BODEN OBJEKT)) instance_create(x, y+32, DEIN WAND OBJEKT);
    7. if (!place_meeting(x, y-32, DEIN BODEN OBJEKT)) instance_create(x, y-32, DEIN WAND OBJEKT);
    8. }
    9. if (x < startX) x = startX;
    10. if (x == stopX)
    11. {
    12. y += 32;
    13. x = 0;
    14. } else
    15. {
    16. x += 32;
    17. }
    18. if (y > stopY)
    19. {
    20. room_speed = 60;
    21. // Falls du sowas wie einen Ladebildschirm oder ähnliches einbaust, muss dieser hier zerstört werden
    22. instance_destroy();
    23. }
    Alles anzeigen


    Falls du sonst noch Fragen oder Probleme hast, lass es mich wissen ;)
    Es gibt 10 Arten von Menschen: Diejenigen, die Binärcode verstehen und die, die es nicht tun ^^