(* ===================================================== *)
(* Apprentissage de la programmation avec OCaml *)
(* Catherine Dubois & Valérie Ménissier-Morain *)
(* Éditions Hermès Sciences *)
(* Mars 2004 *)
(* ===================================================== *)
(* Fichier MLSRC/CC/CC_temps/action.ml *)
(* ===================================================== *)
open Outils;;
open Representation;;
open Circuits;;
open Graphics;;
open Affichage_base;;
open Affichage_jeu;;
open Backtrack;;
let position_zone_de_jeu (x, y) =
((x-espace_horizontal ())/(taille_pièce+espace_pièces)+bord_gauche,
(y-espace_vertical ())/(taille_pièce+espace_pièces)+bord_bas);;
let position_pièce_zone_de_jeu_valide (c, l) =
c >= état.zone_de_jeu.débutc && c <= état.zone_de_jeu.finc &&
l >= état.zone_de_jeu.débutl && l <= état.zone_de_jeu.finl &&
état.zone_de_jeu.tableau.(c).(l) <> Vide ;;
exception Non_vide;;
let zone_de_jeu_vide () =
try
for c = état.zone_de_jeu.débutc to état.zone_de_jeu.finc do
for l = état.zone_de_jeu.débutl to état.zone_de_jeu.finl do
if état.zone_de_jeu.tableau.(c).(l) <> Vide then raise Non_vide;
done;
done; true
with Non_vide -> false;;
let sélectionner (c,l)=
état.sélection <- Some (c,l);
dessiner_sélection (coordonnées_pièce (c,l));;
let désélectionner (c,l) =
état.sélection <- None;
dessiner_désélection (coordonnées_pièce (c,l));;
let éliminer (c,l) (c',l') =
dessiner_sélection (coordonnées_pièce (c,l));
let circ = circuit_valide (c,l) (c',l') in
if circ = []
then
begin
écrire_pas_de_circuit ();
dessiner_désélection (coordonnées_pièce (c,l))
end
else
begin
état.historique <-
{ pièce1 = (c,l);
pièce2 = (c',l');
couleur =
match état.zone_de_jeu.tableau.(c).(l) with
Occupée coul -> coul
}::état.historique;
dessiner_circuit circ;
sleep 0.1;
état.sélection <- None;
(* supprimer le couple de pièces graphiquement *)
effacer_circuit circ;
effacer_pièce_sélectionnée (c,l);
effacer_pièce_sélectionnée (c',l');
(* supprimer le couple de pièces en mémoire *)
état.zone_de_jeu.tableau.(c).(l) <- Vide;
état.zone_de_jeu.tableau.(c').(l') <- Vide;
end;;
Ce document a été traduit de LATEX par
HEVEA.