let est_valide_plateau (mon_plateau:plateau) =
let (c, n, m, p) = (mon_plateau.c, mon_plateau.n, mon_plateau.m, mon_plateau.p) in
(** On vérifie d'abord qu'aucune des cases du tableau ne soit un 'None'. *) |
for i = 0 to (m-1) do
for j = 0 to (n-1) do
match p.(i).(j) with
| Some _ -> ();
| None -> raise Mauvais_tableau;
done;
done;
(** On vérifie d'abord horizontalement; *) |
for i = 0 to (m-2) do
for j = 0 to (n-1) do
match (p.(i).(j), p.(i+1).(j)) with
| Some x, Some y ->
if not(compatible_h ~pieceG:x ~pieceD:y ) then raise (Erreur_compatibilite_h(i, j));
(** Si le tableau contient un case sans piece attribuée, on déclenche 'Mauvais_tableau'; *) |
| _ -> raise Mauvais_tableau;
done;
done;
(** Puis verticalement. *) |
for i = 0 to (m-1) do
for j = 0 to (n-2) do
match (p.(i).(j), p.(i).(j+1)) with
| Some x, Some y ->
if not(compatible_v ~pieceB:x ~pieceH:y ) then raise (Erreur_compatibilite_v(i, j));
| _ -> raise Mauvais_tableau;
done;
done;
(** On use et on abuse des exceptions pour gérer des valeurs de retours spécifiques. *) |
raise Solution_trouvee;
()