Random Dungeon Generationscript - wer findet den Fehler?

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

  • Random Dungeon Generationscript - wer findet den Fehler?

    Hallihallo, ich habe ein Script gecodet, dass ein zufälliges dungeon aus mehreren, unterschiedlich großen Räumen generiert. (Durchgänge fehlen noch) Wenn es so funzt wie gewollt ensteht sowas:



    Aber manchmal kommt es vor, dass sich mehrere Räumer überlappen, was nicht sein darf. Sieht z.B. so aus:



    Mein Code sieht wie folgt aus:

    GML-Quellcode

    1. // Variablen die benötigt werden
    2. r = 1;
    3. richtung[r] = 0;
    4. raum_width[r] = 8;
    5. raum_height[r] = 8;
    6. raum_x[r] = room_width/2 - raum_width[r]*16;
    7. raum_y[r] = room_height/2 - raum_height[r]*16;
    8. // die Wände des ersten Raumes werden erstellt
    9. for (i=0; i<=raum_width[r]; i+=1)
    10. {
    11. instance_create(raum_x[r]+i*32,raum_y[r]-16,wall_hori);
    12. instance_create(raum_x[r]+i*32,raum_y[r]+raum_height[r]*32+16,wall_hori);
    13. }
    14. for (i=0; i<=raum_height[r]; i+=1)
    15. {
    16. instance_create(raum_x[r]-16,raum_y[r]+i*32,wall_verti);
    17. instance_create(raum_x[r]+raum_width[r]*32+16,raum_y[r]+i*32,wall_verti);
    18. }
    19. // weiteres 11 Räume werden erstellt
    20. for (r=2; r<=12; r+=1)
    21. {
    22. randomize();
    23. // jeder Raum hat eine zufällige Größe
    24. raum_width[r] = choose(4,8,12,16);
    25. raum_height[r] = raum_width[r];
    26. // nun wird der Ort bestimmt wo der nächste Raum platziert wird vom vorherigen Raum aus gesehen
    27. richtung[r] = choose(1,2,3,4);
    28. repeat(32) // je höher die Zahl ist desto unwahrscheinlicher ist es, dass eine Richtung übrig bleibt die nicht sein darf
    29. {
    30. if richtung[r] = 1
    31. {
    32. raum_x[r] = raum_x[r-1] - 48-raum_width[r]*32;
    33. raum_y[r] = raum_y[r-1];
    34. // es wird geprüft ob der neue Raum sich dort mit einem anderen überschneiden würde
    35. if collision_rectangle(raum_x[r],raum_y[r],raum_x[r]+raum_width[r]*32+1,raum_y[r]+raum_height[r]*32+1,wall_par,true,false)
    36. {
    37. richtung[r] = 2;
    38. }
    39. }
    40. if richtung[r] = 2
    41. {
    42. raum_x[r] = raum_x[r-1] + 48 + raum_width[r-1]*32;
    43. raum_y[r] = raum_y[r-1];
    44. // es wird geprüft ob der neue Raum sich dort mit einem anderen überschneiden würde
    45. if collision_rectangle(raum_x[r],raum_y[r],raum_x[r]+raum_width[r]*32+1,raum_y[r]+raum_height[r]*32+1,wall_par,true,false)
    46. {
    47. richtung[r] = 3;
    48. }
    49. }
    50. if richtung[r] = 3
    51. {
    52. raum_x[r] = raum_x[r-1];
    53. raum_y[r] = raum_y[r-1] - 48 - raum_height[r]*32;
    54. // es wird geprüft ob der neue Raum sich dort mit einem anderen überschneiden würde
    55. if collision_rectangle(raum_x[r],raum_y[r],raum_x[r]+raum_width[r]*32+1,raum_y[r]+raum_height[r]*32+1,wall_par,true,false)
    56. {
    57. richtung[r] = 4;
    58. }
    59. }
    60. if richtung[r] = 4
    61. {
    62. raum_x[r] = raum_x[r-1];
    63. raum_y[r] = raum_y[r-1] + 48 + raum_height[r-1]*32;
    64. // es wird geprüft ob der neue Raum sich dort mit einem anderen überschneiden würde
    65. if collision_rectangle(raum_x[r],raum_y[r],raum_x[r]+raum_width[r]*32+1,raum_y[r]+raum_height[r]*32+1,wall_par,true,false)
    66. {
    67. richtung[r] = choose(1,2,3);
    68. }
    69. }
    70. }
    71. // der Raum der an der Reihe ist wird erstellt
    72. for (i=0; i<=raum_width[r]; i+=1)
    73. {
    74. instance_create(raum_x[r]+i*32,raum_y[r]-16,wall_hori);
    75. instance_create(raum_x[r]+i*32,raum_y[r]+raum_height[r]*32+16,wall_hori);
    76. }
    77. for (i=0; i<=raum_height[r]; i+=1)
    78. {
    79. instance_create(raum_x[r]-16,raum_y[r]+i*32,wall_verti);
    80. instance_create(raum_x[r]+raum_width[r]*32+16,raum_y[r]+i*32,wall_verti);
    81. }
    82. }
    Alles anzeigen



    Wer findet meinen Denkfehler? Warum überlappen sich manchmal Räume? Ich guck mir den Code schon ewig an und die Zeichen verschwimmen schon vor meinen Augen. :)