1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| //Genere le fichier .txt à l'oupout rentré, de dimension voulue.
procedure generer_lab(outpout:string;dim:integer);
var lab : t_gen;
dim_x,dim_y,dim_Finale:integer;
continue,rand,x1,x2,y1,y2,i,j:integer;
v1,v2,NbMurs:integer;
MH : t_gen;
MV : t_gen;
rendu : t_gen_final;
fichier:text;
begin
dim_x := dim;
dim_y := dim;
dim_Finale := 2*dim+1;
randomize;
NbMurs := 0;
//Initialisation des tableaux de murs
For i := 0 To dim_x-1 do
For j := 0 To dim_y-1 do
lab[i,j] := i * dim_y + j;
For i := 0 To dim_x-1 do
For j := 0 To dim_y-2 do
MH[i,j] := 1;
For i := 0 To dim_x-2 do
For j := 0 To dim_y-1 do
MV[i,j] := 1;
//On va maintenant enlever nos murs 1 par 1
While NbMurs <> ((dim_x*dim_y)-1) do
Begin
continue := 0;
rand := random(2)+1;
Case rand of
1:begin//Murs Horizontaux
x1 := random(dim_x);
y1 := random(dim_y-1);
If (MH[x1,y1] = 1) Then
begin
continue := 1;
x2 := x1;
y2 := y1 + 1 ;
end;
end;
2:begin//Murs Verticaux
x1 := random(dim_x-1);
y1 := random(dim_y);
If MV[x1,y1] = 1 Then
begin
continue := 1;
x2 := x1+1;
y2 := y1;
end;
end;
End;
If continue = 1 Then // (= Si un mur a été trouvé)
Begin
v1:=lab[x1,y1];
v2:=lab[x2,y2];
If v1 <> v2 Then
Begin
// On enlève le mur
Case rand of
1:
MH[x1][y1] := 0;
2:
MV[x1][y1] := 0;
End;
// On met la même valeur dans les cases de la chaîne
NettoieCellules(lab, x2, y2, dim_x, dim_y, v1, v2);
NbMurs := NbMurs+1;
End;
End;
End;
//Maintenant, on a 2 tableaux avec des murs horizontaux et verticaux, tres facile a utiliser.
//On doit cependant les traiter pour pouvoir creer notre tableaux de la forme souhaitée dans le TP.
//Et ce ne fut pas une partie de plaisir.
//On met des trous de partout
For i := 1 To dim_Finale do
For j := 1 To dim_Finale do
rendu[i,j]:=' ';
//On met des M sur la premiere et derniere ligne
For i := 1 to dim_Finale do
rendu[1,i]:= 'M';
For i := 1 to dim_Finale do
rendu[dim_Finale,i]:= 'M';
//On met des M sur la premiere colonne et derniere colonne.
For i := 1 to dim_Finale do
begin
rendu[i,1]:= 'M';
rendu[i,dim_Finale]:= 'M';
end;
// On met les murs la ou ils doivent etre en sachant que la dimension finale va etre multipliée par 2 puis additionée à 1.
For i := 0 To dim_x-2 do
Begin
For j := 0 To dim_y-1 do
If (MV[i,j] = 1) Then
Begin
rendu[2*(i+1)+1,j*2+1]:= 'M';
rendu[2*(i+1)+1,j*2+2]:= 'M';
rendu[2*(i+1)+1,j*2+3]:= 'M';
End;
End;
For i := 0 To dim_x-1 do
Begin
For j := 0 To dim_y-2 do
If (MH[i,j] = 1) Then
Begin
rendu[i*2+1,(j+1)*2+1]:= 'M';
rendu[i*2+2,(j+1)*2+1]:= 'M';
rendu[i*2+3,(j+1)*2+1]:= 'M';
End;
End;
//On met l'entrée et la sortie sur les cotés du labyrinthe ou on est sur qu'il n'y a aucun mur devant.
rendu[(random(dim_Finale div 2)+1)*2,1]:='E';
rendu[(random(dim_Finale div 2)+1)*2,dim_Finale]:='S';
//On ecrit le fichier
assign (fichier,outpout);
rewrite(fichier);
For i := 1 To dim_Finale do
Begin
For j := 1 To dim_Finale do
Write(fichier,rendu[i,j]);
Writeln(fichier,'');
End;
close(fichier);
End; |
Partager