(* ===================================================== *)
(* Apprentissage de la programmation avec OCaml *)
(* Catherine Dubois & Valérie Ménissier-Morain *)
(* Éditions Hermès Sciences *)
(* Mars 2004 *)
(* ===================================================== *)
(* Fichier MLSRC/CC/CC_aide/evenements.ml *)
(* ===================================================== *)
open Graphics;;
open Representation;;
open Circuits;;
open Affichage_base;;
open Affichage_jeu;;
open Suggestion;;
open Action;;
open Backtrack;;
let écrire_centré_fenêtre haut s =
let (w,h)= text_size s in
moveto ((size_x()-w)/2) (haut-h/2);
draw_string s;;
let attente_niveau_suivant () =
clear_graph ();
let s1 = "POUR PASSER AU NIVEAU SUIVANT"
and s2 = "APPUYER SUR UNE TOUCHE" in
set_font "-*-helvetica-bold-r-*-*-24-*";
let (_,h1)=text_size s1 in
écrire_centré_fenêtre (2*h1+((size_y()-3*h1)/2)) s1;
écrire_centré_fenêtre ((size_y()-3*h1)/2) s2;
read_key(); ();;
let niveau_maximum = 6;;
let réaction_clic mp =
let (c,l) = position_zone_de_jeu mp in
if position_pièce_zone_de_jeu_valide (c, l)
then
match état.sélection with
| None -> sélectionner (c,l)
| Some (c',l') ->
if (c',l') = (c,l)
then désélectionner (c,l)
else éliminer (c,l) (c',l');;
let gestion_événements_joueur () =
let s = wait_next_event [Key_pressed; Button_down] in
if s.button
then réaction_clic (s.mouse_x,s.mouse_y)
else (* touche frappée *)
match s.key with
| 'q' -> exit 0
| 's' -> suggestion ()
| 'b' -> étape_backtrack ()
| _ -> ();;
let jeu () =
Random.self_init ();
état.sélection <- None;
état.niveau <- 0;
open_graph "";
set_window_title "Court circuit";
while état.niveau < niveau_maximum do
état.niveau <- état.niveau+1;
état.historique <- [];
nouvelle_zone_de_jeu ();
clear_graph ();
dessiner_zone_de_jeu ();
dessiner_cartouche ();
while not (zone_de_jeu_vide ()) do
gestion_événements_joueur ()
done;
if état.niveau < niveau_maximum
then attente_niveau_suivant();
done;
exit 0;;
jeu();;
Ce document a été traduit de LATEX par
HEVEA.