(* ===================================================== *)
(*      Apprentissage de la programmation avec OCaml     *)
(*      Catherine Dubois & Valérie Ménissier-Morain      *)
(*                Éditions Hermès Sciences               *)
(*                        Mars 2004                      *)
(* ===================================================== *)
(* Fichier MLSRC/CC/CC_scores/highscores.ml              *)
(* ===================================================== *)

open Representation;;
open Graphics;;
open Affichage_jeu;;
open Saisie;;

let mise_à_jour_tableau_scores scores =
  let len = Array.length scores in
  if état.score > snd (scores.(len-1)) then
    begin
      let
 i = ref 0 in
      while !i < len && snd (scores.(!i)) >= état.score do
        incr i
      done;
      for j = len-2 downto !i do
        scores.(j+1) <- scores.(j)
      done;
      scores.(!i) <- (lecture_nom (), état.score)
    end;;

let écrire_centré_largeur_fixée w h nom score =
  let (ws,hc)= text_size score in
  let
 espace = (size_x()-w)/2 in
  moveto espace (h-hc/2); draw_string nom;
  moveto (size_x()-espace-ws) (h-hc/2); draw_string score;;

let affichage_meilleurs_scores scores =
  clear_graph();
  set_font "-*-courier-bold-r-normal--18-*";
  set_color foreground;
  écrire_centré_fenêtre (size_y()*9/10) "Meilleurs scores";
  Array.iteri
    (function i -> function (nom, score) ->
       let w = size_x()*3/5 in
       let
 h = (size_y()*2/3-(size_y()/20)*i) in
         écrire_centré_largeur_fixée w h nom (string_of_int score))
    scores;;

let lire_fichier_scores () =
  try
    let d = open_in_bin "scores" in
    let
 scores = input_value d in
      close_in d;
      scores
  with
  | End_of_file | Sys_error _ -> Array.make 10 ("", 0);;
let écrire_fichier_scores tableau_scores =
  let d = open_out_bin "scores" in
  output_value d tableau_scores;
  close_out d;;

Ce document a été traduit de LATEX par HEVEA.