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:
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.

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
- // Variablen die benötigt werden
- r = 1;
- richtung[r] = 0;
- raum_width[r] = 8;
- raum_height[r] = 8;
- raum_x[r] = room_width/2 - raum_width[r]*16;
- raum_y[r] = room_height/2 - raum_height[r]*16;
- // die Wände des ersten Raumes werden erstellt
- for (i=0; i<=raum_width[r]; i+=1)
- {
- instance_create(raum_x[r]+i*32,raum_y[r]-16,wall_hori);
- instance_create(raum_x[r]+i*32,raum_y[r]+raum_height[r]*32+16,wall_hori);
- }
- for (i=0; i<=raum_height[r]; i+=1)
- {
- instance_create(raum_x[r]-16,raum_y[r]+i*32,wall_verti);
- instance_create(raum_x[r]+raum_width[r]*32+16,raum_y[r]+i*32,wall_verti);
- }
- // weiteres 11 Räume werden erstellt
- for (r=2; r<=12; r+=1)
- {
- randomize();
- // jeder Raum hat eine zufällige Größe
- raum_width[r] = choose(4,8,12,16);
- raum_height[r] = raum_width[r];
- // nun wird der Ort bestimmt wo der nächste Raum platziert wird vom vorherigen Raum aus gesehen
- richtung[r] = choose(1,2,3,4);
- repeat(32) // je höher die Zahl ist desto unwahrscheinlicher ist es, dass eine Richtung übrig bleibt die nicht sein darf
- {
- if richtung[r] = 1
- {
- raum_x[r] = raum_x[r-1] - 48-raum_width[r]*32;
- raum_y[r] = raum_y[r-1];
- // es wird geprüft ob der neue Raum sich dort mit einem anderen überschneiden würde
- 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)
- {
- richtung[r] = 2;
- }
- }
- if richtung[r] = 2
- {
- raum_x[r] = raum_x[r-1] + 48 + raum_width[r-1]*32;
- raum_y[r] = raum_y[r-1];
- // es wird geprüft ob der neue Raum sich dort mit einem anderen überschneiden würde
- 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)
- {
- richtung[r] = 3;
- }
- }
- if richtung[r] = 3
- {
- raum_x[r] = raum_x[r-1];
- raum_y[r] = raum_y[r-1] - 48 - raum_height[r]*32;
- // es wird geprüft ob der neue Raum sich dort mit einem anderen überschneiden würde
- 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)
- {
- richtung[r] = 4;
- }
- }
- if richtung[r] = 4
- {
- raum_x[r] = raum_x[r-1];
- raum_y[r] = raum_y[r-1] + 48 + raum_height[r-1]*32;
- // es wird geprüft ob der neue Raum sich dort mit einem anderen überschneiden würde
- 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)
- {
- richtung[r] = choose(1,2,3);
- }
- }
- }
- // der Raum der an der Reihe ist wird erstellt
- for (i=0; i<=raum_width[r]; i+=1)
- {
- instance_create(raum_x[r]+i*32,raum_y[r]-16,wall_hori);
- instance_create(raum_x[r]+i*32,raum_y[r]+raum_height[r]*32+16,wall_hori);
- }
- for (i=0; i<=raum_height[r]; i+=1)
- {
- instance_create(raum_x[r]-16,raum_y[r]+i*32,wall_verti);
- instance_create(raum_x[r]+raum_width[r]*32+16,raum_y[r]+i*32,wall_verti);
- }
- }
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.
