65 lines
1.7 KiB
Ada
65 lines
1.7 KiB
Ada
with Ada.Text_Io;
|
|
with Ada.Integer_Text_IO;
|
|
|
|
use Ada.Integer_Text_IO;
|
|
use Ada.Text_IO;
|
|
|
|
procedure Labyrinthe is
|
|
|
|
type Lab is array (Integer range <>, Integer range <>) of Character;
|
|
|
|
procedure Aff(L : Lab) is
|
|
begin
|
|
for I in L'Range(1) loop
|
|
for J in L'Range(2) loop
|
|
Put(L(I,J));
|
|
end loop;
|
|
New_Line;
|
|
end loop;
|
|
New_Line(2);
|
|
end Aff;
|
|
|
|
procedure Trouver_Sortie(L : in out Lab; X : Integer; Y : Integer) is
|
|
begin
|
|
if L(X,Y) = 'H' then
|
|
raise STORAGE_ERROR;
|
|
end if;
|
|
|
|
if X = L'First or Y = L'First or X = L'Last or Y = L'Last then
|
|
null;
|
|
else
|
|
if L(X+1,Y) = '.' then
|
|
Trouver_Sortie(L, X+1, Y);
|
|
elsif L(X,Y+1) = '.' then
|
|
Trouver_Sortie(L, X, Y+1);
|
|
elsif L(X-1,Y) = '.' then
|
|
Trouver_Sortie(L, X-1, Y);
|
|
elsif L(X,Y-1) = '.' then
|
|
Trouver_Sortie(L, X, Y-1);
|
|
end if;
|
|
end if;
|
|
L(X,Y) := '@';
|
|
Put_Line("(" & Integer'Image(X) & "; " & Integer'Image(Y) & ")");
|
|
Aff(L);
|
|
end Trouver_Sortie;
|
|
|
|
subtype Dim is Integer range 1..7;
|
|
Mon_Lab : Lab (Dim, Dim):= (('H','H','H','H','H','H','H'),
|
|
('H','.','.','.','.','.','H'),
|
|
('H','H','H','H','.','H','H'),
|
|
('H','.','.','.','.','H','H'),
|
|
('H','.','.','H','.','H','H'),
|
|
('H','.','.','.','.','.','H'),
|
|
('H','H','H','H','H','.','H'));
|
|
Numero_Ligne_Depart, Numero_Colonne_Depart : Dim;
|
|
Sortie_Trouvee : boolean := False;
|
|
begin
|
|
Aff(Mon_Lab);
|
|
put("Position initiale : ");
|
|
get(Numero_Ligne_Depart);
|
|
get(Numero_Colonne_Depart);
|
|
Trouver_Sortie(Mon_Lab, Numero_Ligne_Depart, Numero_Colonne_Depart);
|
|
|
|
exception
|
|
when STORAGE_ERROR => Put_Line("Le Labyrinthe n'a pas de sortie !");
|
|
end Labyrinthe;
|