(* ===================================================== *)
(* Apprentissage de la programmation avec OCaml *)
(* Catherine Dubois & Valérie Ménissier-Morain *)
(* Éditions Hermès Sciences *)
(* Mars 2004 *)
(* ===================================================== *)
(* Fichier MLSRC/CC/CC_scores/representation.ml *)
(* ===================================================== *)
type case = Vide | Occupée of int;;
type sc_zone = {
tableau: case array array;
mutable colonnes: int;
mutable lignes: int;
mutable nb_colonnes: int;
mutable nb_lignes: int;
mutable débutc: int;
mutable finc: int;
mutable débutl: int;
mutable finl: int;
};;
type information = {
pièce1: int*int;
pièce2: int*int;
couleur: int
};;
type sc_état = {
mutable sélection: (int * int) option;
mutable niveau: int;
mutable zone_de_jeu: sc_zone;
mutable temps_référence: float;
mutable historique: information list;
mutable score: int
};;
let colonnes_of_niveau niveau = 4+2*(niveau/2);;
let lignes_of_niveau niveau = 2+niveau+(niveau mod 2);;
let nb_couleurs_of_niveau niveau = 4+2*niveau;;
let bord_gauche = 1
and bord_droit = 1
and bord_bas = 1
and bord_haut = 1;;
let état = {
sélection = None;
niveau = 1;
zone_de_jeu =
{ colonnes = 0;
lignes = 0;
débutc = 0;
finc = 0;
débutl = 0;
finl = 0;
nb_colonnes = 0;
nb_lignes = 0;
tableau = Array.make_matrix 0 0 Vide };
temps_référence = 0.0;
historique = [];
score = 0
};;
let création_tableau_ordonné () =
for j = état.zone_de_jeu.débutl to état.zone_de_jeu.finl do
let i = ref état.zone_de_jeu.débutc in
while !i <= état.zone_de_jeu.finc do
état.zone_de_jeu.tableau.(!i).(j) <-
Occupée (Random.int (nb_couleurs_of_niveau état.niveau));
état.zone_de_jeu.tableau.(!i+1).(j) <- état.zone_de_jeu.tableau.(!i).(j);
i := !i+2;
done;
done;;
let mélange_couleurs_tableau () =
for i = état.zone_de_jeu.débutc to état.zone_de_jeu.finc do
for j = état.zone_de_jeu.débutl to état.zone_de_jeu.finl do
let c = i+Random.int (état.zone_de_jeu.finc-i+1)
and l = j+Random.int (état.zone_de_jeu.finl-j+1) in
let tmp = état.zone_de_jeu.tableau.(c).(l) in
état.zone_de_jeu.tableau.(c).(l) <- état.zone_de_jeu.tableau.(i).(j);
état.zone_de_jeu.tableau.(i).(j) <- tmp
done;
done;;
let nouvelle_zone_de_jeu () =
let col = colonnes_of_niveau état.niveau
and lig = lignes_of_niveau état.niveau in
let ncol = bord_gauche+col+bord_droit
and nlig = bord_bas+lig+bord_haut in
état.zone_de_jeu <-
{ colonnes = col;
lignes = lig;
débutc = bord_gauche;
finc = bord_gauche+col-1;
débutl = bord_bas;
finl = bord_bas+lig-1;
nb_colonnes = ncol;
nb_lignes = nlig;
tableau = Array.make_matrix ncol nlig Vide };
création_tableau_ordonné ();
mélange_couleurs_tableau ();;
Ce document a été traduit de LATEX par
HEVEA.