(* ===================================================== *)
(* Apprentissage de la programmation avec OCaml *)
(* Catherine Dubois & Valérie Ménissier-Morain *)
(* Éditions Hermès Sciences *)
(* Mars 2004 *)
(* ===================================================== *)
(* Fichier MLSRC/CC/CC_base_modulaire/action.ml *)
(* ===================================================== *)
open Representation;;
open Circuits;;
open Graphics;;
open Affichage_base;;
open Affichage_jeu;;
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 >= débutc && c <= finc && l >= débutl && l <= finl &&
zone_de_jeu.(c).(l) <> Vide ;;
exception Non_vide;;
let zone_de_jeu_vide () =
try
for c = débutc to finc do
for l = débutl to finl do
if zone_de_jeu.(c).(l) <> Vide then raise Non_vide;
done;
done; true
with Non_vide -> false;;
let sélectionner (c,l) sélection =
sélection := Some (c,l);
dessiner_sélection (coordonnées_pièce (c,l));;
let désélectionner (c,l) sélection =
sélection := None;
dessiner_désélection (coordonnées_pièce (c,l));;
let éliminer (c,l) (c',l') sélection =
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
dessiner_circuit circ;
Unix.sleep 1;
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 *)
zone_de_jeu.(c).(l) <- Vide;
zone_de_jeu.(c').(l') <- Vide;
end;;
let coordonnées_clic () =
while not (button_down()) do () done;
while button_down() do () done;
position_zone_de_jeu (mouse_pos());;
Ce document a été traduit de LATEX par
HEVEA.